在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)、33006789(Ceph Monitor)、8443(Dashboard)、80443 等 。
  • 确保所有节点之间 SSH 免密登录(用于 cephadm 管理)。

1.2 网络配置

  • Public Network(业务网络):192.168.10.0/24,主机 IP 192.168.10.10/24,网关 192.168.10.1
  • Cluster Network(存储内部网络):10.0.0.0/24,主机 IP 10.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,本方案配置充足 。
posted @ 2026-03-04 11:07  wanghongwei-dev  阅读(2)  评论(0)    收藏  举报