1. 为什么选择cephadm部署Ceph集群
第一次接触cephadm是在2020年Ceph Octopus版本发布后,当时我正在为一个金融客户规划存储架构。传统的手工部署方式需要逐个节点安装依赖、配置monitor和OSD,整个过程至少需要2-3天。而使用cephadm后,我们仅用4小时就完成了8个节点的集群部署和基础测试。
cephadm的核心价值在于它将整个Ceph集群抽象为一个"应用"来管理。通过容器化封装所有组件(MON、MGR、OSD等),配合内置的编排引擎,实现了:
- 标准化部署:所有服务以容器方式运行,消除环境差异
- 声明式管理:通过YAML文件定义集群状态,而非手动操作
- 自愈能力:自动监控服务健康状态并执行恢复
重要提示:cephadm要求所有节点必须预先安装Docker或Podman。对于生产环境,建议统一使用Podman以避免Docker的日志驱动可能导致的性能问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境准备
2.1 硬件规划建议
根据实际项目经验,给出不同规模集群的硬件配置参考:
| 节点规模 | CPU核心 | 内存 | 磁盘类型 | 网络带宽 |
|---|---|---|---|---|
| <10节点 | 8核 | 32GB | HDD + NVMe日志盘 | 10Gbps |
| 10-30节点 | 16核 | 64GB | SSD + Optane日志盘 | 25Gbps |
| >30节点 | 32核 | 128GB | NVMe全闪存 | 40Gbps |
2.2 系统配置要点
在所有节点上执行以下基础配置:
bash复制# 禁用SELinux(容器环境下容易产生权限问题)
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 配置NTP时间同步
yum install -y chrony
systemctl enable --now chronyd
# 优化内核参数
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "net.ipv4.tcp_retries2 = 5" >> /etc/sysctl.conf
sysctl -p
2.3 容器运行时选择
虽然官方文档同时支持Docker和Podman,但在CentOS 8/RHEL 8及以上系统中,更推荐使用Podman:
bash复制yum install -y podman
mkdir -p /etc/containers
echo -e '[registries.search]\nregistries = ["docker.io", "quay.io"]' > /etc/containers/registries.conf
3. cephadm安装与引导
3.1 安装cephadm工具
在第一个管理节点执行:
bash复制curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
chmod +x cephadm
./cephadm add-repo --release octopus
./cephadm install
常见问题处理:
- 若遇到SSL证书错误,可添加
--insecure参数 - 国内环境建议先下载离线包,通过
./cephadm --skip-pull安装
3.2 引导新集群
创建初始集群配置文件cluster.yaml:
yaml复制service_type: host
addr: 10.0.0.1
hostname: node1
labels:
- admin
- mon
- mgr
执行引导命令:
bash复制cephadm bootstrap --mon-ip 10.0.0.1 --config cluster.yaml
成功后会输出admin密钥和Dashboard访问信息。务必保存这些信息到安全位置。
4. 集群节点扩展
4.1 添加新节点
首先在新节点上安装SSH免密登录:
bash复制ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2
然后通过cephadm添加节点:
bash复制ceph orch host add node2 10.0.0.2
ceph orch host label add node2 osd
4.2 部署OSD服务
自动发现并部署OSD(最简方式):
bash复制ceph orch apply osd --all-available-devices
高级部署模式(指定具体设备):
bash复制ceph orch daemon add osd node1:/dev/sdb
ceph orch daemon add osd node1:/dev/nvme0n1
5. 服务管理与监控
5.1 常用管理命令
查看集群状态:
bash复制ceph -s
ceph osd tree
服务操作:
bash复制ceph orch ls # 列出所有服务
ceph orch ps # 显示服务进程
ceph orch restart mgr # 重启MGR服务
5.2 Dashboard配置
启用Dashboard模块:
bash复制ceph mgr module enable dashboard
ceph dashboard create-self-signed-cert
ceph dashboard set-login-credentials admin securepassword123
访问地址为https://<monitor-ip>:8443,建议配置负载均衡器实现高可用。
6. 生产环境优化建议
6.1 网络分离配置
对于高性能集群,建议分离公共网络和集群网络:
bash复制ceph config set global public_network 10.0.0.0/24
ceph config set global cluster_network 192.168.100.0/24
6.2 OSD调优参数
针对NVMe设备优化:
bash复制ceph config set osd bluestore_rocksdb_options "compression=kNoCompression"
ceph config set osd osd_op_num_threads_per_shard 4
6.3 日志管理策略
配置日志轮转和限制:
bash复制ceph config set global log_to_file true
ceph config set global log_to_stderr false
ceph config set global max_log_file 10
ceph config set global max_log_file_size 100000000
7. 故障排查实录
7.1 容器启动失败
典型错误:Error: OCI runtime error
解决方法:
- 检查容器运行时状态:
podman ps -a - 查看容器日志:
journalctl -u ceph-<service-id> - 常见原因是SElinux或磁盘空间不足
7.2 OSD无法加入集群
检查步骤:
bash复制ceph osd require-osd-release octopus # 确保版本一致
ceph-volume lvm list # 检查物理设备
ceph orch device ls # 验证设备识别
7.3 网络分区处理
当出现health: HEALTH_WARN clock skew detected警告时:
bash复制ceph health detail
ceph time-sync-status
ntpdate -u pool.ntp.org # 在所有节点执行时间同步
8. 升级与维护策略
8.1 小版本升级
检查可用升级:
bash复制ceph versions
ceph orch upgrade check
执行升级:
bash复制ceph orch upgrade start --ceph-version 16.2.7
8.2 大版本迁移
从Octopus升级到Pacific的步骤:
- 先升级所有cephadm工具
- 逐个节点排空服务
- 更新容器镜像仓库
- 分阶段滚动升级
8.3 备份与恢复
关键配置备份:
bash复制ceph config dump > ceph_config_backup.txt
ceph orch ls --export > services_backup.yaml
在部署大型集群时,我习惯在每个关键步骤完成后立即执行一次配置备份。曾经因为电源故障导致整个集群配置丢失,这些备份文件节省了至少8小时的恢复时间。
