Ceph monitor故障恢復探討


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM