故障測試 [目標: 延時自動執行 RECOVERY]
阿新 • • 發佈:2019-02-11
前提:
由於磁碟故障原因, 可能會導致 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",