災(zāi)備相關(guān)知識(shí)點(diǎn)
RPO:最多可能丟失的數(shù)據(jù)的時(shí)長,即我們可以將數(shù)據(jù)恢復(fù)到什么時(shí)候,并且越接近現(xiàn)在(崩潰/丟失點(diǎn))越好。
RTO:從災(zāi)難發(fā)生到整個(gè)系統(tǒng)恢復(fù)正常所需要的最大時(shí)長。
好的RPO實(shí)現(xiàn):頻繁增量備份
好的RTO實(shí)現(xiàn):加快從快照恢復(fù)數(shù)據(jù)速度
ES snapshot 注意事項(xiàng)
- 可在kibana的Snapshot and Restore功能模塊進(jìn)行操作
- 不同快照間為增量式快照(節(jié)約時(shí)間空間),且刪除一個(gè)快照不會(huì)影響其他快照
- SLM策略和集群執(zhí)行保留策略是兩個(gè)配置
- 可以手動(dòng)執(zhí)行策略測試
- 可以monitor后臺(tái)運(yùn)行的快照任務(wù)狀態(tài)
- 刪除正在制作的快照可以結(jié)束制作過程并刪除文件
- 刪除正在恢復(fù)的索引可以結(jié)束restore過程。
- 查看快照倉庫下全部快照信息:
GET /_snapshot/test_backup/_all
- 查看快照倉庫下正在制作快照信息:
GET /_snapshot/test_backup/_current
- 獲取快照運(yùn)行詳細(xì)狀態(tài)信息:
GET /_snapshot/_status
GET /_snapshot/test_backup/_status
GET /_snapshot/test_backup/snapshot_1/_status
- 查看 SLM 運(yùn)行狀態(tài)及計(jì)劃:
GET /_slm/policy?human
- 立刻執(zhí)行一次 SLM 計(jì)劃:
POST _slm/policy/nightly-snapshots/_execute
- 使用刪除快照 API 刪除或取消快照制作:
DELETE /_snapshot/test_backup/my_snapshot
- 清理倉庫刪除無用快照文件:
POST /_snapshot/test_backup/_cleanup
- SLM 定期清理策略執(zhí)行時(shí)間:每天凌晨5點(diǎn)執(zhí)行一小時(shí)
PUT _cluster/settings
{
"persistent": {
"slm.retention_schedule": "0 0 21 * * ?",
"slm.retention_duration":"1h"
}
}
- 跨集群數(shù)據(jù)遷移只讀集群配置:
PUT _snapshot/test_backup
{
"type": "hdfs",
"settings": {
"path": "/user/quantum_social/es-snapshot/mz_bia_social/test_backup",
"uri": "hdfs://10.11.1.1:8020",
"readonly":true
}
}
- 恢復(fù)快照到集群使用自定義索引名:
將 my_snapshot 快照中的 caster 索引恢復(fù)為 test_caster 索引
POST /_snapshot/test_backup/my_snapshot/_restore
{
"indices": "caster",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "(.+)",
"rename_replacement": "test_$1",
"include_aliases": false
}
- 查看索引的恢復(fù)狀態(tài)
GET /caster/_recovery?human
GET /_cat/shards/caster?v&s=state&h=index,shard,p,state,node,unassigned.reason
GET /_cluster/allocation/explain //查看分片未恢復(fù)的原因
快照相關(guān)集群設(shè)置:
snapshot.max_concurrent_operations
快照創(chuàng)建和刪除并發(fā)操作數(shù)限制
創(chuàng)建倉庫時(shí)可配置參數(shù):
max_snapshot_bytes_per_sec
節(jié)點(diǎn)級(jí)別快照制作速率限制,默認(rèn)40mb。
max_restore_bytes_per_sec
節(jié)點(diǎn)級(jí)別快照恢復(fù)速率限制,默認(rèn)無限制;同時(shí)受indices.recovery.max_bytes_per_sec參數(shù)影響,默認(rèn)40mb,7集群當(dāng)前配置120mb。
compress
是否壓縮元數(shù)據(jù),默認(rèn)為false
readonly
是否設(shè)置存儲(chǔ)庫為只讀,默認(rèn)為false
restore 速度相關(guān)配置參數(shù):
es 的 snapshot restore 操作由 snapshot 線程池控制的。這個(gè)線程池控制并發(fā)snapshot或者restore的線程的數(shù)量。一個(gè)shard需要綁定一個(gè)thread來進(jìn)行操作。此線程池大小受3個(gè)因素影響:
- 機(jī)器可用processor數(shù)量,也既cpu核數(shù)。這個(gè)默認(rèn)是讀取機(jī)器配置。但是可以通過參數(shù)進(jìn)行配置。
- thread_pool.snapshot.max
- thread_pool.snapshot.core: 20
restore 的并發(fā)分片數(shù)除了受到 snapshot 線程池控制之外,因?yàn)閞estore是與索引recover的機(jī)制相同,因此還受節(jié)點(diǎn)可并發(fā)恢復(fù)的主分片數(shù)量的限制。
cluster.routing.allocation.node_initial_primaries_recoveries:默認(rèn)為4,限制了單節(jié)點(diǎn)同時(shí)recover/restore的主分片數(shù)為4。如果需要通過提高并行度從而加快restore過程,可增大此設(shè)置。
注:可能存在 restore 并發(fā)數(shù)不足數(shù)據(jù)節(jié)點(diǎn)數(shù)×4的情況,因?yàn)榉制枰诠?jié)點(diǎn)均衡分布,某些節(jié)點(diǎn)提前完成,某些節(jié)點(diǎn)滯后。
FAQ:
快照制作并發(fā)和速率限制?
在運(yùn)行多個(gè)快照制作、量較大時(shí),會(huì)發(fā)現(xiàn)較多索引分片處于initializing狀態(tài);且會(huì)按啟動(dòng)順序阻塞快照制作和刪除任務(wù)。max_snapshot_bytes_per_sec參數(shù)控制。多 SLM 策略設(shè)置同樣 schedule 是否存在問題?
kibana 的 warning,對 ES 影響不大。資料1資料2restore中出現(xiàn)部分分片無法恢復(fù)的情況
在 restore 過程中,部分分片通過GET _cat/shardsapi 查看處于UNASSIGNED狀態(tài)且其他分片均已恢復(fù)完成(即非等待恢復(fù)中而是不可恢復(fù))
可通過GET /_cluster/allocation/explainapi 查看問題原因,并尋找解決辦法,多為分片分配限制配置的問題,例:
索引index.routing.allocation.total_shards_per_node配置導(dǎo)致,每個(gè)節(jié)點(diǎn)分配分片數(shù)量。可在 restore api 中 index_settings 內(nèi)修改對應(yīng)參數(shù)進(jìn)行恢復(fù)。首次快照出現(xiàn)部分索引部分分片備份失敗情況
由于網(wǎng)絡(luò)超時(shí),ES索引狀態(tài)和HDFS狀態(tài)等原因偶爾會(huì)出現(xiàn)部分索引的部分分片備份失敗的情況,再次運(yùn)行快照成功即可,無需糾結(jié)細(xì)節(jié)內(nèi)容。