Ceph monitor故障恢复探讨

1 问题算法

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

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

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.ide

 

因此,工具

(1)若是挂掉的2个节点至少有一个能够恢复,也就是monitor的元数据仍是OK的,那么只须要重启ceph-mon进程便可。因此,对于monitor,最好运行在RAID的机器上。这样,即便机器出现故障,恢复也比较容易。this

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

2 恢复

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

 

添加monitor的步骤:blog

$ 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仍是能够通讯的。

NewImage

 

可是,让人蛋疼的是经过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

 

 NewImage

一切OK!

 

主要参考

[1]RECOVERING FROM CEPH-MON FAILURE


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

相关文章
相关标签/搜索