概述
本文记录了在一个三节点Ceph集群中,其中一个节点(ceph02)意外完全丢失(包括磁盘数据)后的完整恢复过程。集群使用Cephadm管理工具,运行Ceph Octopus (v15.2.17)版本。本文将作为技术文档和实战指南,供后续参考和使用。
环境信息
集群状态: 3节点Ceph集群 (ceph01, ceph02, ceph03)
Ceph版本: 15.2.17 (Octopus)
管理工具: Cephadm
网络配置: 192.168.66.0/24网段
存储服务: OSD, Monitor, Manager, MDS, RGW
故障现象
ceph02节点完全不可用,包括:
节点物理故障或操作系统崩溃
所有磁盘数据丢失
节点无法通过网络访问
第一阶段:故障评估与集群保护
1.1 检查集群状态
首先确认集群当前状态和健康度:
ceph -s
ceph osd tree
ceph orch ps --hostname ceph02发现的问题:
ceph02节点上所有守护进程状态为"host is offline"
集群健康状态为HEALTH_WARN
数据冗余度降低,部分对象降级
1.2 设置保护性标记
防止集群在恢复期间进行不必要的数据迁移:
ceph osd set noout
ceph osd set norebalance
ceph osd set norecover第二阶段:清理故障节点
2.1 从编排器中移除节点
ceph orch host rm ceph022.2 清理残留的Monitor服务
ceph mon dump
ceph mon rm ceph022.3 清理CRUSH Map中的残留条目
ceph osd crush tree
ceph osd crush rm ceph022.4 验证清理结果
ceph -s
ceph osd tree
ceph orch ps --hostname ceph02第三阶段:新节点准备
3.1 系统基础配置
在新节点ceph02上执行:
# 设置主机名
hostnamectl set-hostname ceph02
# 配置网络
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth1
systemctl restart network
# 配置主机解析
vim /etc/hosts
# 关闭防火墙和SELinux
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vim /etc/selinux/config3.2 安装必要软件
# 配置Yum源
cd /etc/yum.repos.d/
mv C7.repo back/
yum clean all
# 安装基础工具
yum update -y
yum install -y wget psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git tar curl
# 安装Docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl enable --now docker
# 配置Docker镜像加速
vim /etc/docker/daemon.json
systemctl restart docker3.3 时间同步配置
yum install -y chrony
vim /etc/chrony.conf
systemctl enable --now chronyd
chronyc sources -v3.4 内核升级(可选但推荐)
# 安装新内核
yum install -y kernel-ml
grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo)
reboot第四阶段:重新加入集群
4.1 配置SSH互信
在ceph01节点上执行:
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph024.2 添加节点到编排器
ceph orch host add ceph02 192.168.66.102
ceph orch host ls4.3 部署核心服务
# 部署Monitor
ceph orch apply mon ceph01,ceph02,ceph03
# 部署Manager
ceph orch apply mgr ceph01,ceph02,ceph03
# 部署OSD(自动检测可用设备)
ceph orch apply osd --all-available-devices
# 部署MDS服务
ceph orch apply mds myfs --placement="3 ceph01 ceph02 ceph03"
# 部署RGW服务
ceph orch apply rgw myorg us-east-1 --placement="3 ceph01 ceph02 ceph03"4.4 容器镜像准备
如果新节点无法访问外部镜像仓库,需要手动导入镜像:
# 在已有节点上导出镜像
docker save -o ceph-images.tar quay.io/ceph/ceph:v15 quay.io/ceph/ceph-grafana:6.7.4 quay.io/prometheus/prometheus:v2.18.1 quay.io/prometheus/alertmanager:v0.20.0 quay.io/prometheus/node-exporter:v0.18.1
# 传输到新节点
scp ceph-images.tar ceph02:/root/
# 在新节点上加载镜像
docker load -i ceph-images.tar第五阶段:验证与监控
5.1 检查服务状态
ceph -s
ceph orch ps --hostname ceph02
ceph osd tree
ceph orch device ls5.2 监控数据恢复
# 实时监控恢复状态
ceph -w
# 查看详细恢复进度
ceph progress
# 查看OSD使用情况
ceph osd df tree5.3 取消保护性标记
当确认恢复正常后,取消之前设置的保护标记:
ceph osd unset noout
ceph osd unset norebalance
ceph osd unset norecover恢复结果验证
恢复完成后,检查集群状态:
ceph -s
ceph osd tree
ceph pg stat预期结果:
所有服务状态正常 (HEALTH_OK)
所有PG状态为active+clean
数据冗余度恢复正常
所有OSD正常运行
经验总结与最佳实践
成功关键因素
事前准备: 完善的监控和报警系统能及时发现故障
操作谨慎: 设置保护性标记防止恢复期间的数据混乱
版本一致: 确保新节点软件版本与集群一致
网络配置: 主机名、IP地址与故障前保持一致
遇到的问题及解决方案
Stray daemon警告: 通过清理残留服务和等待自动清理解决
Monitor磁盘空间不足: 定期清理monitor日志和数据
SSH连接问题: 确保SSH密钥正确配置和known_hosts清理
预防措施建议
定期备份: 备份Ceph关键配置和认证密钥
监控告警: 设置磁盘空间、节点离线等关键指标的告警
文档完善: 维护集群架构图和恢复流程文档
演练测试: 定期进行灾难恢复演练
附录:常用诊断命令
# 集群状态检查
ceph -s
ceph health detail
# OSD相关
ceph osd tree
ceph osd df tree
ceph osd dump
# 服务状态
ceph orch ps
ceph orch host ls
ceph orch device ls
# 数据分布
ceph pg stat
ceph pg dump
# 监控信息
ceph mon stat
ceph mon dump
# 性能监控
ceph -w
ceph progress通过本文记录的过程,我们成功恢复了完全丢失的Ceph节点,确保了集群的完整性和数据的安全性。这份文档不仅可以作为本次恢复工作的记录,也可以作为未来类似故障处理的参考指南。
评论区