1. 程式人生 > >故障測試 [目標: 延時自動執行 RECOVERY]

故障測試 [目標: 延時自動執行 RECOVERY]

前提:

由於磁碟故障原因,  可能會導致  ceph osd 在晚上故障,  並自動完成資料遷移並自動修復功能
當早上執行更換硬碟操作後,  資料會重新再次遷移一次,
由於出現數據自動恢復功能,  會導致數恢復期間可能與使用者使用資料高峰期重疊,  會導致使用者 IO 搶奪

解決目的

避免 ceph 在故障時候自動執行 RECOVERY 功能
需要人工介入執行 RECOVERY 週期

ceph 故障恢復條件說明

1 ceph osd down
2 mon 無法獲得 ceph osd heartbeat 資訊標註 warning 資訊,  並顯示
3 五分鐘後,  mon 標記該 ceph osd 為 out
狀態 4 當標記 out 狀態後, ceph 執行自動 recovery 操作

日誌記錄收集

osd down, 從 mon 中, 我們可以馬上對應獲得資訊 但不會標註為 out 狀態, 因此沒有執行相應的 recovery 操作

2017-08-15 17:22:30.299262 7fd537f8b700  1 mon.ceph-node81@0(leader).osd e535 e535: 14 osds: 11 up, 14 in

ceph -s 會獲得對應報警資訊

health HEALTH_WARN 209 pgs degraded; 75 pgs stuck unclean; 209
pgs undersized; recovery 38/165 objects degraded (23.030%); 3/14 in osds are down

當 mon 對對應的 osd 標註為 out 之後, 系統會自動執行 recovery 操作

2017-08-15 17:27:25.667587 7fd53675e700  0 log_channel(cluster) log [INF] : osd.5 out (down for 301.474038)
2017-08-15 17:27:25.673277 7fd537f8b700  1 mon.ceph-node81@0(leader).osd e536 e536: 14
osds: 11 up, 13 in 2017-08-15 17:27:25.675357 7fd537f8b700 0 log_channel(cluster) log [INF] : osdmap e536: 14 osds: 11 up, 13 in ........ ........ 2017-08-15 17:27:33.061185 7fd537f8b700 0 log_channel(cluster) log [INF] : osdmap e541: 14 osds: 11 up, 11 in 2017-08-15 17:27:33.314995 7fd537f8b700 0 log_channel(cluster) log [INF] : pgmap v1554: 320 pgs: 209 active+undersized+degraded, 111 active+clean; 31075 MB data, 83489 MB used, 468 GB / 549 GB avail; 38/165 objects degraded (23.030%) 2017-08-15 17:27:35.639903 7fd53675e700 0 mon.ceph-node81@0(leader).data_health(20) update_stats avail 94% total 36454 MB, used 1967 MB, avail 34486 MB 2017-08-15 17:27:36.188461 7fd537f8b700 0 log_channel(cluster) log [INF] : pgmap v1555: 320 pgs: 192 active+undersized+degraded, 124 active+clean, 4 active+recovering+degraded; 31075 MB data, 84258 MB used, 467 GB / 549 GB avail; 50/165 objects degraded (30.303%) 2017-08-15 17:27:37.257884 7fd537f8b700 0 log_channel(cluster) log [INF] : pgmap v1556: 320 pgs: 139 active+undersized+degraded, 164 active+clean, 4 active+recovery_wait+degraded, 13 active+recovering+degraded; 31075 MB data, 85061 MB used, 466 GB / 549 GB avail; 78/165 objects degraded (47.273%); 265 MB/s, 0 objects/s recovering

ceph 動態引數修改說明

ceph tell {daemon-type}.{id or *} injectargs --{name} {value} [--{name} {value}]

用 osd 、 mon 、 mds 中的一個替代 {daemon-type} ,你可以用星號( * )更改一類程序的所有例程配置、或者更改某一具體程序 ID (即數字或字母)的配置。

ceph 配置修改說明:

ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show   [獲得當前 ceph 動態配置]
ceph tell osd.\* injectargs "--osd_recovery_delay_start 10000"          [延時 recovery 操作時間  但對當前環境不適用]
ceph tell * injectargs "--mon_osd_down_out_interval 300000"           [延時 osd mark out 動作]

測試:

修改引數 osd_recovery_delay_start

作用, 對 osd recovery 操作演示 150 分鐘

ceph tell osd.\* injectargs "--osd_recovery_delay_start 9000" 

recovery 總結

1 osd down
2 mon 會在 5 分鐘後標記相應的 osd out 狀態
3 預設狀態下,  osd_recovery_delay_start =0 , 即 recovery 會馬上發生
4 但當修改設定  osd_recovery_delay_start = 9000 ,   recovery 操作將會延時  150 分鐘
5 但在等待恢復的 150 分鐘其間,   我們還原  osd_recovery_delay_start  = 0 ,   recovery 操作不會自動發生,   必須要等待 150 分鐘後才會發生

    結果:  無法達到預期需求,  無法滿足自動控制 recovery 時間,

後續操作, 恢復改設定為 0

修改引數 mon_osd_down_out_interval

ceph tell osd.\* injectargs "--mon_osd_down_out_interval 9000" 

自動 recovery 總結

1 osd down
2 mon 會在 150 分鐘後才標記相應的 osd out 狀態
3 當 mon 標記 osd out 狀態後,  recovery 自動發生

按需 recovery 總結

1 osd down
2 mon 將會在 150 分鐘後才標記相應的 osd out 狀態
3 在 osd down 之後, 進行磁碟更換, 並令其 osd 再次線上,  recovery 會自動執行恢復,  無需等待 150 分鐘標記 osd out 狀態後再執行 recovery

結果: 
  可以在 osd out  時,  對 recovery 操作延時 150 分鐘, 
  並且在 osd out 期間, 可以根據需要人工干預 recovery 操作

永久化修改 ceph.conf 配置

需重啟叢集生效

[global]
...
...
[mon]
...
...
[osd]
mon osd down out interval = 172800   [延時兩天]

驗證

[root@ceph-node81 ceph]#  ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show  | grep "mon_osd_down_out_interval"
  "mon_osd_down_out_interval": "172800",