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. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  2. 在UTF8(linux)下,逆置汉字字符串

    #include <stdio.h> int main() { char c[]="我是如此热爱编程!"; ,min=,max; while(c[index]) { i ...

  3. VPN断线原因解析- ADSL惹的祸

    在我们使用VPN的时候,最讨厌的就是无故的断线了,可能正在和好基友一起副本,或者正在视频热聊中,还或者youtube视频看的正起劲,突然windows一个对话框弹出 - “连接已经断开”.实在是太影响 ...

  4. Linux下cutecom使用USB转串口线

    http://www.cnblogs.com/pang123hui/archive/2011/05/29/2309888.html 在Linux下的串口调试一直使用minicom,虽说Linux的精髓 ...

  5. StringGrid 实例1:初始化StirngGrid的首行和首列

    实例1:初始化StirngGrid的首行和首列

  6. Linux 查杀进程

    ps -eaf |grep "stoporder.php" | grep -v "grep"| awk '{print $2}'|xargs kill -9 # ...

  7. Text input(文本输入框)

    Text input(文本输入框)是用来获得用户输入的绝佳方式. 你可以用如下方法创建: <input type="text"> 注意,input元素是自关闭的.

  8. Selenium WebDriver使用IE浏览器

    摘:http://www.cnblogs.com/dream0577/archive/2012/10/07/2714579.html /**       用IE驱动,1.先到官网下载IEDriverS ...

  9. 我使用中的Linux命令和快捷键(For Ubuntu)

    虽然自己工作一直都在MS的平台体系,自然很多的工作都需要在windows上完成,自己的电脑也一直使用windows操作系统,但是笔记本配置不是很好,导致装windows 8后,笔记本卡的难以忍受.想想 ...

  10. Asp.Net Web API 2第二课——CRUD操作

    详情请查看http://aehyok.com/Blog/Detail/69.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...