Ceph分布式存储集群部署与CRUSH算法调优实战

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/

(0)
小编小编
上一篇 1小时前
下一篇 1小时前

相关推荐