1.咱們ES節點個數有限,而環境中日誌量又很是龐大,長此以往ES的性能便會降低,因此要對之前的索引作定時清理。
2.ES副本提供了高可靠性,它們讓你能夠容忍零星的節點丟失而不會中斷服務。可是,副本並不提供對災難性故障的保護。對這種狀況,咱們須要的是對集羣真正的備份。html
使用 snapshot API對集羣作備份,通常有兩種方案:
1.增量備份:是默認的備份方案,即作快照時不指定索引,第一個快照會是一個數據的完整拷貝,後續的快照會保留的是已存快照和新數據之間的差別。
2.備份指定索引:某些日誌並不須要長期保存,因此只對咱們感興趣的索引作快照,必定程度上也能節省磁盤空間。json
本案例是針對指定索引進行備份bash
$ df -hT
文件系統 類型 容量 已用 可用 已用% 掛載點
172.16.244.245:/logs/bjbpe01-es nfs 2.0T 1.3G 2.0T 1% /data/backupapp
注意:共享文件系統路徑必須確保集羣全部節點均可以訪問到。因此咱們三個節點都掛載同一個目錄。curl
集羣每一個節點elasticsearch.yml配置文件中添加以下配置,而後重啓服務。
path.repo: /data/backupelasticsearch
#建立倉庫目錄 $ mkdir /data/backup/2019-02-28 #建立倉庫 $ curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/2019-03-08 -d ' { "type": "fs", "settings": { "location": "/data/backup/2019-03-08", "max_snapshot_bytes_per_sec": "50mb", "max_restore_bytes_per_sec": "50mb" } }' #2019-03-08 共享倉庫名稱 #「type」:」fs」 指定倉庫類型是一個共享文件系統 #「location」: 「/data/backup」 指定掛載目錄 #「max_snapshot_bytes_per_sec" : "50mb" 控制快照存到倉庫時的限流狀況,默認每秒20mb #"max_restore_bytes_per_sec" : "50mb" 控制從倉庫恢復數據時的限流狀況,默認每秒20mb
注意:若是須要更新已有倉庫設置,請使用POST方式提交,例如咱們要將限流都改成每秒60mbide
$ curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:9200/_snapshot/2019-03-08 -d ' { "type": "fs", "settings": { "location": "/data/backup/2019-03-08", "max_snapshot_bytes_per_sec": "60mb", "max_restore_bytes_per_sec": "60mb" } }'
$ curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/2019-03-08/logstash-audit_log-2019-03-08?wait_for_completion=true -d ' { "indices": "logstash-audit_log-2019-03-08" }' #logstash-audit_log-2019-03-08快照名稱 #wait_for_completion 默認快照時會進入後臺執行,添加該標記能夠阻止進入後臺執行,常在腳本中使用。 #"indices" 指定要作快照的索引
curl -XDELETE http://127.0.0.1:9200/ logstash-audit_log-2019-02-08
其餘的經常使用命令性能
#列出倉庫 curl -XGET http://127.0.0.1:9200/_snapshot/* #刪除倉庫 curl -XDELETE http://127.0.0.1:9200/_snapshot/2019-03-08 #列出快照 curl -XGET http://127.0.0.1:9200/_snapshot/2019-03-08/* #刪除快照 curl -XDELETE http://127.0.0.1:9200/_snapshot/2019-03-08/logstash-audit_log-2019-03-08
這裏提供一個簡單的腳本,用於備份昨天的數據並清理一個月前的數據ui
#!/bin/bash #共享存儲目錄 NFS_DIR=/data/backup #獲取昨天日期(備份使用) DATE_YESTERDAY=`date -d "-1 day" +%Y-%m-%d` #獲取一個月前日期(索引刪除使用) DATE_MONTH_AGO=`date -d "1 month ago" +%Y-%m-%d` #要作快照的索引名稱 INDEX=(index1 index2 index3) echo "開始時間:`date +%Y-%m-%d_%H:%m:%S`" #--------------建立倉庫-------------- if [[ ! -d ${NFS_DIR}/${DATE_YESTERDAY} ]];then mkdir -p ${NFS_DIR}/${DATE_YESTERDAY} fi curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/${DATE_YESTERDAY} -d ' { "type": "fs", "settings": { "location": "'${NFS_DIR}'/'${DATE_YESTERDAY}'", "max_snapshot_bytes_per_sec": "50mb", "max_restore_bytes_per_sec": "50mb" } }' if [[ $? == 0 ]];then echo "${DATE_YESTERDAY}倉庫建立成功!" fi #--------------數據處理-------------- for i in ${INDEX[@]} do #建立快照,備份昨天的數據 curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/${DATE_YESTERDAY}/${i}-${DATE_YESTERDAY}?wait_for_completion=true -d ' { "indices": "'${i}'-'${DATE_YESTERDAY}'" }' if [[ $? == 0 ]];then echo "${i}-${DATE_YESTERDAY}快照建立成功!" fi #刪除一個月前數據 curl -XGET "http://127.0.0.1:9200/_cat/indices/?v"|grep ${i}-${DATE_MONTH_AGO} if [ $? == 0 ];then curl -XDELETE "http://127.0.0.1:9200/${i}-${DATE_MONTH_AGO}" echo "${i}-${DATE_MONTH_AGO}索引刪除成功!" else echo "${i}-${DATE_MONTH_AGO}索引不存在!" fi done #--------------快照數據作壓縮處理-------------- cd ${NFS_DIR} tar czvf ${DATE_YESTERDAY}.tgz ${DATE_YESTERDAY} rm -rf ${DATE_YESTERDAY} cd - echo "結束時間:`date +%Y-%m-%d_%H:%m:%S`"
參考:官方文檔url