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
# 1. 配置 hosts
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

# 2. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 3. 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 4. 时间同步
chronyc -a makestep
systemctl enable chronyd
systemctl start chronyd

# 5. 配置免密 SSH
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

# 格式化 OSD 磁盘(Ceph 会自动处理,无需预先格式化)
# 确保数据盘为空盘,无分区和文件系统

# 检查磁盘状态
smartctl -a /dev/sdb
smartctl -a /dev/sdc
smartctl -a /dev/sdd

五、Cephadm 部署(推荐方式)

5.1 安装 Cephadm

1
2
3
4
5
6
7
# 在 admin 节点执行
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
# 在 ceph-node1 执行
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

# 查看 OSD 状态
ceph orch ps --daemon_type osd
ceph osd tree

5.5 部署 Manager

1
2
3
4
5
6
# 指定节点部署 mgr
ceph orch apply mgr ceph-node1,ceph-node2

# 查看 mgr 状态
ceph mgr stat
ceph mgr module ls

5.6 部署 RGW(对象存储)

1
2
3
4
5
6
7
8
# 创建 RGW 服务
ceph orch apply rgw myrgw --placement="2 ceph-node4 ceph-node5" --port=8080

# 查看 RGW 状态
ceph orch ps --daemon_type rgw

# 创建 S3 用户
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

# 部署 MDS
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
# 配置 Ceph 仓库(CentOS)
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

# 修改 ceph.conf
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

# 部署 MON
ceph-deploy mon create-initial

# 部署 OSD
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
# 设置 PG 数(根据 OSD 数量计算)
# OSD < 10: PG = OSD × 100
# OSD 10-50: PG = OSD × 50
# OSD > 50: PG = OSD × 20

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/

# 映射 RBD
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

# 查看 OSD 状态
ceph osd stat
ceph osd tree
ceph osd df

# 查看 MON 状态
ceph mon stat
ceph mon dump

# 查看 PG 状态
ceph pg stat
ceph pg dump

# 数据平衡状态
ceph -w

9.2 OSD 维护

1
2
3
4
5
6
7
8
9
10
11
12
# OSD 下线(维护模式)
ceph osd out osd.0
ceph osd set noout

# OSD 上线
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

# 添加新 OSD
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

# 常见告警处理
# 1. OSD down: 检查磁盘、网络、进程
# 2. PG inconsistent: ceph pg repair <pg_id>
# 3. MON clock skew: 检查时间同步

10.2 OSD 故障处理

1
2
3
4
5
6
7
8
9
# 查看 OSD 日志
journalctl -u ceph-osd@0 -f

# 检查磁盘状态
smartctl -a /dev/sdb
hdparm -I /dev/sdb

# 重启 OSD
systemctl restart ceph-osd@0

10.3 性能问题排查

1
2
3
4
5
6
7
8
# 查看实时 IO
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
# 分离公共网络和集群网络
# ceph.conf
[global]
public_network = 192.168.1.0/24
cluster_network = 192.168.2.0/24

# 启用巨帧(MTU 9000)
ip link set dev eth0 mtu 9000

10.2 OSD 调优

1
2
3
4
# 调整 OSD 参数
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
# 使用 SSD 作为缓存层
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 镜像
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
# 1. 恢复 MON 集群
ceph-mon -i <mon_id> --mkfs --mon-data /var/lib/ceph/mon/ceph-<mon_id>

# 2. 恢复 OSD
ceph-osd -i <osd_id> --mkfs --osd-data /var/lib/ceph/osd/ceph-<osd_id>

# 3. 重新加入集群
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
# 启用 OSD 静态加密
cephadm shell -- ceph config set global osd_crypto_op_num_threads 4

十四、总结

Ceph 部署运维关键点:

  1. 规划先行: 合理设计节点角色、磁盘配置、网络拓扑
  2. 监控到位: 集群健康、OSD 状态、存储使用率、PG 状态
  3. 定期维护: 磁盘巡检、日志分析、性能调优
  4. 备份策略: 配置备份、快照管理、灾难恢复预案
  5. 安全加固: 权限控制、网络隔离、数据加密

Ceph 作为企业级分布式存储,需要持续运维优化以保障稳定运行。