Ceph 分布式存储系统部署指南
一、概述
Ceph 是一个统一的分布式存储系统,提供对象存储 (RGW)、块存储 (RBD) 和文件系统 (CephFS) 三种接口,具有高可靠、高性能、易扩展的特点。
二、核心组件
| 组件 |
说明 |
端口 |
| MON (Monitor) |
集群状态监控,维护集群映射 |
6789 |
| OSD (Object Storage Daemon) |
数据存储与复制,管理磁盘 |
6800-7300 |
| MDS (Metadata Server) |
CephFS 元数据服务 |
6800 |
| RGW (RADOS Gateway) |
S3/Swift 对象存储接口 |
80/443 |
| Manager |
集群管理与监控指标 |
8443 |
三、环境规划
3.1 节点规划(5 节点示例)
| 主机名 |
IP |
角色 |
磁盘配置 |
| ceph-node1 |
192.168.1.101 |
mon, mgr, osd |
1×SSD+3×HDD |
| ceph-node2 |
192.168.1.102 |
mon, mgr, osd |
1×SSD+3×HDD |
| ceph-node3 |
192.168.1.103 |
mon, osd |
1×SSD+3×HDD |
| ceph-node4 |
192.168.1.104 |
osd, rgw |
6×HDD |
| ceph-node5 |
192.168.1.105 |
osd, rgw, mds |
6×HDD |
3.2 系统要求
- CentOS 7.9+ / Ubuntu 20.04+
- 内存 ≥ 8GB(OSD 节点建议 16GB+)
- 万兆网络(推荐)
- 时间同步(Chrony/NTP)
四、部署前准备
4.1 基础配置(所有节点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| cat >> /etc/hosts << EOF 192.168.1.101 ceph-node1 192.168.1.102 ceph-node2 192.168.1.103 ceph-node3 192.168.1.104 ceph-node4 192.168.1.105 ceph-node5 EOF
systemctl stop firewalld systemctl disable firewalld
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
chronyc -a makestep systemctl enable chronyd systemctl start chronyd
ssh-keygen -t rsa -N "" ssh-copy-id ceph-node1 ssh-copy-id ceph-node2 ssh-copy-id ceph-node3 ssh-copy-id ceph-node4 ssh-copy-id ceph-node5
|
4.2 磁盘准备
1 2 3 4 5 6 7 8 9 10
| lsblk
smartctl -a /dev/sdb smartctl -a /dev/sdc smartctl -a /dev/sdd
|
五、Cephadm 部署(推荐方式)
5.1 安装 Cephadm
1 2 3 4 5 6 7
| curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm chmod +x cephadm mv cephadm /usr/local/bin/
cephadm --version
|
5.2 引导集群
1 2 3 4 5 6
| cephadm bootstrap --mon-ip 192.168.1.101
cephadm shell -- ceph -s cephadm shell -- ceph orch host ls
|
5.3 添加主机到集群
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cat /etc/ceph/ceph.pub
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node2 ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node3 ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node4 ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node5
ceph orch host add ceph-node2 192.168.1.102 ceph orch host add ceph-node3 192.168.1.103 ceph orch host add ceph-node4 192.168.1.104 ceph orch host add ceph-node5 192.168.1.105
|
5.4 部署 OSD
1 2 3 4 5 6 7 8 9 10 11
| ceph orch apply osd --all-available-devices
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
ceph orch ps --daemon_type osd ceph osd tree
|
5.5 部署 Manager
1 2 3 4 5 6
| ceph orch apply mgr ceph-node1,ceph-node2
ceph mgr stat ceph mgr module ls
|
5.6 部署 RGW(对象存储)
1 2 3 4 5 6 7 8
| ceph orch apply rgw myrgw --placement="2 ceph-node4 ceph-node5" --port=8080
ceph orch ps --daemon_type rgw
cephadm shell -- radosgw-admin user create --uid="admin" --display-name="Admin User" --access-key=AKIAIOSFODNN7EXAMPLE --secret-key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
|
5.7 部署 CephFS
1 2 3 4 5 6 7 8 9 10 11 12
| cephadm shell -- ceph osd pool create cephfs_metadata 32 cephadm shell -- ceph osd pool create cephfs_data 64
cephadm shell -- ceph fs new myfs cephfs_metadata cephfs_data
ceph orch apply mds myfs --placement="2 ceph-node5"
ceph fs status
|
六、传统部署方式(ceph-deploy)
6.1 安装 Ceph
1 2 3 4 5 6 7 8 9 10 11 12
| cat > /etc/yum.repos.d/ceph.repo << EOF [Ceph] name=Ceph packages for \$basearch baseurl=https://download.ceph.com/rpm-quincy/el7/\$basearch enabled=1 gpgcheck=1 gpgkey=https://download.ceph.com/keys/release.asc EOF
yum install -y ceph ceph-mds ceph-radosgw ceph-deploy
|
6.2 初始化集群
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| mkdir ~/my-cluster && cd ~/my-cluster
ceph-deploy new ceph-node1 ceph-node2 ceph-node3
cat >> ceph.conf << EOF [global] fsid = $(uuidgen) mon_initial_members = ceph-node1, ceph-node2, ceph-node3 mon_host = 192.168.1.101,192.168.1.102,192.168.1.103 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx public_network = 192.168.1.0/24 osd_pool_default_size = 3 osd_pool_default_min_size = 2 EOF
ceph-deploy mon create-initial
ceph-deploy osd create --data /dev/sdb ceph-node1 ceph-deploy osd create --data /dev/sdc ceph-node1 ceph-deploy osd create --data /dev/sdd ceph-node1
|
七、存储池管理
7.1 创建存储池
1 2 3 4 5 6 7 8 9 10
| cephadm shell -- ceph osd pool create rbd_pool 64 64 replicated cephadm shell -- ceph osd pool set rbd_pool size 3
cephadm shell -- ceph osd erasure-code-profile set ec_profile k=2 m=1 cephadm shell -- ceph osd pool create ec_pool 64 64 erasure ec_profile
cephadm shell -- ceph osd pool ls detail
|
7.2 存储池参数调优
1 2 3 4 5 6 7 8 9 10
|
cephadm shell -- ceph osd pool set rbd_pool pg_num 128 cephadm shell -- ceph osd pool set rbd_pool pgp_num 128
cephadm shell -- ceph osd pool set rbd_pool compression_algorithm lz4
|
八、RBD 块存储使用
8.1 创建 RBD 镜像
1 2 3 4 5 6 7 8 9 10 11 12
| cephadm shell -- rbd create --size 100G rbd_pool/volume1
cephadm shell -- rbd ls rbd_pool cephadm shell -- rbd info rbd_pool/volume1
cephadm shell -- rbd snap create rbd_pool/volume1@snap1
cephadm shell -- rbd clone rbd_pool/volume1@snap1 rbd_pool/volume1_clone
|
8.2 映射到客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| yum install -y ceph-common
scp ceph-node1:/etc/ceph/ceph.conf /etc/ceph/ scp ceph-node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
modprobe rbd rbd map rbd_pool/volume1
rbd showmapped
mkfs.xfs /dev/rbd0 mkdir /mnt/volume1 mount /dev/rbd0 /mnt/volume1
|
九、运维管理
9.1 常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ceph -s ceph health detail
ceph osd stat ceph osd tree ceph osd df
ceph mon stat ceph mon dump
ceph pg stat ceph pg dump
ceph -w
|
9.2 OSD 维护
1 2 3 4 5 6 7 8 9 10 11 12
| ceph osd out osd.0 ceph osd set noout
ceph osd in osd.0 ceph osd unset noout
ceph osd out osd.5
ceph orch daemon add osd ceph-node1:/dev/sde
|
9.3 扩容操作
1 2 3 4 5 6 7 8 9 10
| ceph orch host add ceph-node6 192.168.1.106
ceph orch daemon add osd ceph-node6:/dev/sdb ceph orch daemon add osd ceph-node6:/dev/sdc
ceph osd tree ceph -s
|
9.4 监控指标
| 指标 |
说明 |
告警阈值 |
| 集群健康状态 |
HEALTH_OK/WARN/ERR |
!= HEALTH_OK |
| OSD 存活率 |
在线 OSD 比例 |
< 90% |
| 存储使用率 |
已用容量比例 |
> 85% |
| PG 状态 |
Placement Group 状态 |
active+clean < 95% |
| 恢复速度 |
数据恢复速率 |
< 10MB/s 持续 |
| 延迟 |
读写延迟 |
> 100ms |
十、故障排查
10.1 集群健康告警
1 2 3 4 5 6 7
| ceph health detail
|
10.2 OSD 故障处理
1 2 3 4 5 6 7 8 9
| journalctl -u ceph-osd@0 -f
smartctl -a /dev/sdb hdparm -I /dev/sdb
systemctl restart ceph-osd@0
|
10.3 性能问题排查
1 2 3 4 5 6 7 8
| ceph -w
ceph health detail | grep slow
ceph config set global osd_slow_op_warn_threshold 30
|
十一、性能优化
10.1 网络优化
1 2 3 4 5 6 7 8
|
[global] public_network = 192.168.1.0/24 cluster_network = 192.168.2.0/24
ip link set dev eth0 mtu 9000
|
10.2 OSD 调优
1 2 3 4
| ceph config set osd osd_op_threads 8 ceph config set osd osd_disk_threads 4 ceph config set osd osd_max_write_size 512
|
10.3 缓存加速
1 2 3 4
| ceph osd tier add rbd_pool ssd_pool ceph osd tier cache-mode ssd_pool writeback ceph osd tier set-overlay rbd_pool ssd_pool
|
十二、备份与恢复
12.1 配置备份
1 2 3 4 5 6
| cp -r /etc/ceph /backup/ceph_$(date +%Y%m%d)
cephadm shell -- ceph mon dump > /backup/mon_dump_$(date +%Y%m%d).txt cephadm shell -- ceph osd tree > /backup/osd_tree_$(date +%Y%m%d).txt
|
12.2 数据备份
1 2 3 4 5
| rbd export rbd_pool/volume1 /backup/volume1.img
rbd snap create rbd_pool/volume1@backup_$(date +%Y%m%d)
|
12.3 灾难恢复
1 2 3 4 5 6 7 8 9
| ceph-mon -i <mon_id> --mkfs --mon-data /var/lib/ceph/mon/ceph-<mon_id>
ceph-osd -i <osd_id> --mkfs --osd-data /var/lib/ceph/osd/ceph-<osd_id>
systemctl start ceph-mon@<mon_id> systemctl start ceph-osd@<osd_id>
|
十三、安全加固
13.1 认证配置
1 2 3 4 5
| cephadm shell -- ceph auth get-or-create client.app mon 'allow r' osd 'allow rwx pool=rbd_pool'
cephadm shell -- ceph auth list
|
13.2 网络隔离
- 使用独立网络用于集群通信
- 配置防火墙限制访问端口
- RGW 使用 HTTPS
13.3 数据加密
1 2
| cephadm shell -- ceph config set global osd_crypto_op_num_threads 4
|
十四、总结
Ceph 部署运维关键点:
- 规划先行: 合理设计节点角色、磁盘配置、网络拓扑
- 监控到位: 集群健康、OSD 状态、存储使用率、PG 状态
- 定期维护: 磁盘巡检、日志分析、性能调优
- 备份策略: 配置备份、快照管理、灾难恢复预案
- 安全加固: 权限控制、网络隔离、数据加密
Ceph 作为企业级分布式存储,需要持续运维优化以保障稳定运行。