以前跟一個朋友溝通一個其餘的問題的時候,發現了有一個參數 mon osd down out subtree limit
一直沒有接觸到,看了一下這個參數仍是頗有做用的,本篇將講述這個參數的做用和使用的場景前端
首先配置一個集羣環境,配置基本參數測試
mon_osd_down_out_interval = 20
調整這個參數爲20s,默認爲300s,默認一個osd,down超過300s就會標記爲out,而後觸發遷移,這個是爲了方便儘快看到測試的效果,不少測試都是能夠這樣縮短測試周期的spa
本次測試關心的是這個參數 mon osd down out subtree limit
參數,那麼這個參數作什麼用的,咱們來看看code
[root@lab8106 ceph]# ceph --show-config|grep mon_osd_down_out_subtree_limit mon_osd_down_out_subtree_limit = rack
首先解釋下這個參數是作什麼的,這個是控制標記爲out的最小子樹(bucket),默認的這個爲rack,這個可能咱們平時感知不到這個有什麼做用,大部分狀況下,咱們通常都爲主機分組或者作了故障域,也不多作到測試去觸發它,本篇文章將告訴你這個參數在什麼狀況下生效,對咱們又有什麼做用blog
準備兩個物理節點,每一個節點上3個osd,一共六個osd,上面的down out的時間已經修改成20s,那麼會在20s後出現out的狀況進程
首先用默認的 mon_osd_down_out_subtree_limit = rack
去作測試get
開啓幾個監控終端方便觀察it
ceph -w watch ceph osd tree
在其中的一臺上執行集羣
systemctl stop ceph-osd@5
測試輸出監控
2016-10-13 10:15:39.673898 mon.0 [INF] osd.5 out (down for 20.253201) 2016-10-13 10:15:39.757399 mon.0 [INF] osdmap e60: 6 osds: 5 up, 5 in
中止一個後正常out
咱們再來中止一臺主機全部osd
systemctl stop ceph-osd.target
測試輸出
2016-10-13 10:17:09.699129 mon.0 [INF] osd.3 out (down for 23.966959) 2016-10-13 10:17:09.699178 mon.0 [INF] osd.4 out (down for 23.966958) 2016-10-13 10:17:09.699222 mon.0 [INF] osd.5 out (down for 23.966958)
能夠看到這臺主機上的節點所有都正常out了
咱們再調整下參數
mon_osd_down_out_subtree_limit = rack
將這個參數設置爲host
mon_osd_down_out_subtree_limit = host
重啓全部的進程,讓配置生效,咱們測試下只斷一個osd的時候能不能out
systemctl stop ceph-osd@5
中止掉osd.5
測試輸出
2016-10-13 10:48:45.612206 mon.0 [INF] osd.5 out (down for 21.966238)
能夠看到能夠osd.5能夠正常的out
咱們再來中止lab8107的全部的osd
systemctl stop ceph-osd.target
中止掉 lab8107 全部的osd,能夠看到沒有out了,這個是由於把故障out設置爲host級別了,這個地方出現host級別故障的時候,就不進行遷移了
關鍵的地方在於總結了,首先咱們要想想,ceph機器的遷移開不開(noout),關於這個問題,必定有兩個答案
這裏這個參數其實就是將咱們的問題更加細膩的控制了,咱們如今根據這個參數就能作到,遷移能夠開,壞掉一個盤的時候我讓它遷移,一個盤的數據恢復影響和時間是能夠接受的,主機損壞我不讓他遷移,爲何?主機損壞你去讓他遷移,首先會生成一份數據,等主機好了,數據又要刪除一份數據,這個對於磁盤都是消耗,主機級別的故障必定是可修復的,這個地方主機down機,主機電源損壞,這部分數據都是在的,那麼這個地方就是須要人工去作這個修復的工做的,對於前端的服務是透明的,默認的控制是down rack纔不去標記out,這個固然你也能夠控制爲這個,好比有個rack掉電,就不作恢復,若是down了兩臺主機,讓他去作恢復,固然我的不建議這麼作,這個控制就是本身去判斷這個地方須要作不
ceph裏面仍是提供了一些細微粒度的控制,值得去與實際的應用場景結合,固然默認的參數已經能應付大部分的場景,控制的更細只是讓其變得更好