部署Ceph对象存储集群服务
悦库网盘集群化由悦库服务集群、MGR(MySQL Group Replication)集群、Ceph存储集群 以及虚拟路由器 4个子模块组成,本文指导用户部署Ceph对象存储集群,图中红线框所示。
实现方案
使用Ceph分布式存储系统,提供高性能、高可用和高可扩展性的S3服务;通过Keepalived + LVS实现S3服务的负载均衡和高可用。
本文中,使用如下Ceph组件: 1. Monitor(mon) 用于维护集群状态的映射信息 2. Manager(mgr) 跟踪运行时指标和Ceph集群的当前状态 3. OSD(osd) 用于存储和维护数据 4. Radosgw(rgw) 对象存储的网关服务,提供S3的标准API支持
更多Ceph相关请参阅官方文档
环境准备
主机名 | IP地址 | 操作系统 | 角色 | 部署模块 |
---|---|---|---|---|
node-01 | 192.168.0.201 | Ubuntu18 | Ceph集群节点 | docker、mon、mgr、osd、rgw |
node-02 | 192.168.0.202 | Ubuntu18 | Ceph集群节点 | docker、mon、mgr、osd、rgw |
node-03 | 192.168.0.203 | Ubuntu18 | Ceph集群节点 | docker、mon、mgr、osd、rgw |
lb-01 | 192.168.0.191 | Ubuntu18 | 虚拟路由节点 | Keepalived |
lb-02 | 192.168.0.192 | Ubuntu18 | 虚拟路由节点 | Keepalived |
- 设置主机名
# 在192.168.0.201上执行
hostnamectl set-hostname node-01
# 在192.168.0.202上执行
hostnamectl set-hostname node-02
# 在192.168.0.203上执行
hostnamectl set-hostname node-03
# 在192.168.0.191上执行
hostnamectl set-hostname bl-01
# 在192.168.0.192上执行
hostnamectl set-hostname bl-02
- 部署Docker,并拉取ceph镜像 分别在node-01、node-02和node-03上执行
apt install -y docker.io
docker pull ceph/daemon:latest-octopus
- 部署Keepalived 在bl-01和bl-02上安装Keepalived
apt install -y keepalived
- 准备存储磁盘,并挂载至目录 分别在node-01、node-02和node-03上准备两个磁盘/dev/sdb和/dev/sdc,并挂载至/var/lib/ceph/osd-sdb、/var/lib/ceph/osd-sdc
mkfs.xfs -f /dev/sdb
mkfs.xfs -f /dev/sdc
mkdir -p /var/lib/ceph/osd-sd{b,c}
mount /dev/sdb /var/lib/ceph/osd-sdb
mount /dev/sdc /var/lib/ceph/osd-sdc
部署过程
部署Monitor
- 在node-01上启动Monitor容器
# 创建容器
docker run -d \
--name=mon \
--net=host \
--restart=always \
-v /etc/localtime:/etc/localtime \
-v /opt/ceph/etc:/etc/ceph \
-v /opt/ceph/lib:/var/lib/ceph \
-v /opt/ceph/logs:/var/log/ceph \
-e MON_IP=192.168.0.201 \
-e CEPH_PUBLIC_NETWORK=192.168.0.0/24 \
ceph/daemon:latest-octopus mon
# 禁用不安全认证
docker exec mon ceph config set mon auth_allow_insecure_global_id_reclaim false
- 在node-02和node-03上,启动Monitor节点 修改在node-01的配置文件/opt/ceph/etc/ceph.conf,编辑 /opt/ceph/etc/ceph.conf ,修改mon host 项,追加node-02 和node-03 的IP
mon host = 192.168.0.201,192.168.0.202,192.168.0.203
- 配置文件内容如下:
[global]
fsid = bc7e5644-d399-42e2-ac99-b8eb5470e360
mon initial members = node-01
mon host = 192.168.0.201,192.168.0.202,192.168.0.203
public network = 192.168.0.0/24
cluster network = 192.168.0.0/24
osd journal size = 100
- 重要配置说明:
配置项 | 值 | 说明 |
---|---|---|
fsid | bc7e5644-d399-42e2-ac99-b8eb5470e360 | GUID,唯一标识一个Ceph集群,所有集群的节点必需一致 |
mon host | 192.168.0.201,192.168.0.202,192.168.0.203 | 集群Monitor节点的IP地址,使用“,”分割 |
public network | 192.168.0.0/24 | 供客户端访问的网段 |
cluster network | 192.168.0.0/24 | 集群节点通信的网段 |
- 将node-01的Monitor配置拷贝至node-02和node-03
scp -r /opt/ceph root@node-02:/opt/
scp -r /opt/ceph root@node-03:/opt/
- 在node-02上启动Monitor容器
# 创建容器
docker run -d \
--name=mon \
--net=host \
--restart=always \
-v /etc/localtime:/etc/localtime \
-v /opt/ceph/etc:/etc/ceph \
-v /opt/ceph/lib:/var/lib/ceph \
-v /opt/ceph/logs:/var/log/ceph \
-e MON_IP=192.168.0.202 \
-e CEPH_PUBLIC_NETWORK=192.168.0.0/24 \
ceph/daemon:latest-octopus mon
# 禁用不安全认证
docker exec mon ceph config set mon auth_allow_insecure_global_id_reclaim false
- 在node-03上启动Monitor容器
# 创建容器
docker run -d \
--name=mon \
--net=host \
--restart=always \
-v /etc/localtime:/etc/localtime \
-v /opt/ceph/etc:/etc/ceph \
-v /opt/ceph/lib:/var/lib/ceph \
-v /opt/ceph/logs:/var/log/ceph \
-e MON_IP=192.168.0.203 \
-e CEPH_PUBLIC_NETWORK=192.168.0.0/24 \
ceph/daemon:latest-octopus mon
# 禁用不安全认证
docker exec mon ceph config set mon auth_allow_insecure_global_id_reclaim false
- 验证,查看Monitor集群状态
docker exec mon ceph mon stat
部署Manager
分别在node-01、node-02和node-03上启动Manager容器
docker run -d \
--name=mgr \
--net=host \
--restart=always \
-v /etc/localtime:/etc/localtime \
-v /opt/ceph/etc:/etc/ceph \
-v /opt/ceph/lib:/var/lib/ceph \
-v /opt/ceph/logs:/var/log/ceph \
ceph/daemon:latest-octopus mgr
部署OSD
- 分别在node-01、node-02和node-03上部署OSD容器
- 分别在每个Monitor节点生成osd的密钥环
docker exec mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring
- 启动osd
# 在目录/var/lib/ceph/osd-sdb上部署osd
docker run -d \
--name=osd-sdb \
--net=host \
--restart=always \
--privileged=true \
--pid=host \
-v /etc/localtime:/etc/localtime \
-v /opt/ceph/etc:/etc/ceph \
-v /opt/ceph/lib:/var/lib/ceph \
-v /opt/ceph/logs:/var/log/ceph \
-v /var/lib/ceph/osd-sdb:/var/lib/ceph/osd \
ceph/daemon:latest-octopus osd_directory
# 在目录/var/lib/ceph/osd-sdc上部署osd
docker run -d \
--name=osd-sdc \
--net=host \
--restart=always \
--privileged=true \
--pid=host \
-v /etc/localtime:/etc/localtime \
-v /opt/ceph/etc:/etc/ceph \
-v /opt/ceph/lib:/var/lib/ceph \
-v /opt/ceph/logs:/var/log/ceph \
-v /var/lib/ceph/osd-sdc:/var/lib/ceph/osd \
ceph/daemon:latest-octopus osd_directory
- 验证
# 查看osd状态
docker exec mon ceph osd stat
docker exec mon ceph osd tree