Ceph高可用集群部署完整指南:从零到生产环境
Ceph高可用集群部署完整指南:从零到生产环境
前言
构建一个生产级别的Ceph分布式存储集群是一项系统性工程,需要从硬件选型、网络规划、操作系统配置、软件部署直至性能调优的完整流程。本教程将提供一份详尽的Ceph Reef v18.x 容器化部署指南,涵盖从最小化实验环境到生产级高可用集群的完整部署流程。
本教程采用Ceph官方推荐的容器化部署方式,使用Cephadm工具通过容器(Podman/Docker)部署和管理Ceph集群。相比传统部署方式,容器化部署具有以下优势:
- 无需手动安装ceph包:所有组件通过容器镜像自动部署
- 版本管理简单:通过容器镜像 tag 精确控制版本
- 部署速度快:自动拉取镜像,自动配置
- 统一管理:所有组件统一使用cephadm管理
- 隔离性好:组件间相互隔离,减少依赖冲突
无论你是首次接触Ceph的新手,还是需要规范化部署流程的运维工程师,本教程都将提供清晰、可操作的步骤指导,帮助你快速搭建稳定、高效的Ceph存储集群。
1. 前期规划与准备
1.1 硬件需求分析
最小化生产集群配置(3节点):
每个节点应具备以下基本配置:
- CPU:8核及以上,支持硬件虚拟化
- 内存:32GB DDR4,推荐64GB
- 系统盘:240GB SSD(安装操作系统)
- 数据盘:4×4TB HDD(用于OSD)
- 日志盘:2×480GB NVMe SSD(用于BlueStore WAL/DB)
- 网络:双网卡绑定,10Gbps
推荐生产配置(5节点及以上):
| 组件 | 最低配置 | 推荐配置 | |------|---------|---------| | MON/MGR | 4核/16GB | 8核/32GB | | OSD节点 | 8核/32GB | 16核/64GB | | 网络 | 1Gbps | 10Gbps | | 存储 | 4×4TB HDD | 8×8TB HDD |
1.2 网络架构设计
# 网络规划示例
public_network: 10.0.10.0/24 # 客户端通信网络
cluster_network: 10.0.20.0/24 # 集群内部复制网络
# 网卡绑定配置(Linux Bond)
# /etc/network/interfaces
auto bond0
iface bond0 inet static
address 10.0.10.10
netmask 255.255.255.0
gateway 10.0.10.1
slaves enp1s0f0 enp1s0f1
bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate 1
网络设计原则:
- 分离Public Network和Cluster Network,隔离客户端流量和复制流量
- 使用万兆网络减少复制延迟
- 配置网络冗余(Bonding/LACP)
- 确保低延迟网络通信
1.3 操作系统准备
支持的操作系统(以Ubuntu 22.04 LTS为例):
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装基础依赖
sudo apt install -y curl gnupg2 lsb-release ca-certificates \
bridge-utils net-tools ethtool pciutils
# 配置主机名解析
cat >> /etc/hosts << EOF
10.0.10.11 ceph-node01
10.0.10.12 ceph-node02
10.0.10.13 ceph-node03
EOF
# 禁用NetworkManager(推荐使用systemd-networkd)
sudo systemctl disable NetworkManager
sudo systemctl enable systemd-networkd
# 配置NTP时间同步
sudo timedatectl set-timezone Asia/Shanghai
sudo apt install -y chrony
cat > /etc/chrony/chrony.conf << EOF
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
EOF
sudo systemctl restart chrony
2. Cephadm安装与配置
2.1 获取Cephadm
# 下载Cephadm脚本(推荐从官方源获取)
curl --silent --remote-name \
https://github.com/ceph/ceph/raw/main/src/cephadm/cephadm
# 添加执行权限
chmod +x cephadm
# 验证脚本
./cephadm --version
# 安装Cephadm到系统
sudo ./cephadm install
# 确认安装
which cephadm
cephadm version
2.2 配置SSH免密登录
# 在管理节点(node01)生成SSH密钥
ssh-keygen -t ed25519 -C "ceph-admin@ceph-cluster"
# 分发公钥到所有节点
ssh-copy-id ceph@ceph-node01
ssh-copy-id ceph@ceph-node02
ssh-copy-id ceph@ceph-node03
# 配置SSH Config
cat > ~/.ssh/config << EOF
Host ceph-node01
HostName 10.0.10.11
User ceph
Host ceph-node02
HostName 10.0.10.12
User ceph
Host ceph-node03
HostName 10.0.10.13
User ceph
EOF
chmod 600 ~/.ssh/config
2.3 创建引导脚本
# 创建集群引导脚本
cat > bootstrap.sh << 'EOF'
#!/bin/bash
set -e
# 集群配置
CLUSTER_NAME="ceph-cluster"
MON_IP="10.0.10.11"
PUBLIC_NETWORK="10.0.10.0/24"
CLUSTER_NETWORK="10.0.20.0/24"
# 引导Ceph集群
cephadm bootstrap \
--mon-ip ${MON_IP} \
--public-network ${PUBLIC_NETWORK} \
--cluster-network ${CLUSTER_NETWORK} \
--ssh-user ceph \
--allow-fqdn-hostname \
--registry-url quay.io \
--registry-password ${REGISTRY_PASSWORD}
# 启用管理模块
ceph mgr module enable dashboard
ceph dashboard ac-user-create admin password administrator
# 推送SSH密钥
ceph cephadm generate-ssh-key --username ceph
ceph cephadm shell -- ceph cephadm get-pub-key
echo "Ceph集群引导完成!"
echo "访问Dashboard: https://${MON_IP}:8443"
EOF
chmod +x bootstrap.sh
3. 集群节点添加与管理
3.1 添加OSD节点
# 方法1:使用cephadm添加节点
ceph orch host add ceph-node02
ceph orch host add ceph-node03
# 配置主机标签
ceph orch host label add ceph-node02 _osd
ceph orch host label add ceph-node03 _osd
# 查看主机列表
ceph orch host ls
3.2 自动部署OSD
# 查看可用磁盘
ceph orch device ls
# 自动发现并部署OSD
ceph orch apply osd --all-available-devices
# 手动指定磁盘部署OSD
ceph orch daemon add osd ceph-node02:/dev/sdb
ceph orch daemon add osd ceph-node02:/dev/sdc
ceph orch daemon add osd ceph-node03:/dev/sdb
ceph orch daemon add osd ceph-node03:/dev/sdc
# 使用LVM方式部署(推荐用于生产环境)
ceph orch daemon add osd ceph-node02:data_devices=/dev/sdb,db_devices=/dev/nvme0n1
3.3 OSD部署配置文件
# OSD规格配置示例
# /etc/ceph/osd_spec.yaml
service_type: osd
service_id: osd_spec
placement:
hosts:
- ceph-node02
- ceph-node03
spec:
data_devices:
all: true
db_devices:
model: "Samsung SM963"
encrypted: true
osds_per_device: 1
# 应用OSD配置
ceph orch apply -i /etc/ceph/osd_spec.yaml
4. 服务配置与调优
4.1 MON高可用配置
# 查看MON状态
ceph mon stat
ceph mon dump
# 添加额外的MON节点
ceph orch host add ceph-mon01 10.0.10.20
# 查看MON仲裁状态
ceph quorum_status --format json-pretty
4.2 MGR高可用配置
# 查看MGR状态
ceph mgr stat
# 部署备用MGR
ceph orch apply mgr --placement="ceph-node01,ceph-node02"
4.3 存储池配置
# 创建块存储池
ceph osd pool create rbd 64 64
# 初始化RBD
rbd pool init rbd
# 创建副本池(3副本)
ceph osd pool set rbd size 3
ceph osd pool set rbd min_size 2
# 启用压缩
ceph osd pool set rbd compression_mode force
ceph osd pool set rbd compression_algorithm zstd
# 创建EC纠删码池
ceph osd pool create ecpool 64 64 erasure
ceph osd pool set ecpool crush_rule ec_rule
4.4 全局配置调优
# 调整OSD内存目标
ceph config set osd osd_memory_target 4294967296
# 调整恢复并行度
ceph config set osd osd_recovery_max_active 3
ceph config set osd osd_recovery_max_single_start 1
# 调整客户端队列深度
ceph config set client osd_client_message_size_cap 524288000
# 应用配置变更
ceph config assimilate-conf -i /etc/ceph/ceph.conf
5. Dashboard配置与监控
5.1 启用Dashboard
# 启用Dashboard模块
ceph mgr module enable dashboard
# 创建管理员用户
ceph dashboard ac-user-create admin password administrator
# 配置SSL证书(生产环境推荐)
ceph dashboard set-ssl-certificate -i /etc/ceph/ssl/server.crt
ceph dashboard set-ssl-certificate-key -i /etc/ceph/ssl/server.key
# 配置外部访问地址
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
ceph config set mgr mgr/dashboard/server_port 8443
5.2 监控配置
# 查看集群状态
ceph -s
# 查看详细状态
ceph status detail
# 查看健康状态
ceph health detail
# 导出状态报告
ceph report
5.3 告警配置
# 配置SMTP告警
ceph config set mgr mgr/prometheus/alerts \
smtp_host: smtp.example.com \
smtp_port: 587 \
smtp_sender: ceph@example.com \
smtp_password: your_password \
alert_addr: alerts@example.com
# 启用Prometheus告警
ceph mgr module enable prometheus
6. 故障排查与维护
6.1 常见问题排查
# 检查OSD状态
ceph osd status
ceph osd tree
ceph osd perf
# 检查PG状态
ceph pg stat
ceph pg dump
# 检查MON状态
ceph quorum_status
# 查看详细日志
ceph -w
# 实时性能监控
ceph daemon osd.0 perf
6.2 日志查看
# cephadm日志
journalctl -u cephadm
# MON日志
journalctl -u ceph-mon@ceph-node01
# OSD日志
journalctl -u ceph-osd@0
# MGR日志
journalctl -u ceph-mgr@ceph-node01
6.3 维护操作
# 标记OSD为out(维护前)
ceph osd out osd.0
systemctl stop ceph-osd@0
# 重新添加OSD
systemctl start ceph-osd@0
ceph osd in osd.0
# 替换OSD磁盘
ceph osd out osd.1
# 物理更换磁盘
ceph orch daemon add osd ceph-node01:/dev/sdX
# 滚动重启OSD
ceph orch restart osd
7. 备份与恢复策略
7.1 配置备份
# 备份Ceph配置
ceph config get mon mon_config > /backup/ceph-mon-config.json
ceph config get osd osd_config > /backup/ceph-osd-config.json
# 备份密钥环
ceph auth get-or-create mon. > /backup/ceph-mon.keyring
ceph auth get-or-create osd.0 > /backup/ceph-osd-0.keyring
# 备份CRUSH Map
ceph osd getcrushmap -o /backup/crushmap.bin
crushtool -d /backup/crushmap.txt -i /backup/crushmap.bin
7.2 恢复步骤
# 恢复配置
ceph config set mon mon_config -i /backup/ceph-mon-config.json
# 恢复密钥
ceph auth import -i /backup/ceph-mon.keyring
# 恢复CRUSH Map
crushtool -c /backup/crushmap.txt -o /backup/crushmap.bin
ceph osd setcrushmap -i /backup/crushmap.bin
8. 安全性强化
8.1 防火墙配置
# Ubuntu UFW配置
sudo ufw allow 22/tcp
sudo ufw allow 3300/tcp # RADOS gateway
sudo ufw allow 6789/tcp # MON
sudo ufw allow 6800:7300/tcp # OSD
sudo ufw enable
8.2 SELinux配置(RHEL/CentOS)
# 设置SELinux为 enforcing 模式
sudo setenforce 1
# 配置Ceph相关策略
sudo semodule -i ceph.pp
8.3 认证配置
# 查看认证状态
ceph auth ls
# 创建受限客户端
ceph auth get-or-create client.backup \
mon 'allow r' \
osd 'allow *'
# 导出客户端密钥
ceph auth get client.backup -o /etc/ceph/ceph.client.backup.keyring
9. 性能测试验证
9.1 基准测试
# 安装测试工具
sudo apt install -y fio
# RBD性能测试
fio --name=rbd-test --ioengine=rbd --rbdname=test --clientname=admin \
--size=1G --bs=4k --iodepth=32 --rw=randwrite \
--runtime=60 --output=/tmp/rbd-fio-results.txt
# 集群整体性能
ceph osd bench --pool rbd --bs=4k --iodepth=32 --time=60
9.2 健康检查脚本
#!/bin/bash
# health_check.sh
echo "=== Ceph Cluster Health Check ==="
# 检查集群状态
STATUS=$(ceph -s | grep "health:" | awk '{print $2}')
if [ "$STATUS" != "HEALTH_OK" ]; then
echo "WARNING: Cluster health is $STATUS"
ceph health detail
else
echo "OK: Cluster health is HEALTH_OK"
fi
# 检查OSD状态
OSD_DOWN=$(ceph osd stat | grep -o "[0-9]* down" | awk '{print $1}')
if [ "$OSD_DOWN" -gt 0 ]; then
echo "WARNING: $OSD_DOWN OSD(s) are down"
fi
# 检查PG状态
PG_UNHEALTHY=$(ceph pg stat | grep -oE "[0-9]+ pgs? (inactive|undersized|remapped)" | wc -l)
if [ "$PG_UNHEALTHY" -gt 0 ]; then
echo "WARNING: There are unhealthy PGs"
fi
# 检查容量使用
CAPACITY=$(ceph df | grep "TOTAL" | awk '{print $3}')
USED=$(ceph df | grep "TOTAL" | awk '{print $2}')
USAGE=$(echo "scale=2; $USED / $CAPACITY * 100" | bc)
if [ $(echo "$USAGE > 80" | bc) -eq 1 ]; then
echo "WARNING: Cluster capacity usage is ${USAGE}%"
fi
echo "=== Health Check Complete ==="
10. 总结与最佳实践
10.1 部署检查清单
- [ ] 硬件配置满足最低要求
- [ ] 网络架构设计完成,包括公网和集群网络分离
- [ ] 操作系统更新并配置完成
- [ ] SSH免密登录配置完成
- [ ] NTP时间同步配置完成
- [ ] 防火墙规则已配置
- [ ] SSL证书已准备(生产环境)
- [ ] 监控告警机制已配置
10.2 生产环境建议
1. 硬件冗余:使用RAID保护系统盘,避免单点故障 2. 网络冗余:配置网卡绑定,支持故障切换 3. 容量规划:保持30%以上空闲空间 4. 定期维护:制定维护窗口,定期检查和更新 5. 监控告警:建立完善的监控体系,配置自动告警 6. 文档记录:记录集群配置和变更历史 7. 备份策略:定期备份配置和密钥,准备恢复方案
10.3 资源链接
- 官方文档:https://docs.ceph.com/
- GitHub仓库:https://github.com/ceph/ceph
- 社区论坛:https://ceph.io/community/
- Issue跟踪:https://tracker.ceph.com/
下一步: 部署完成后,建议进行完整的性能测试和故障演练,确保集群能够在各种情况下正常运行。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







