本文介绍 cephadm 单节点验证与三节点生产部署。架构、运维与功能测试见《Ceph 架构与运维》。
1. 磁盘准备
OSD 只能使用块设备(/dev/sdX、分区、/dev/loopN)。
1.1 查看可用设备
1
2
3
4
5
6
7
| lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,MODEL
# 文件系统与 UUID
lsblk -f
# 指定盘是否已挂载(无输出 = 未挂载)
findmnt /dev/nvme0n1
|
1.2 独立数据盘
以 /dev/nvme0n1 为例,在每台有数据盘的节点执行:
1
2
3
4
5
6
7
8
9
10
11
12
| export OSD_DISK=/dev/nvme0n1
# 再次确认:容量、挂载、分区
lsblk $OSD_DISK
mount | grep -q "$OSD_DISK" && echo "磁盘已挂载,请先 umount" && exit 1
# 清除旧分区表与文件系统签名(破坏性操作,务必确认盘符)
wipefs -a $OSD_DISK
# 验证:FSTYPE 应为空
lsblk -f $OSD_DISK
blkid $OSD_DISK || true # 无输出表示无签名
|
若需整盘单分区再交给 OSD:
1
2
3
4
| parted -s $OSD_DISK mklabel gpt mkpart primary 0% 100%
partprobe $OSD_DISK
export OSD_PART=${OSD_DISK}1 # 如 /dev/nvme0n11
lsblk -f $OSD_PART
|
2. 单节点部署
2.1 配置环境变量
1
2
3
4
5
6
7
8
9
| export CEPH_RELEASE=20.2.2
export CEPH_CODENAME=tentacle # 20.x → tentacle;19.x → squid;18.x → reef;17.x → quincy
export CEPH_IMAGE=quay.io/ceph/ceph:v${CEPH_RELEASE}
export CEPH_CLUSTER_NAME=ceph_single
export CEPH_NODE_IP=10.0.0.11 # 本机对外可被访问的 IP
export CEPH_PUBLIC_NETWORK=10.0.0.0/8 # bootstrap 后写入,覆盖整个 10 内网
export CEPH_CLUSTER_NETWORK=10.0.0.0/8
export CEPH_DASHBOARD_PORT=8080
export CEPH_DATA=/data/ops/ceph/$CEPH_CLUSTER_NAME
|
2.2 安装 cephadm
1
2
3
4
5
6
7
8
9
| mkdir -p $CEPH_DATA
curl --silent --remote-name --location \
https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
chmod +x cephadm
./cephadm add-repo --version $CEPH_RELEASE
./cephadm install
./cephadm install ceph-common
|
1
| cephadm --image $CEPH_IMAGE version
|
2.3 引导集群
1
2
3
4
5
6
7
8
9
10
11
| cat <<EOF > $CEPH_DATA/single-node.conf
[global]
# 默认副本数为 1
osd_pool_default_size = 1
# 最小副本数为 1
osd_pool_default_min_size = 1
# 允许创建大小为 1 的池
mon_allow_pool_size_one = true
# 对于单节点,禁用一些不必要的警告
mgr_allow_pool_size_one = true
EOF
|
1
2
3
4
5
| cephadm --image $CEPH_IMAGE bootstrap \
--mon-ip $CEPH_NODE_IP \
--config $CEPH_DATA/single-node.conf \
--skip-mon-network \
--allow-fqdn-hostname
|
bootstrap 完成后,执行《Ceph 架构与运维》配置管理。
2.4 部署 OSD
1
| lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
|
1
| ceph orch daemon add osd $(hostname):/dev/vdd
|
2.5 验证集群
1
2
3
| ceph -s
ceph df
ceph health detail
|
期望 health: HEALTH_OK,OSD 状态为 up,ceph df 显示可用容量。
3. 三节点部署
节点规划见《Ceph 架构与运维》。从环境变量、免密 SSH、安装 cephadm 到 bootstrap 与纳管,在三台机器上独立完成全流程。
3.1 配置环境变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| export CEPH_RELEASE=20.2.2
export CEPH_CODENAME=tentacle # 20.x → tentacle;19.x → squid;18.x → reef;17.x → quincy
export CEPH_IMAGE=quay.io/ceph/ceph:v${CEPH_RELEASE}
export CEPH_CLUSTER_NAME=ceph_cluster_3n
export CEPH_NODE1_HOST=ceph-node-01
export CEPH_NODE2_HOST=ceph-node-02
export CEPH_NODE3_HOST=ceph-node-03
export CEPH_NODE1_IP=10.0.0.11
export CEPH_NODE2_IP=10.0.0.12
export CEPH_NODE3_IP=10.0.0.13
export CEPH_NODE_IP=$CEPH_NODE1_IP
export CEPH_PUBLIC_NETWORK=10.0.0.0/8 # bootstrap 后写入,覆盖整个 10 内网
export CEPH_CLUSTER_NETWORK=10.0.0.0/8
export CEPH_DASHBOARD_PORT=8080
export CEPH_DATA=/data/ops/ceph/$CEPH_CLUSTER_NAME
|
3.2 配置免密
1
2
3
4
5
6
7
| [ -f ~/.ssh/id_rsa ] || ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
ssh-copy-id -o StrictHostKeyChecking=no root@$CEPH_NODE2_IP
ssh-copy-id -o StrictHostKeyChecking=no root@$CEPH_NODE3_IP
ssh -o BatchMode=yes root@$CEPH_NODE2_IP hostname
ssh -o BatchMode=yes root@$CEPH_NODE3_IP hostname
|
3.3 全部节点安装 cephadm
1
2
3
4
5
6
7
8
9
10
11
12
| mkdir -p $CEPH_DATA
curl --silent --remote-name --location \
https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
chmod +x cephadm
./cephadm rm-repo 2>/dev/null || true
./cephadm add-repo --version $CEPH_RELEASE
./cephadm install
./cephadm install ceph-common
which cephadm
|
下面的操作,只需要在管理节点上执行即可。
3.4 引导集群
cephadm bootstrap 会校验 public_network 须为本机网卡子网,不能在 bootstrap 阶段直接写 10.0.0.0/8。先用 --skip-mon-network 完成引导,再写入整个 10 内网段:
1
2
3
4
| cephadm --image $CEPH_IMAGE bootstrap \
--mon-ip $CEPH_NODE_IP \
--skip-mon-network \
--allow-fqdn-hostname
|
bootstrap 完成后,执行《Ceph 架构与运维》配置管理。
3.5 纳管其他节点
1
2
3
4
5
6
7
8
9
10
| ssh-keyscan -H $CEPH_NODE2_IP $CEPH_NODE3_IP >> ~/.ssh/known_hosts
ceph orch host add $CEPH_NODE2_HOST $CEPH_NODE2_IP
ceph orch host add $CEPH_NODE3_HOST $CEPH_NODE3_IP
ceph orch host label add $CEPH_NODE1_HOST _admin
ceph orch host label add $CEPH_NODE2_HOST _admin
ceph orch host label add $CEPH_NODE3_HOST _admin
ceph orch host ls
|
3.6 部署 MON / MGR / OSD
在 node1(管理节点)执行:
1
2
| ceph orch apply mon --placement="3 $CEPH_NODE1_HOST $CEPH_NODE2_HOST $CEPH_NODE3_HOST"
ceph orch apply mgr --placement="2 $CEPH_NODE1_HOST $CEPH_NODE2_HOST"
|
各节点准备好裸盘后,在管理节点执行:
1
| ceph orch apply osd --all-available-devices
|
或显式指定:
1
2
3
| ceph orch daemon add osd $CEPH_NODE1_HOST:/dev/nvme0n1
ceph orch daemon add osd $CEPH_NODE2_HOST:/dev/nvme0n1
ceph orch daemon add osd $CEPH_NODE3_HOST:/dev/nvme0n1
|
查看编排进度:
1
2
| ceph orch ps
watch -n 5 ceph -s
|
3.7 验证集群
1
2
3
4
5
6
| ceph -s
ceph mon stat
ceph osd tree
ceph df
ceph health detail
ceph orch host ls
|
期望:
mon: 3 daemonsmgr: ceph-node-01(active), ceph-node-02(standby) 或类似- 各节点
osd 均为 up health: HEALTH_OK
3.8 打印交付结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| FSID=$(ceph fsid)
cat <<EOF
Ceph Cluster:
Cluster Name: $CEPH_CLUSTER_NAME
FSID: $FSID
Nodes:
$CEPH_NODE1_HOST: $CEPH_NODE1_IP
$CEPH_NODE2_HOST: $CEPH_NODE2_IP
$CEPH_NODE3_HOST: $CEPH_NODE3_IP
Public Network: $CEPH_PUBLIC_NETWORK
Cluster Network: $CEPH_CLUSTER_NETWORK
Image: $CEPH_IMAGE
Config: /etc/ceph/ceph.conf
Keyring: /etc/ceph/ceph.client.admin.keyring
Dashboard: $(ceph dashboard get-url 2>/dev/null || echo "ceph dashboard get-url")
MGR Prometheus: http://$CEPH_NODE1_IP:9283/metrics
EOF
|
4. 参考