当前位置: 首页 > article >正文

ceph mon 数据重建

概述

在ceph集群架构中,我们一般会配置多个且一般为奇数个mon作为监控服务,当集群中少于半数mon异常时,mon集群不会受到影响,依然可以进行选举。而某些极限场景,所有mon或者当集群本身只有一个mon,mon服务异常,db数据损失时,集群就会受到影响。
此文档提供一种,利用osd中map,重构mon db数据并恢复mon服务的方法。当然,存在此恢复方法并不意味着集群mon容灾不重要,我们依然要按照社区标准,针对集群规模,设置数量足够多的mon节点

测试过程

背景

  • 所有osd up in,pg active+clean
  • 集群只有一个mon

停止mon服务并模拟mon数据全部损坏

systemctl stop ceph-mon@mon0
mv /var/lib/ceph/mon/ceph-mon0 /tmp/ceph-mon0.bak                                                                                                

此时mon数据相当于完全丢失,ceph命令无响应

停止所有osd进程

(使用ceph-objectstore-tool时都需要停止osd的进程以操作osd的目录)

systemctl stop ceph-osd.target

创建临时mon目录,以收集map信息

本节点只有0和1两个osd,因此执行以下命令即可

mkdir /tmp/mon-rebuild
ceph-objectstore-tool --id=0  --data-path /var/lib/ceph/osd/ceph-0 --op update-mon-db --mon-store-path /tmp/mon-rebuild
ceph-objectstore-tool --id=1  --data-path /var/lib/ceph/osd/ceph-2 --op update-mon-db --mon-store-path /tmp/mon-rebuild

此时完成了本节点上所有osd的db数据收集追加,注意该动作每次都以追加形式写到/tmp/mon-rebuild目录,这意味着,如果你有多个节点,当你做完一个节点,需要将该目录完全拷贝至其他节点,并对其他节点上的所有osd继续执行update-mon-db目录,最终完成所有osd的收集,并最终获取一个包含了所有db信息的/tmp/mon-rebuild目录

重建mon目录,恢复完整结构

ceph-monstore-tool /tmp/mon-rebuild/ rebuild
mkdir /var/lib/ceph/mon/ceph-mon0/
cp -ra /tmp/mon-rebuild/* /var/lib/ceph/mon/ceph-mon0/
touch /var/lib/ceph/mon/ceph-mon0/done
touch /var/lib/ceph/mon/ceph-mon0/systemd

注意,如果你这里原本集群数据并不是像测试,而是遭遇了系统盘故障类似情形,可能整个/var/lib/ceph目录都需要手动重建,可能需要主要ceph用户组,权限等问题,这里不做展开。

恢复monmap

这步是必须的,无论原来集群是几个mon,这步需要新建一个只包含一个上面需要用来临时启动mon服务的monmap。

cat /etc/ceph/ceph.conf|grep fsid #获取集群的fsid
monmaptool --create --fsid ********-****-****-****-************ --add mon0 ip:6789 monmap
ceph-mon -i mxj --inject-monmap monmap

启动mon服务

systemctl start ceph-mon@mon0

ceph mon服务恢复后,其余服务和数据在按照正常case问题处理即可,此处不做展开。

总结

集群中所有mon数据异常,本身就是一个高危场景,日常运维过程中,应极力避免此类故障发生。即使社区已合入根据收集的所有osd的map来恢复mon数据的方法,也并不代表可以忽视mon集群安全问题。
在进行上述修复操作时,需要小心谨慎,一旦update-mon-db失败、遍历缺少了部分osd的信息都会导致最终无法恢复mon,且重试无效。


http://www.kler.cn/a/421502.html

相关文章:

  • FolderMove 3.0 |文件夹安全转移,释放C盘空间
  • 零基础快速掌握——【c语言基础】数组的操作,冒泡排序,选择排序
  • 【Linux】应用层协议—HTTP
  • 【CSS in Depth 2 精译_066】11.2 颜色的定义(上)
  • idea 自动导包,并且禁止自动导 *(java.io.*)
  • javaweb_Day05
  • yt6801 ubuntu有线连接驱动安装
  • vue前端 下载、预览图片
  • 【Unity】【游戏开发】【VR】如何解决脚本不在同一个项目无法引用Public变量的问题
  • Epsilon2系列战术级微型惯性RTK卫星高精度组合导航系统0.5°/h
  • 开发中使用UML的流程_06 PIM-2:分析业务规则
  • Lumos学习王佩丰Excel第十九讲:Indirect函数
  • 《NGINX金典教程》读书笔记
  • 什么是敏捷(Agile)开发?Scrum和Kanban有什么关系?
  • 【Leetcode Top 100】2. 两数相加
  • 海康gige工业相机无驱动取像突破(c#实现,最后更新,你也可以移植到linux下去用)
  • 蓝桥杯第 23 场 小白入门赛
  • Spring Boot项目的创建
  • 微服务搭建----springboot接入Nacos2.x
  • 【Java基础面试题009】Java的I/O流是什么?
  • 160-两路14位400Msps AD,两路16位400Msps DA FMC子卡模块
  • 基于PySpark 使用线性回归、随机森林以及模型融合实现天气预测
  • 机器学习:精确率与召回率的权衡
  • 【服务器问题】xshell 登录远程服务器卡住( 而 vscode 直接登录不上)
  • Linux常用命令行
  • 澎峰科技助力中国移动 重磅发布智算“芯合”算力原生基础软件栈2.0