Ceph monitor故障恢復探討

YY哥發表於2014-08-20

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還是可以通訊的。

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/ 
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。

相關文章