在RHEL 9.4上使用cephadm部署Ceph集群指南
在 RHEL 9.4 上使用 cephadm 部署 Ceph 集群指南
重要说明:RHEL 9.4 与 Ceph 的兼容性
根据 Red Hat 官方文档,Red Hat Ceph Storage 6.x 及更高版本完全支持 RHEL 9.4 作为主机操作系统 。集群中的所有节点必须使用相同版本的操作系统,以确保 ceph 软件包版本一致 。本指南基于此兼容性设计。
1. 环境准备(所有节点执行)
1.1 系统安装与基础配置
- 安装 Red Hat Enterprise Linux 9.4,选择最小化安装。
- 配置主机名、静态 IP 地址及 DNS 解析(
/etc/hosts包含所有节点)。 - 时间同步:安装并启用
chronyd。 - 提升文件描述符限制,关闭透明大页(最佳实践建议,详细操作参阅其他文档)。
- 关闭 SELinux(或设置为 permissive),或配置允许容器通信。
- 关闭防火墙或开放 Ceph 所需端口(生产环境建议按需开放,而非完全关闭)。需要开放的端口包括:
22(SSH)、3300、6789(Ceph Monitor)、8443(Dashboard)、80、443等 。 - 确保所有节点之间 SSH 免密登录(用于
cephadm管理)。
1.2 网络配置
- Public Network(业务网络):
192.168.10.0/24,主机 IP192.168.10.10/24,网关192.168.10.1 - Cluster Network(存储内部网络):
10.0.0.0/24,主机 IP10.0.0.10/24,无网关
每个节点需配置两张网卡(或绑定),分别连接至对应 VLAN。使用 nmcli 配置静态 IP:
# 配置 Public 网卡(如 eth0)
nmcli connection add type ethernet con-name public ifname eth0
nmcli connection modify public ipv4.addresses 192.168.10.10/24
nmcli connection modify public ipv4.gateway 192.168.10.1
nmcli connection modify public ipv4.dns 8.8.8.8
nmcli connection modify public ipv4.method manual
nmcli connection up public
# 配置 Cluster 网卡(如 eth1)
nmcli connection add type ethernet con-name cluster ifname eth1
nmcli connection modify cluster ipv4.addresses 10.0.0.10/24
nmcli connection modify cluster ipv4.method manual
nmcli connection up cluster
确保各节点的 Public IP 在同一网段且互通,Cluster IP 在同一网段且互通。
1.3 关键步骤:启用 Root SSH 登录(RHEL 9 必须操作)
RHEL 9 默认禁止 root 用户通过 SSH 密码登录,而 cephadm bootstrap 过程需要 root 权限通过 SSH 管理节点 。必须在所有节点执行以下操作:
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config.d/01-permitrootlogin.conf
systemctl restart sshd.service
1.4 安装容器运行时与依赖工具
RHEL 9.4 默认使用 Podman,安装即可:
dnf install -y podman
dnf install -y lvm2 parted gdisk
2. 部署 cephadm
在管理节点(可为任意节点)执行。根据 Red Hat 官方建议,您可以通过预安装的 cephadm-ansible playbook 来准备环境,也可以直接使用 cephadm 脚本 。
2.1 方法一:使用 cephadm 脚本(快速启动)
# 下载 cephadm 脚本
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
chmod +x cephadm
./cephadm add-repo --release quincy # 或 reef
./cephadm install
2.2 方法二:使用 cephadm-ansible(推荐生产环境)
在管理节点安装 cephadm-ansible 包 :
dnf install -y cephadm-ansible
cd /usr/share/cephadm-ansible
编辑 inventory 文件(例如 hosts),添加所有节点:
[node1]
192.168.10.10
[node2]
192.168.10.11
[node3]
192.168.10.12
[admin]
192.168.10.10
运行 preflight playbook 准备所有节点:
ansible-playbook -i hosts cephadm-preflight.yml
3. 引导新集群
在管理节点执行引导命令,指定 Public 和 Cluster 网络 :
./cephadm bootstrap \
--mon-ip 192.168.10.10 \ # Public 网络的 IP(本节点)
--cluster-network 10.0.0.0/24 \ # Cluster 网络 CIDR
--initial-dashboard-password <password> \
--dashboard-port 8443
引导完成后,会输出集群 fsid、公钥等信息。将生成的公钥(通常位于 /etc/ceph/ceph.pub)添加到所有节点的 ~/.ssh/authorized_keys 中,以便 cephadm 能免密登录其他节点。
4. 添加其他节点到集群
ceph orch host add <hostname> <public-ip> --labels _admin
验证节点添加:ceph orch host ls
5. 硬盘分区准备(按规划执行)
5.1 清理现有分区
在每台节点上,对 HDD 和 NVMe 执行清理:
# 针对 HDD(例如 /dev/sda ~ /dev/sdl)
wipefs -a /dev/sd[a-l]
# 针对 NVMe(例如 /dev/nvme0n1, /dev/nvme1n1)
wipefs -a /dev/nvme[0-1]n1
5.2 对 NVMe 进行分区(按规划)
以 /dev/nvme0n1 为例,使用 parted 进行分区(确保起始位置为 1MiB 以实现 4K 对齐):
parted /dev/nvme0n1 mklabel gpt
# 创建 6 个 400GB 分区(WAL+DB for HDD OSD)
for i in {1..6}; do
start=$(( (i-1)*400*1024 + 1 ))MiB
end=$(( i*400*1024 ))MiB
parted /dev/nvme0n1 mkpart primary ${start} ${end}
done
# 剩余空间创建一个分区(纯 NVMe OSD)
parted /dev/nvme0n1 mkpart primary 2400GiB 100%
同样对 /dev/nvme1n1 操作。
验证分区对齐:parted /dev/nvme0n1 align-check opt 1 等。
5.3 记录所有磁盘的 by-id 路径
ls -l /dev/disk/by-id/ | grep -E 'sd.|nvme' > /root/disk-by-id.txt
后续 OSD 创建均使用 /dev/disk/by-id/ 下的稳定名称。
6. 添加 OSD
6.1 进入 cephadm shell
cephadm shell
6.2 创建 HDD OSD(带 NVMe 加速)
循环执行以下命令(替换实际 by-id 名称):
# 示例:HDD /dev/sda 对应 DB 分区 /dev/nvme0n1p1
ceph-volume lvm create --bluestore \
--data /dev/disk/by-id/wwn-0x5000c500... \ # HDD by-id
--block.db /dev/disk/by-id/nvme-eui.0008...-part1 # NVMe 分区 by-id
注意:无需指定 --block.wal,Ceph 会在 DB 分区内自动分配 WAL 空间。
重复 12 次,确保每个 HDD 对应一个 NVMe 分区(按规划映射)。
6.3 创建纯 NVMe OSD
# 纯 NVMe OSD 数据分区(例如 /dev/nvme0n1p7)
ceph-volume lvm create --bluestore \
--data /dev/disk/by-id/nvme-eui.0008...-part7
同样为另一块 NVMe 的剩余分区创建 OSD。
6.4 验证 OSD 状态
退出 cephadm shell,执行:
ceph osd tree
ceph osd df
检查 OSD 是否在线,以及使用的设备。
7. 配置 CRUSH 设备类
7.1 标记 OSD 的设备类型
# 查看 OSD 列表及对应设备
ceph osd metadata <osd-id> | grep "devices"
# 根据设备类型设置 class
ceph osd crush set-device-class hdd <osd-id> # 对 HDD OSD
ceph osd crush set-device-class nvme <osd-id> # 对 NVMe OSD
7.2 创建 CRUSH rule
# 基于 host 故障域、选择 hdd 类 OSD 的 rule
ceph osd crush rule create-replicated rule-hdd default host hdd
# 基于 host 故障域、选择 nvme 类 OSD 的 rule
ceph osd crush rule create-replicated rule-nvme default host nvme
8. 创建存储池
8.1 创建复制池(RBD 池)
# pool-vm-system-nvme (PGs=64)
ceph osd pool create pool-vm-system-nvme 64 64 replicated rule-nvme
ceph osd pool application enable pool-vm-system-nvme rbd
# pool-vm-data-hdd-accel (PGs=512)
ceph osd pool create pool-vm-data-hdd-accel 512 512 replicated rule-hdd
ceph osd pool application enable pool-vm-data-hdd-accel rbd
8.2 创建纠删码池
首先创建 EC profile,显式绑定 hdd 设备类:
ceph osd erasure-code-profile set ec-8-3 \
k=8 m=3 \
crush-failure-domain=host \
crush-device-class=hdd
然后创建 EC 池:
ceph osd pool create pool-backup-ec 64 64 erasure ec-8-3
ceph osd pool application enable pool-backup-ec rgw # 若用于对象存储
9. 应用 BlueStore 优化配置
9.1 全局配置
ceph config set global bluestore_compression_algorithm zstd
ceph config set global bluestore_compression_mode force
ceph config set osd bluestore_min_alloc_size_hdd 4096
9.2 限制 scrub 时间窗口
ceph config set osd osd_scrub_begin_hour 2
ceph config set osd osd_scrub_end_hour 6
ceph config set osd osd_deep_scrub_begin_hour 2
ceph config set osd osd_deep_scrub_end_hour 6
10. 启用并验证 Prometheus 监控
cephadm 在 bootstrap 阶段默认会自动部署监控组件,包括 Prometheus、Grafana 和 Alertmanager,并与 Ceph Dashboard 集成 。您无需额外安装即可使用。
10.1 验证监控组件状态
执行以下命令查看所有服务状态:
ceph orch ps
输出中应包含类似以下的服务:
prometheus.<host>(Prometheus 服务器)grafana.<host>(Grafana 仪表盘)alertmanager.<host>(告警管理器)node-exporter.<host>(节点指标收集器,默认部署在每台主机上)
10.2 访问 Ceph Dashboard
使用引导时设置的密码登录 Dashboard:
https://<管理节点公网IP>:8443
在 Dashboard 的左侧菜单中,点击 Monitoring 即可查看内置的 Grafana 仪表盘,包括集群性能、OSD 指标、主机资源等。
10.3 配置 Prometheus 告警(可选)
cephadm 已包含一组默认的告警规则,您可以通过以下方式自定义:
# 查看当前告警规则
ceph orch prometheus rule ls
# 应用自定义告警规则文件(需先创建规则文件)
ceph orch prometheus rule apply /path/to/custom_rules.yaml
详细的自定义方法请参考 Ceph 官方文档。
10.4 验证节点指标收集
确保所有主机上都运行了 node-exporter:
ceph orch ps --daemon-type node-exporter
如果某台主机缺少 node-exporter,可以通过以下命令添加:
ceph orch apply node-exporter <hostname>
至此,Prometheus 监控已启用并可正常使用。
11. 验证与测试
- 检查集群健康:
ceph -s - 检查网络隔离:在节点上通过
iperf测试 Cluster 网络带宽,确保 OSD 之间通信使用 Cluster 网络。 - 创建测试 RBD 镜像,映射并格式化,验证读写性能。
12. 运维注意事项(红线回顾)
- DB 分区容量监控:定期检查
ceph osd df中 DB 使用率,确保不超过 70%。每个 HDD OSD 的 DB 分区容量建议为 HDD 容量的 4%(对于混合工作负载)至 1%(对于纯块设备工作负载),本方案取 400GB(5%)满足要求 。 - OSD 使用率:当 OSD 使用率超过 70% 时规划扩容。
- NVMe IO 隔离:确保单块 NVMe 承载的 OSD 不超过 8 个(本方案为 7 个)。
- 网络带宽:建议对 Cluster 网络使用双网卡绑定或启用多个 TCP 连接,避免单口成为瓶颈。
- 硬件要求:每个 OSD 容器至少分配 1 个 CPU 核心和 5GB RAM,本方案配置充足 。

浙公网安备 33010602011771号