Ceph是开源分布式存储系统中应用最广泛的方案之一,提供对象存储(RGW)、块存储(RBD)和文件存储(CephFS)三种接口。Ceph的核心设计是CRUSH算法——一种伪随机数据分布算法,通过计算而非查表确定数据位置,避免了元数据服务单点瓶颈。在生产环境中部署Ceph集群,合理的架构规划、CRUSH map调优和PG数量配置直接决定集群性能和可靠性,IDC数据中心运维人员需掌握这些关键技能。
Ceph集群架构规划与硬件选型
Ceph集群由Monitor、Manager、OSD三种角色组成。生产环境推荐最小配置:3台Monitor(奇数节点保证Paxos共识)、3台Manager(主备切换)、N台OSD节点(根据容量需求扩展)。
OSD节点硬件建议:每块数据盘对应一个OSD进程,使用NVMe SSD做WAL+DB加速时,单块NVMe可承载4-6个OSD的WAL/DB分区。网络要求双万兆起步,生产环境推荐25G或100G网络,public网络和cluster网络物理分离。
典型12节点OSD部署规格:每节点12块8TB SATA盘(OSD)+ 2块NVMe SSD(WAL/DB)+ 2张25G网卡,集群裸容量约1.1PB,可用容量约370TB(3副本)。
使用cephadm部署Ceph集群
从Ceph Pacific(16.x)开始官方推荐cephadm部署方式,基于容器管理Ceph服务。
# 在部署节点安装cephadm
curl --silent --location https://download.ceph.com/rpm-18.2/elf/noarch/cephadm -o /usr/local/sbin/cephadm
chmod +x /usr/local/sbin/cephadm
# 生成集群配置
cephadm bootstrap --mon-ip 192.168.1.10 --initial-dashboard-admin-password 'Str0ngP@ss!'
# 添加OSD节点
ssh-copy-id -f -i /etc/ceph/ceph.pub root@node02
ceph orch host add node02 192.168.1.11
ceph orch host add node03 192.168.1.12
# 自动发现并创建OSD
ceph orch daemon add osd --all-available-devices
# 检查集群状态
ceph -s
ceph osd tree
cephadm通过SSH管理所有节点,服务以容器方式运行。添加OSD前确保磁盘为空(无分区无文件系统),使用ceph orch daemon add osd --all-available-devices自动发现可用磁盘并创建OSD。
CRUSH Map结构与故障域配置
CRUSH Map定义了集群的拓扑结构,默认层级为root到datacenter到room到row到rack到host到osd。合理的CRUSH层级确保数据副本分布在不同故障域,避免单机架或单机房故障导致数据不可用。
修改CRUSH Map将OSD按机架分组:
# 创建root和rack buckets
ceph osd crush add-bucket root-default root
ceph osd crush add-bucket rack-01 rack
ceph osd crush add-bucket rack-02 rack
# 将host移入对应rack
ceph osd crush move node01 root=root-default
ceph osd crush move node02 rack=rack-01
ceph osd crush move node03 rack=rack-02
# 查看CRUSH tree
ceph osd crush tree
# 设置复制规则:副本分布在不同rack
ceph osd crush rule create-replicated rule-rack root-default host rack
上述规则使数据3副本分别落在不同rack的不同host上。当单rack掉电时,集群仍有两个副本可用,数据不丢失且服务不中断。
PG数量计算与PG均衡调整
PG(Placement Group)是Ceph数据分布的逻辑单元。每个Pool的PG数量影响数据均衡速度和OSD内存占用。PG数量过少导致数据不均匀,过多增加OSD内存和CPU开销。
PG数量计算公式:PG总数 = (OSD数量 * 100) / 副本数
以12节点、每节点12 OSD(共144 OSD)、3副本为例:
PG总数 = (144 * 100) / 3 = 4800
# 圆整到2的N次方: 4096
ceph osd pool create rbd_pool 4096 4096 replicated
ceph osd pool set rbd_pool size 3
ceph osd pool set rbd_pool min_size 2
当集群扩容增加OSD后,需要调整PG数量:
# 开启自动PG调整
ceph osd pool set rbd_pool pg_autoscale on
# 手动指定新PG数量
ceph osd pool set rbd_pool pg_num 8192
ceph osd pool set rbd_pool pgp_num 8192
生产环境推荐开启pg_autoscale,让Ceph根据Pool实际容量自动调整PG数量。手动调整时务必分批进行,大批量PG迁移会占用大量网络和磁盘IO。
RBD块存储创建与性能测试
RBD(RADOS Block Device)提供精简置备的块设备,常用于虚拟机磁盘和容器持久卷。
rbd create rbd_pool/vm-disk-01 --size 500G --image-feature layering,exclusive-lock
rbd map rbd_pool/vm-disk-01 --name client.admin
mkfs.xfs /dev/rbd0
mount /dev/rbd0 /mnt/vm-disk
echo "rbd_pool/vm-disk-01" >> /etc/ceph/rbdmap
# 性能测试
rbd bench-write rbd_pool/vm-disk-01 --io-size 4M --io-threads 16 --io-total 10G
集群监控与常见故障排查
Ceph集群健康状态检查:
ceph health detail
ceph status
# 常见异常状态:
# HEALTH_WARN: PG_DEGRADED -- 副本数不足, 等待自动恢复
# HEALTH_ERR: OSD_DOWN -- OSD进程挂了或磁盘故障
# HEALTH_WARN: SLOW_OPS -- IO延迟高, 检查网络或磁盘性能
# 查看具体PG状态
ceph pg dump_stuck | head -20
# 手动修复stuck PG
ceph pg repair <pg_id>
# 查看OSD性能
ceph osd perf
OSD Down处理流程:先检查磁盘SMART状态(smartctl -a /dev/sdX),确认磁盘健康后查看OSD日志(journalctl -u ceph-osd@id)。若磁盘损坏,执行ceph osd destroy id移除OSD,Ceph自动启动数据重均衡,完成后添加新磁盘的OSD。
PG长时间degraded或recovering状态,检查集群网络延迟和磁盘IO负载:iostat -x 2查看%util和await,网络用iperf3测试节点间带宽。正常状态%util不应持续超过80%,await不超过20ms(SATA)或5ms(NVMe)。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/ceph-fen-bu-shi-cun-chu-ji-qun-bu-shu-yu-crush-suan-fa-diao/