上一篇
分布式存储ceph集群实践
- 行业动态
- 2025-05-15
- 6
部署Monitor节点,配置集群,添加OSD存储,调优PS/PG/CRUSH,启停MD
分布式存储Ceph集群实践指南
环境规划与硬件选型
Ceph集群的性能和稳定性高度依赖硬件选型,以下是典型生产环境的推荐配置:
组件类型 | CPU | 内存 | 磁盘 | 网络 | 用途说明 |
---|---|---|---|---|---|
Monitor节点 | 8核+ | 16GB+ | SSD(RAID1) | 千兆+ | 集群元数据管理 |
OSD节点 | 16核+ | 32GB+ | HDD/SSD混合 | 万兆+ | 数据存储与检索 |
Client节点 | 4核+ | 8GB+ | 业务访问入口 | ||
网关节点 | 8核+ | 16GB+ | SSD缓存盘 | 万兆+ | RGW/S3接口服务 |
关键设计原则:
- 三副本策略:每份数据保存3个副本,需保证ECU数量≥3
- 网络隔离:管理网段(10.0.0.0/24)、数据网段(172.16.0.0/16)分离
- 磁盘配比:HDD(容量型)与SSD(性能型)按7:3比例搭配
部署前准备
系统初始化:
# 时间同步 ntpdate ntp.aliyun.com sed -i 's/^.NTP/server ntp.aliyun.com/' /etc/ntp.conf systemctl enable ntpd # 防火墙配置 firewall-cmd --permanent --add-port={6789/tcp,6800/tcp,6801/tcp} firewall-cmd --permanent --add-service=nfs
YUM源配置:
cat <<EOF >/etc/yum.repos.d/ceph.repo [ceph-noarch] name=Ceph noarch baseurl=http://mirrors.aliyun.com/octopus/ceph/$releasever/ enabled=1 gpgcheck=1 EOF
SSH免密配置:
ssh-keygen -t rsa -P "" for node in {mon1,osd1,osd2}; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$node done
集群部署流程
Step 1:初始化Monitor节点
ceph-deploy new mon1 mon2 mon3 ceph-deploy mon create-initial-monitors mon1 mon2 mon3
Step 2:部署OSD节点
# 磁盘预处理 sed -i '/^sdb/d' /etc/fstab # 清除原有挂载配置 pvcreate /dev/sdb # 创建PV卷 vgcreate ceph_osd /dev/sdb # 创建VG卷组 lvcreate -n osd_data -L 10T ceph_osd # 创建LV逻辑卷 mkfs.xfs -f -n ftype=1 /dev/ceph_osd/osd_data # OSD部署 ceph-deploy osd create osd1 osd2 osd3 --zap-disk
Step 3:配置CRUSH地图
ceph osd crush reweight-bucket by-hostname 0.2 ceph osd crush add-bucket host1 host ceph osd crush move host1 root=default
核心组件配置
组件类型 | 配置文件路径 | 关键参数 | 推荐值 |
---|---|---|---|
Monitor | /etc/ceph/ceph.conf | mon_host | 0.0.1:6789,10.0.0.2:6789,10.0.0.3:6789 |
OSD | /etc/ceph/osd. | osd_memory_target | 5GB |
MDS | /etc/ceph/mds. | mds_cache_size | 4G |
Client | /etc/ceph/client. | client_mount_timeout | 60s |
存储池管理实践
创建ECP存储池:
ceph osd pool create ecp_pool 128 128 erasure # 纠删码模式 ceph osd pool set ecp_pool allow_ec_overwrites true
RBD块存储配置:
rbd create --size 100G --pool rbd_pool my_disk rbd feature enable my_disk layering,deep-flatten,fast-diff
性能优化策略
PG数量计算:
PG_NUM = (OSD_COUNT 100) / (CLIENT_COUNT REPLICATION_FACTOR) # 示例:10 OSD 100 / (5客户端 3副本) = 66个PG
缓存调优:
ceph config set global filestore_xfs_flags "-o rsize=4096,wsize=4096" ceph config set global osd_recovery_max_active_stuck 50
网络优化:
- 启用RDMA传输:
net_config = rdma
- TCP窗口缩放:
sysctl -w net.ipv4.tcp_rmem="41943040"
- Jumbo帧配置:
ifconfig eth0 mtu 9000
- 启用RDMA传输:
监控与运维
常用监控命令:
# 集群健康检查 ceph health detail # OSD状态查看 ceph osd tree # PG分布分析 ceph pg dump_stuck inactive # 性能统计 ceph osd perf
日志分析技巧:
- 慢请求追踪:
grep "slow request" /var/log/ceph/osd.log
- OSD负载分析:
sar -d -p
+iostat -dx
组合使用 - 网络延迟检测:
ceph osd benchmark --connect-timeout 5
故障处理案例
场景1:OSD离线恢复
# Step1:标记坏盘 ceph osd out osd.123 # Step2:替换磁盘 sed -i '/sdb/d' /etc/fstab # Step3:重新部署OSD ceph-deploy osd zap osd1 && ceph-deploy osd create osd1 --zap-disk
场景2:PG卡住处理:
# Step1:强制修复 ceph pg repair_all <pg_id> # Step2:调整CRUSH权重 ceph osd crush reweight-bucket by-hostname 0.15 # Step3:重建PG队列 ceph osd pool set <pool> pg_autoscale_mode off
扩展与升级方案
扩容OSD节点:
# Step1:添加新节点 ceph-deploy osd create new_osd --zap-disk --redhat-storage=true # Step2:重平衡数据 ceph osd pool set <pool> size <new_size> # Step3:验证分布 ceph osd tree -s
版本升级流程:
# Step1:停止服务 systemctl stop ceph-osd@.service ceph-mon@.service # Step2:升级软件包 yum clean all && yum update ceph-common ceph-osd ceph-mon -y # Step3:重启集群 systemctl daemon-reload && systemctl start ceph-mon@.service ceph-osd@.service
FAQs常见问题解答
Q1:如何根据业务需求规划Ceph集群规模?
A1:需考虑三个维度:①数据总量(当前量+3年增长量)②并发访问量(IOPS需求)③容灾等级(副本数),计算公式:所需OSD数 = (总容量 × 副本数) / (单盘容量 × 0.9)
,建议预留20%冗余资源,例如100TB数据+3副本,使用4TB硬盘时至少需要7个OSD节点。
Q2:遇到”OSD stuck inactive”告警如何处理?
A2:分三步排查:①检查磁盘SMART状态(smartctl -a /dev/sdb
)②确认网络连通性(ping -c 5 <monitor_ip>
)③重置OSD状态(ceph osd out <osd_id>
→ ceph osd in <osd_id>
),若持续异常,需查看/var/log/ceph/osd.<id>.log
中的