1 问题

一般来说,在实际运行中,ceph monitor的个数是2n+1(n>=0)个,在线上至少3个,只要正常的节点数>=n+1,ceph的paxos算法能保证系统的正常运行。所以,对于3个节点,同时只能挂掉一个。一般来说,同时挂掉2个节点的概率比较小,但是万一挂掉2个呢?

如果ceph的monitor节点超过半数挂掉,paxos算法就无法正常进行仲裁(quorum),此时,ceph集群会阻塞对集群的操作,直到超过半数的monitor节点恢复。

If there are not enough monitors to form a quorum, the ceph command will block trying to reach the cluster. In this situation, you need to get enough ceph-mon daemons running to form a quorum before doing anything else with the cluster.

所以,

(1)如果挂掉的2个节点至少有一个可以恢复,也就是monitor的元数据还是OK的,那么只需要重启ceph-mon进程即可。所以,对于monitor,最好运行在RAID的机器上。这样,即使机器出现故障,恢复也比较容易。

(2)如果挂掉的2个节点的元数据都损坏了呢?出现这种情况,说明人品不行,2台机器的RAID磁盘同时损坏,这得多背?肯定是管理员嫌工资太低,把机器砸了。如何恢复呢?

2 恢复

其实,也没有其它办法,只能想办法将故障的节点恢复,但元数据已经损坏。幸好还有一个元数据正常的节点,通过它可以恢复。

添加monitor的步骤:

$ ceph mon getmap -o /tmp/monmap           # provides fsid and existing monitor addrs

$ ceph auth export mon. -o /tmp/monkey     # mon. auth key

$ ceph-mon -i newname --mkfs --monmap /tmp/monmap --keyring /tmp/monkey

所以,只要得到monmap,就可以恢复monitor了。

为了模拟,考虑2个monitor节点,挂掉一个,此时通过网络访问ceph的所有操作都会被阻塞,但monitor的本地socket还是可以通信的。

但是,让人蛋疼的是通过socket不能进行monmap的导出。不过,幸好有monmaptool工具,通过它,我们可以手动生成(注意fsid):

# monmaptool  --create  --add vm2 172.16.213.134:6789 --add vm3 172.16.213.135:6789 --fsid eb295a51-ec22-4971-86ef-58f6d2bea3bf --clobber monmap

monmaptool: monmap file monmap

monmaptool: set fsid to eb295a51-ec22-4971-86ef-58f6d2bea3bf

monmaptool: writing epoch 0 to monmap (2 monitors)

将正常monitor节点的mon key拷贝过来:

# cat /var/lib/ceph/mon/cluster1-vm2/keyring

[mon.]

key = AQDZQ8VTAAAAABAAX9HqE0NITrUt7j1w0YadvA==

caps mon = "allow *"

然后初始化:

# ceph-mon --cluster cluster1 -i vm3 --mkfs --monmap /root/monmap --keyring /tmp/keyring

ceph-mon: set fsid to eb295a51-ec22-4971-86ef-58f6d2bea3bf

ceph-mon: created monfs at /var/lib/ceph/mon/cluster1-vm3 for mon.vm3

最后,启动故障节点:

# ceph-mon --cluster cluster1 -i vm3 --public-addr 172.16.213.135:6789

一切OK!

主要参考

[1]RECOVERING FROM CEPH-MON FAILURE

作者:YY哥 
出处:http://www.cnblogs.com/hustcat/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Ceph monitor故障恢复探讨的更多相关文章

  1. Ceph Monitor的数据管理

    转自:https://www.ustack.com/blog/ceph-monitor-2/ Monitor管理了Ceph的状态信息,维护着Ceph中各个成员的关系,这些信息都是存放在leveldb中 ...

  2. Ceph Monitor基础架构与模块详解

    转自:https://www.ustack.com/blog/ceph-monitor/ Ceph rados cluster离不开Monitor,如果没有Monitor,则Ceph将无法执行一条简单 ...

  3. Ceph osd故障恢复

    1  调高osd的日志等级 加上红框那一行就可以了 osd的日志路径:/var/log/ceph/ceph-osd.3.log 注意:加上了这一行后日志会刷很多,所以要特别注意日志容量的变化,以防把v ...

  4. Ceph:一个开源的 Linux PB 级分布式文件系统

    探索 Ceph 文件系统和生态系统 M. Tim Jones , 自由作家 简介:  Linux®持续不断进军可扩展计算空间,特别是可扩展存储空间.Ceph 最近才加入到 Linux 中令人印象深刻的 ...

  5. 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  6. 解析Ceph: Snapshot

    经常有开发者在邮件列表中会问到Ceph Snapshot的实现方式,受限于目前有限的实现文档和复杂的代码结构和代码量,弄清楚Ceph Snapshot并不是一件容易的事.正好最近在重构Ceph存储引擎 ...

  7. ceph理论及部署配置实践

    prefaces: ceph installation(quick)1,preflight(ins ceph-deploy repo tools)2,ceph storage cluster quic ...

  8. ceph源码之一

    转自于:http://blog.csdn.net/changtao381/article/details/8698935 一.概述: 其结构如下:在src 里, 网络通信:  msg  里面 包括了网 ...

  9. ceph install

    Ceph : performance, reliability and scalability storage solution Contents 1 Introduction 1.1 Testing ...

随机推荐

  1. java面试

    1. 问一下服务器管理 2. 问一下流操作 3. 问一下多线程.struts是不是多线程的.或者说servlet的机制. 4. MySQL存储引擎 MyISAM 和 InnoDB 5 跨域问题. 6 ...

  2. ycsb-命令及参数-与生成的负载类型相关

    loadbin/ycsb load mydb -P workloads/workloada -p "mydb.host=127.0.0.1" -p "mydb.port= ...

  3. Echarts动态加载后台数据

    注意:1.用Ajax请求获取后台数据 2.Echarts只能处理Json数据 后台Controller:根据业务需求不同而返回不同数据,我前台要循环遍历Echarts的series进行数据添加,所以后 ...

  4. Android之ListView——ArrayAdapter的学习与总结

    问题:当ListView选定的ListItem视图中存在一些UI组件,如CheckBox,希望保存状态,但实际上第一次完成时发现勾选后的选项在列表往下滑再滑回去后,状态没有保存 解决过程: 1)思考后 ...

  5. 6、UITableView表的分割线左对齐

    //分割线左对齐 -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtI ...

  6. 斯坦福第十四课:降维(Dimensionality Reduction)

    14.1  动机一:数据压缩 14.2  动机二:数据可视化 14.3  主成分分析问题 14.4  主成分分析算法 14.5  选择主成分的数量 14.6  重建的压缩表示 14.7  主成分分析法 ...

  7. 比较有价值的参考文档-----------------URL

    http://www.wendangku.net/doc/f7b4349108a1284ac85043bf.html             曙光服务器的IPMI http://noob.blog.1 ...

  8. React与ES6(三)ES6类和方法绑定

    React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...

  9. iOS 设置navigationBar背景

    - (void)viewWillAppear:(BOOL)animated {    [superviewWillAppear:animated];    [self.navigationContro ...

  10. android中include 的使用讲解

    include的作用就是重复使用同一段代码,提高代码的重用性.具体说就是,通过include 在 某布局 a.xml 中引用 B.xml布局文件,这个b.xml可同时被多个布局同时使用,所以达到了同一 ...