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磁盤同時損壞,這得多背?確定是管理員嫌工資過低,把機器砸了。如何恢復呢?url

2 恢復

其實,也沒有其它辦法,只能想辦法將故障的節點恢復,但元數據已經損壞。幸虧還有一個元數據正常的節點,經過它能夠恢復。spa

 

添加monitor的步驟:3d

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

$ 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/ 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

相關文章
相關標籤/搜索