一、环境说明
1.1 硬件环境
| 主机名 | Public Network | Cluster Network | OSD磁盘 |
|---|---|---|---|
| SZ-ARM-C01 | 192.168.50.2 | 192.168.40.2 | /dev/sdb(14TB) |
| SZ-ARM-C02 | 192.168.50.3 | 192.168.40.3 | /dev/sdb(14TB) |
| SZ-ARM-C03 | 192.168.50.4 | 192.168.40.4 | /dev/sdb(14TB) |
1.2 软件环境
- 操作系统:Ubuntu 20.04.6 LTS(aarch64)
- CPU:ARM64(Kunpeng)
- Ceph版本:Quincy 17.2.8
- 部署方式:cephadm + Docker
- MON网络:192.168.50.0/24
- Cluster网络:192.168.40.0/24
二、为什么放弃 Reef(18.2.x)
最开始尝试使用 Reef 18.2.8 部署。
部署 MON、MGR 均正常,但在创建 OSD 时出现严重问题:
bash
ceph orch daemon add osd SZ-ARM-C01:/dev/sdb
出现错误:
text
RuntimeError:
Command failed with exit code -11:
ceph-osd --mkfs
进一步验证:
bash
docker run --rm quay.io/ceph/ceph:v18 ceph-osd --version
echo $?
返回:
text
139
即:
text
Segmentation fault
而测试 Quincy:
bash
docker run --rm quay.io/ceph/ceph:v17 ceph-osd --version
正常返回:
text
ceph version 17.2.8
说明:
- Reef ARM镜像存在兼容性问题
- ceph-osd程序在当前ARM平台发生段错误
- 问题与磁盘、LVM、cephadm均无关
最终决定放弃 Reef,采用 Quincy。
三、安装 Ceph Quincy(17.2.8)
本次部署采用 Ceph Quincy 17.2.8 版本,通过 cephadm 方式部署三节点 Ceph 集群。
3.1 安装 cephadm
下载 cephadm:
bash
curl --silent --remote-name --location \
https://download.ceph.com/rpm-quincy/el9/noarch/cephadm
赋予执行权限:
bash
chmod +x cephadm
mv cephadm /usr/sbin/
验证:
bash
cephadm version
输出类似:
text
cephadm version 17.2.8 (quincy)
3.2 配置 Ceph 软件源
添加 Quincy 软件仓库:
bash
cephadm add-repo --release quincy
安装 cephadm:
bash
cephadm install
验证:
bash
cephadm version
输出:
text
cephadm version 17.2.8 (quincy)
3.3 安装 Docker
执行 cephadm install 时,系统会自动检测容器运行时环境。
由于系统中未安装 Podman,cephadm 自动安装并配置 Docker,因此无需手工安装 Docker。
验证:
bash
docker version
docker ps
3.4 安装依赖组件
安装 Ceph 部署所需基础组件:
bash
apt install -y \
lvm2 \
chrony \
ssh
启动时间同步:
bash
systemctl enable chrony
systemctl restart chrony
检查主机环境:
bash
cephadm check-host
输出:
text
Host looks OK
3.5 下载 Ceph Quincy 镜像
拉取 Ceph Quincy 17.2.8 镜像:
bash
docker pull quay.io/ceph/ceph:v17
验证:
bash
docker run --rm quay.io/ceph/ceph:v17 ceph --version
输出:
text
ceph version 17.2.8 (quincy)
四、失败清理旧集群
删除 Reef 集群:
bash
cephadm rm-cluster \
--force \
--zap-osds \
--fsid <old_fsid>
确认删除:
bash
docker ps -a
ls /var/lib/ceph
ls /etc/ceph
确保:
text
/var/lib/ceph为空
/etc/ceph仅剩rbdmap
五、安装 Quincy
4.1 下载镜像
bash
docker pull quay.io/ceph/ceph:v17
验证:
bash
docker run --rm quay.io/ceph/ceph:v17 ceph --version
输出:
text
ceph version 17.2.8
4.2 Bootstrap
由于本机 cephadm 为 Reef,需要允许跨版本:
bash
cephadm \
--image quay.io/ceph/ceph:v17 \
bootstrap \
--allow-mismatched-release \
--mon-ip 192.168.50.2 \
--cluster-network 192.168.40.0/24
部署完成后:
bash
ceph -s
输出:
text
mon: 1
mgr: 1
osd: 0
五、添加节点
5.1 导出 ceph 公钥
bash
ceph cephadm get-pub-key > ceph.pub
复制到其它节点:
bash
ssh-copy-id -f -i ceph.pub root@SZ-ARM-C02
ssh-copy-id -f -i ceph.pub root@SZ-ARM-C03
5.2 添加节点
bash
ceph orch host add SZ-ARM-C02 192.168.50.3
ceph orch host add SZ-ARM-C03 192.168.50.4
确认:
bash
ceph orch host ls
六、部署 MON
部署三个 MON:
bash
ceph orch apply mon --placement="3"
遇到的问题:MON无法加入 quorum
现象:
text
mon.SZ-ARM-C02 running
ceph mon stat
只有2个mon
排查发现:
bash
docker ps | grep mon
存在旧 Reef MON:
text
ceph-a6890fd0-xxxx-mon-SZ-ARM-C02
旧集群残留导致新的 MON 无法加入。
解决:
bash
ssh root@SZ-ARM-C02 \
"cephadm rm-cluster --force \
--zap-osds \
--fsid old_fsid"
重新部署:
bash
ceph orch daemon rm mon.SZ-ARM-C02 --force
ceph orch daemon add mon SZ-ARM-C02:192.168.50.3
最终:
bash
ceph mon stat
输出:
text
3 mons
quorum 0,1,2
七、添加 OSD
首先确认设备:
bash
ceph orch device ls
显示:
text
/dev/sdb Available: Yes
添加 OSD:
bash
ceph orch daemon add osd SZ-ARM-C01:/dev/sdb
ceph orch daemon add osd SZ-ARM-C02:/dev/sdb
ceph orch daemon add osd SZ-ARM-C03:/dev/sdb
验证:
bash
ceph osd tree
输出:
text
osd.0 up
osd.1 up
osd.2 up
八、创建 Pool
创建 RBD Pool:
bash
ceph osd pool create images 32
ceph osd pool create template 32
ceph osd pool create backup 32
ceph osd pool create ebs 128
ceph osd pool create rds 32
设置副本:
bash
for p in images template backup ebs rds
do
ceph osd pool set $p size 2
ceph osd pool set $p min_size 1
done
初始化:
bash
rbd pool init images
rbd pool init template
rbd pool init backup
rbd pool init ebs
rbd pool init rds
九、最终集群状态
bash
ceph -s
输出:
text
health: HEALTH_OK
mon: 3 daemons
mgr: active + standby
osd: 3 up / 3 in
pgs:
active+clean
十、本次部署踩坑总结
1、Reef ARM镜像崩溃
现象:
text
ceph-osd exit code -11
原因:
text
Ceph Reef ARM镜像兼容性问题
解决:
text
改用 Quincy 17.2.8
2、升级过程中 cephadm 模块崩溃
错误:
text
TypeError:
include_ceph_conf
原因:
text
Reef/Quincy 配置对象不兼容
解决:
text
停止升级
删除旧集群
重新部署
3、cephadm 自动重启 mgr
现象:
text
ceph mgr fail
立即又恢复
原因:
text
cephadm 自动拉起 daemon
解决:
text
需要清理 cephadm 编排记录
4、MON无法加入 quorum
现象:
text
mon running
但 mon stat 看不到
原因:
text
旧集群残留 MON 容器
解决:
text
cephadm rm-cluster
重新部署 mon
5、device unavailable
现象:
text
Has GPT headers
解决:
bash
wipefs -a /dev/sdb
sgdisk --zap-all /dev/sdb
pvremove -ff -y /dev/sdb
partprobe
udevadm settle