Ceph作为开源的统一分布式存储系统,同时提供对象存储、块存储和文件系统三种接口,在IDC数据中心建设中被广泛采用。服务器运维场景下,Ceph集群的部署规划、容量管理和故障域控制直接决定存储可靠性。本文以Ceph Reef(v19)版本为例,演示从零搭建Ceph集群的完整流程。
Ceph架构设计与存储类型选择
Ceph的核心组件包括Monitor(MON)、Manager(MGR)、OSD(Object Storage Device)和MDS(Metadata Server)。各组件职责:
# Ceph组件职责
# MON - 维护集群拓扑映射(PG/OSD/Crush Map),提供一致性保证
# MGR - 集群监控、告警、仪表盘管理
# OSD - 实际数据存储守护进程,每个磁盘一个OSD
# MDS - 仅CephFS需要,管理文件系统元数据
#
# 三种存储接口选择:
# RBD (块存储) - 虚拟机磁盘、数据库卷、iSCSI目标
# RGW (对象存储) - S3/Swift兼容API,备份归档、CDN源站
# CephFS (文件) - POSIX挂载,NAS替代、共享文件系统
生产环境通常至少部署3个MON节点和3个MGR节点以保证高可用。OSD数量取决于存储容量需求,一般每个节点配置6-12块磁盘。
集群环境准备与节点规划
部署Ceph前需要完成网络配置、时间同步和SSH互信等准备工作。以下是一个3节点集群的规划示例:
# 集群节点规划
# ceph-node1: 192.168.10.11 MON+MGR+OSD (3块数据盘)
# ceph-node2: 192.168.10.12 MON+MGR+OSD (3块数据盘)
# ceph-node3: 192.168.10.13 MON+MGR+OSD (3块数据盘)
# ceph-deploy: 192.168.10.10 管理节点(不参与存储)
# 所有节点基础环境配置
# 1. 配置NTP时间同步
apt install chrony -y
# 在管理节点配置chrony server,其他节点配置client
# 2. 创建部署用户并配置SSH免密
useradd -m -s /bin/bash cephadm
echo "cephadm ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
su - cephadm
ssh-keygen -t rsa -N ""
ssh-copy-id cephadm@ceph-node1
ssh-copy-id cephadm@ceph-node2
ssh-copy-id cephadm@ceph-node3
# 3. 配置hosts解析
cat >> /etc/hosts << EOF
192.168.10.11 ceph-node1
192.168.10.12 ceph-node2
192.168.10.13 ceph-node3
EOF
Ceph部署工具cephadm安装配置
Ceph Reef版本推荐使用cephadm进行容器化部署,相比传统ceph-deploy方式管理更灵活:
# 在管理节点安装cephadm
curl --silent --remote-name \
https://raw.githubusercontent.com/ceph/ceph/quincy/src/cephadm/cephadm
chmod +x cephadm
./cephadm add-repo --release reef
apt install cephadm -y
# 引导集群(在第一个节点上初始化MON和MGR)
cephadm bootstrap \
--mon-ip 192.168.10.11 \
--initial-dashboard-admin-password Ceph@2026 \
--dashboard-password-noupdate
# 将其他节点加入集群
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node2
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node3
ceph orch host add ceph-node2 192.168.10.12
ceph orch host add ceph-node3 192.168.10.13
# 查看集群状态
ceph -s
# 输出示例:
# cluster:
# id: a3f8d2e1-xxxx-xxxx
# health: HEALTH_OK
# services:
# mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3
# mgr: ceph-node1(active), standbys: ceph-node2
# osd: 9 osds: 9 up, 9 in
OSD与PG容量管理
OSD添加完成后需要配置PG(Placement Group)数量,PG数量直接影响数据分布的均衡性:
# 添加OSD(自动发现可用磁盘)
ceph orch daemon add osd --all-available-devices
# 手动指定磁盘添加OSD
ceph orch daemon add osd ceph-node1:/dev/sdb
ceph orch daemon add osd ceph-node1:/dev/sdc
ceph orch daemon add osd ceph-node1:/dev/sdd
# 创建块存储池并设置PG数量
# PG数量计算公式: PG = (OSD数 * 100) / 副本数 向上取2的N次幂
# 9个OSD,3副本: (9*100)/3 = 300 -> 取256
ceph osd pool create rbd-pool 256 256 replicated
ceph osd pool set rbd-pool size 3
ceph osd pool set rbd-pool min_size 2
ceph osd pool application enable rbd-pool rbd
# 初始化RBD
rbd pool init rbd-pool
# 创建块设备镜像
rbd create rbd-pool/vm-disk-01 --size 100G
rbd map rbd-pool/vm-disk-01
mkfs.ext4 /dev/rbd0
mount /dev/rbd0 /mnt/ceph-rbd
PG数量设置不当会导致数据分布不均匀或集群性能下降。PG过多增加MON管理开销,PG过少导致单个PG数据量过大影响恢复速度。当OSD数量变化时可通过pg_autoscaler自动调整:
# 启用PG自动缩放
ceph osd pool set rbd-pool pg_autoscale_mode on
# 查看PG状态与推荐值
ceph osd pool autoscale-status
# POOL SIZE TARGET RAW USED %USE PG_NUM NEW_PG_NUM AUTO
# rbd-pool 0 8 0 0 256 256 on
Crush Map故障域调优
Crush Map决定数据副本在OSD之间的分布策略,合理的故障域设置能避免单节点故障导致多副本同时丢失:
# 查看当前Crush Map规则
ceph osd crush rule dump
# 创建基于host故障域的Crush规则(默认为osd级)
ceph osd crush rule create-replicated \
replicated-rule-host \
default host
# 创建基于rack故障域的Crush规则
ceph osd crush rule create-replicated \
replicated-rule-rack \
default rack
# 将存储池应用新的Crush规则
ceph osd pool set rbd-pool crush_rule replicated-rule-host
# 验证数据分布
ceph osd df tree
# ID CLASS WEIGHT REWEIGHT SIZE USED AVAIL %USE VAR PGS
# 0 hdd 0.546 1.000 546G 12G 534G 2.2 1.0 85
# 1 hdd 0.546 1.000 546G 11G 535G 2.0 0.9 83
# 2 hdd 0.546 1.000 546G 13G 533G 2.4 1.1 88
# 数据应在各节点间均匀分布,偏差不超过10%
生产环境中host级故障域是基本要求,即同一数据的三个副本分别存储在不同物理服务器上。对于更高可靠性要求,可配置rack或row级故障域,防止机架级断电导致数据不可用。Ceph集群上线后需定期检查磁盘健康状态,通过SMART监控提前替换接近寿命终点的磁盘,避免多盘同时故障导致PG降级。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/ceph-fen-bu-shi-cun-chu-ji-qun-da-jian-yu-rong-liang-guan/