鲲鹏 ARM 架构 Cephadm 部署 Ceph

一、环境说明

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