banner
NEWS LETTER

Docker部署高可用Ceph集群

Scroll down

本文作者:丁辉

Docker部署高可用Ceph集群

CEPH版本 CEPH下载

DockerHub仓库(已废弃) Quay仓库

节点名称 IP 存储盘 角色
ceph-node-1 192.168.1.10 /dev/sdb mon,mgr,osd,mds,rgw
ceph-node-2 192.168.1.20 /dev/sdb mon,mgr,osd,mds,rgw
ceph-node-3 192.168.1.30 /dev/sdb mon,mgr,osd,mds,rgw

组件介绍

  • OSD(Object Storage Daemon):负责管理磁盘上的数据块,执行数据的读写操作,并确保集群的高可用性。通常至少需要部署三个节点以保证系统的稳定运行。
  • MON(Monitor):负责维护 Ceph 集群的状态、配置和映射信息,保障集群元数据的一致性,协调节点间数据的分布和恢复。为确保集群的高可用性,一般需要至少部署三个节点。
  • MDS(Metadata Server):负责管理文件系统的目录结构和文件/目录的元数据信息,为 CephFS(Ceph 的分布式文件系统)提供元数据服务。需要注意的是,块存储和对象存储不需要部署 MDS。
  • MGR(Manager):负责收集 Ceph 集群的状态信息,包括 OSD、MON、MDS 的性能指标和健康状况,并提供可视化的仪表板(Ceph Dashboard)供用户查看。为确保集群的高可用性,通常至少需要部署两个节点。
  • RGW(Rados Gateway):提供了 RESTful API,允许用户通过 HTTP/HTTPS 请求访问和管理存储在 Ceph 集群中的数据。支持 Amazon S3 API 和 OpenStack Swift API。

使用镜像介绍

  • ceph/daemon 是一个 Docker 镜像,它用于运行 Ceph 集群中的各种守护进程,如监控节点(MON)、管理节点(MGR)、元数据服务器(MDS)、对象存储守护进程(OSD)以及 RADOS 网关(RGW)。这个镜像包含了运行一个完整 Ceph 存储集群所需的所有组件,使得部署和管理变得更加容易和灵活,特别是在容器化环境中。

  • ceph/daemon 镜像的优点是可以简化 Ceph 的部署和运维过程,因为它预配置了 Ceph 的各种服务和依赖,用户只需通过设置适当的环境变量和参数即可快速启动各种 Ceph 组件。这使得它在动态的云环境中特别有用,可以轻松地扩展或更新集群。

  • 此外,使用 Docker 运行 Ceph 服务还有助于隔离不同服务的运行环境,提高系统的安全性和稳定性。

基础环境准备

请查看此文章

开始部署

部署监视器 MON

  1. 节点一启动 mon

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    docker run -d --net=host \
    --name ceph-mon \
    --restart=always \
    --privileged=true \
    -v /dev:/dev \
    -v /etc/ceph:/etc/ceph \
    -v /var/lib/ceph/:/var/lib/ceph/ \
    -v /var/log/ceph/:/var/log/ceph/ \
    -v /etc/localtime:/etc/localtime:ro \
    -e MON_IP=192.168.1.10 \
    -e CEPH_PUBLIC_NETWORK=192.168.1.0/24 \
    ceph/daemon:latest mon
  2. 禁用不安全认证

    这个参数控制是否允许在集群中通过全局 ID 回收机制(global ID reclaim)来认证用户身份

    1
    ceph config set mon auth_allow_insecure_global_id_reclaim false
  3. 创建 OSD 秘钥

    1
    ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring
  4. 拷贝节点一 ceph 目录, 传输至节点二和节点三, 传输完后按照第一步启动容器

    注意修改 MON_IP

    1
    2
    3
    4
    5
    6
    # 节点二
    scp -r /etc/ceph/ root@ceph-node-2:/etc/
    scp -r /var/lib/ceph root@ceph-node-2:/var/lib/ceph
    # 节点三
    scp -r /etc/ceph root@ceph-node-3:/etc/ceph
    scp -r /var/lib/ceph root@ceph-node-3:/var/lib/ceph

部署监控 MGR

为了确保集群的高可用性, 通常至少要部署两个节点

1
2
3
4
5
6
7
8
docker run -d --net=host \
--name ceph-mgr \
--restart=always \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph/ \
-v /var/log/ceph/:/var/log/ceph/ \
-v /etc/localtime:/etc/localtime:ro \
ceph/daemon:latest mgr

部署存储 OSD

  1. 初始化块存储

    1
    docker exec ceph-mon ceph-volume lvm prepare --data /dev/sdb

    ceph-volume 参数解释

    参数 解释
    --bluestore 指定使用 Bluestore 存储引擎。Bluestore 是 Ceph 的一种存储格式,不依赖于文件系统,直接在裸设备上操作数据。
    --filestore 指定使用 Filestore 存储引擎。Filestore 是较旧的存储格式,它在底层文件系统(如 XFS)之上操作数据。
    --no-systemd 在创建时禁止生成 systemd 单元文件。通常用于不使用 systemd 的系统或者在特定的管理脚本中需要手动管理服务启动。
    --data 指定用于数据存储的设备或分区。
    --db 仅用于 Bluestore。指定用于存放数据库的设备或分区,可以提升性能。
    --wal 仅用于 Bluestore。指定用于写入前日志(Write-Ahead Log)的设备或分区,用于提升写入性能。
    --journal 仅用于 Filestore。指定日志存放的设备或分区,用于提升日志处理性能。
    --prepare 准备磁盘用于 Ceph 使用,但不启动 OSD。
    --activate 激活之前已准备好的 OSD。
    --crush-device-class 指定设备的 CRUSH 类别,用于 Ceph 集群的数据分布和复制策略中。
  2. 部署 OSD

    注意:根据自己情况修改 OSD_ID

    1
    2
    3
    4
    5
    6
    7
    8
    9
    docker run -d --net=host --name=ceph-osd \
    --privileged=true \
    -e OSD_ID=0 \
    -v /dev/:/dev/ \
    -v /etc/ceph:/etc/ceph \
    -v /var/lib/ceph/:/var/lib/ceph/ \
    -v /var/log/ceph/:/var/log/ceph/ \
    -v /etc/localtime:/etc/localtime:ro \
    ceph/daemon:latest osd_ceph_volume_activate

    使用本地目录启动 OSD

    1
    2
    3
    4
    5
    6
    7
    8
     >docker run -d --net=host --name=ceph-osd \
    --privileged=true \
    -v /etc/ceph:/etc/ceph \
    -v /var/lib/ceph/:/var/lib/ceph/ \
    -v /var/log/ceph/:/var/log/ceph/ \
    -v /var/lib/ceph/osd/osd-0:/var/lib/ceph/osd \
    -v /etc/localtime:/etc/localtime:ro \
    ceph/daemon:latest osd_directory

部署文件系统 MDS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run -d --net=host \
--name ceph-mds \
--restart=always \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph/ \
-v /var/log/ceph/:/var/log/ceph/ \
-v /etc/localtime:/etc/localtime:ro \
-e CEPHFS_CREATE=1 \
-e CEPHFS_NAME=cephfs \
-e CEPHFS_DATA_POOL=cephfs_data \
-e CEPHFS_DATA_POOL_PG=128 \
-e CEPHFS_METADATA_POOL=cephfs_metadata \
-e CEPHFS_METADATA_POOL_PG=64 \
ceph/daemon:latest mds

部署对象存储接 RGW

  1. 创建 Rgw 密钥

    1
    docker exec ceph-mon ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring
  2. 启动

    1
    2
    3
    4
    5
    6
    7
    8
    docker run -d --net=host \
    --name=ceph-rgw \
    --restart=always \
    -v /etc/ceph:/etc/ceph \
    -v /var/lib/ceph/:/var/lib/ceph/ \
    -v /var/log/ceph/:/var/log/ceph/ \
    -v /etc/localtime:/etc/localtime:ro \
    ceph/daemon rgw

开启管理界面

查看此文档 MGR开启监控管理界面

卸载

  1. 删除容器

    1
    2
    3
    4
    5
    docker rm -f ceph-mon
    docker rm -f ceph-mgr
    docker rm -f ceph-osd
    docker rm -f ceph-mds
    docker rm -f ceph-rgw
  2. 删除持久化目录

    1
    rm -rf {/etc/ceph,/var/lib/ceph,/var/log/ceph}

I'm so cute. Please give me money.

其他文章
cover
Docker单机部署Ceph集群(无裸盘)
  • 70/01/01
  • 00:00
  • Kubernetes-存储
cover
MGR开启监控管理界面
  • 70/01/01
  • 00:00
  • Kubernetes-存储
目录导航 置顶
  1. 1. Docker部署高可用Ceph集群
    1. 1.1. 基础环境准备
    2. 1.2. 开始部署
      1. 1.2.1. 部署监视器 MON
      2. 1.2.2. 部署监控 MGR
      3. 1.2.3. 部署存储 OSD
      4. 1.2.4. 部署文件系统 MDS
      5. 1.2.5. 部署对象存储接 RGW
      6. 1.2.6. 开启管理界面
    3. 1.3. 卸载
请输入关键词进行搜索