上一篇
分布式存储ceph部署思路
- 行业动态
- 2025-05-16
- 3
规划集群架构,安装组件并配置参数,创建存储池与CRUSH地图,测试验证,保障
Ceph分布式存储架构
Ceph作为开源分布式存储系统,采用CRUSH算法实现数据分布式存储,具备对象存储(RADOSGW)、块存储(RBD)和文件系统存储(CephFS)三种存储接口,其核心组件包括Monitor(MON)、Manager(MGR)、OSD(Object Storage Daemon)和MDS(Metadata Server),典型架构包含以下角色:
组件 | 功能描述 |
---|---|
MON | 维护集群状态,存储CRUSH Map |
MGR | 提供RESTful接口,管理集群状态 |
OSD | 存储数据对象,处理数据读写 |
MDS | 元数据服务器(仅CephFS启用时需要) |
部署前环境准备
硬件规划
建议采用三节点以上服务器集群,需满足:
- CPU:Intel E5及以上,单节点≥8核
- 内存:≥32GB(每TB存储容量配4GB内存)
- 磁盘:
- 至少3块SSD(建议RAID1配置用于OSD)
- HDD/SSD混合存储(根据业务IOPS需求)
- 网络:千兆/万兆以太网,建议双网卡冗余
操作系统要求
- 推荐CentOS 7.6+/Ubuntu 18.04+
- 关闭SELinux和防火墙(或开放必要端口)
- NTP时间同步(所有节点时间差<1s)
网络规划
网络类型 | 端口范围 | 用途说明 |
---|---|---|
前端业务 | TCP:6789/80/443 | RBD/CephFS/S3接口 |
集群心跳 | TCP:6740-6742 | MON节点通信 |
OSD通信 | UDP:6800-7300 | 数据复制与恢复 |
MDS | TCP:6801-6803 | 元数据服务(可选) |
部署实施步骤
阶段1:基础环境配置
- SSH免密配置:所有节点生成相同公钥并分发
- 主机名解析:修改
/etc/hosts
添加所有节点IP与主机名映射 - 创建专用用户:建议创建ceph用户并设置sudo权限
阶段2:安装Ceph软件包
# 添加Ceph仓库(以Octopus版本为例) cat <<EOF > /etc/yum.repos.d/ceph.repo [ceph-noarch] name=Ceph Repository baseurl=https://download.ceph.com/rpm-octopus/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md EOF # 安装基础组件 yum install -y ceph-deploy ceph-common ceph-mds ceph-mgr ceph-osd ceph-radosgw
阶段3:初始化集群
# 使用ceph-deploy工具部署初始监控节点 ceph-deploy new <mon1_host> <mon2_host> <mon3_host> # 创建初始化配置文件 ceph-deploy mon create-initial --host <mon1_host> --redhat-storage --fsid $(uuidgen)
阶段4:配置OSD节点
- 磁盘分区:为每块OSD磁盘创建XFS文件系统
ssh <osd_host> "sudo fdisk /dev/sdb && mkfs.xfs -f -n size=100G /dev/sdb"
- 部署OSD服务:通过ceph-deploy批量部署
ceph-deploy osd create {osd_host1,osd_host2,...} --zap-disks
阶段5:配置PG与Pool
# 设置副本数为3(生产环境建议至少3个副本) ceph osd pool create cephfs_data 128 128 replicated size=3 min_size=2 crush_ruleset=1 # 创建块设备池 ceph osd pool create rbd 256 256 replicated size=3
关键参数调优
CRUSH Map配置
建议采用机房级分层策略:
# 查看当前拓扑结构 ceph osd getcrushmap -o crushmap.txt # 编辑crushmap.txt添加机柜层级 device_class = hdd # 定义存储介质类型 rack = rack1 # 机架编号 chassis = chassis1 # 机箱编号
动态调整参数示例
参数 | 默认值 | 生产环境建议值 | 作用说明 |
---|---|---|---|
osd_pool_default_size | 3 | 3 | 数据副本数 |
osd_pool_default_min_size | 2 | 2 | 故障恢复最小副本数 |
osd_max_backfills | 1 | 3 | 并发数据回填数量 |
filestore_xattr_use_omap | false | true | 提升元数据查询效率 |
监控与运维体系
监控指标阈值设置
指标 | 危险阈值 | 预警阈值 | 监控方式 |
---|---|---|---|
OSD负载率 | >85% | >70% | Ceph Dashboard/Prometheus |
网络延迟 | >5ms | >2ms | Ping/时序数据库监控 |
PG不可用数量 | >0 | >0(持续15分钟) | ceph health monitor |
磁盘IO队列深度 | >32 | >16 | sar/iostat |
日志分析要点
- OSD日志:关注
FileStore
相关错误(如slow request
警告) - MON日志:检查
quorum_writes
失败记录 - PG日志:追踪
inactive
状态PG的修复进度
典型故障处理流程
场景1:OSD宕机处理
- 执行
ceph osd tree
查看树形结构 - 标记故障节点:
ceph osd out <osd.x>
- 数据迁移:
ceph osd crush reweight-by-utilization
自动平衡 - 恢复节点后执行
ceph osd in <osd.x>
重新加入集群
场景2:PG卡住处理
# 查看卡住PG列表 ceph pg ls_by_state stuck # 强制修复指定PG ceph pg repair <pgid>
FAQs
Q1:Ceph集群扩容时如何处理数据迁移?
A1:通过ceph osd crush reweight
命令调整权重,新OSD会自动接收数据,建议每次扩容不超过原集群规模的20%,并监控recovery_rate
参数(默认10MiB/s,可调整至50MiB/s提升速度)。
Q2:如何优化Ceph客户端的网络性能?
A2:建议开启TCP快速打开(tcp_fastopen
),调整rbd_cache
大小(建议设置为内存的10%),并启用bluestore
后端存储,对于长连接场景,可设置client_rd_cache_bytes
参数