Elasticsearch索引备份与清理
一、背景
1.我們ES節點個數有限,而環境中日志量又非常龐大,久而久之ES的性能便會下降,所以要對以前的索引做定時清理。
2.ES副本提供了高可靠性,它們讓你可以容忍零星的節點丟失而不會中斷服務。但是,副本并不提供對災難性故障的保護。對這種情況,我們需要的是對集群真正的備份。
二、API
使用 snapshot API對集群做備份,一般有兩種方案:
1.增量備份:是默認的備份方案,即做快照時不指定索引,第一個快照會是一個數據的完整拷貝,后續的快照會保留的是已存快照和新數據之間的差異。
2.備份指定索引:某些日志并不需要長期保存,所以只對我們感興趣的索引做快照,一定程度上也能節省磁盤空間。
三、使用方法
本案例是針對指定索引進行備份
1.創建倉庫
(1) 掛載NFS共享存儲
$ df -hT
文件系統 類型 容量 已用 可用 已用% 掛載點
172.16.244.245:/logs/bjbpe01-es nfs 2.0T 1.3G 2.0T 1% /data/backup
注意:共享文件系統路徑必須確保集群所有節點都可以訪問到。所以我們三個節點都掛載同一個目錄。
(2) ES配置
集群每個節點elasticsearch.yml配置文件中添加如下配置,然后重啟服務。
path.repo: /data/backup
(3) 部署共享文件系統倉庫
#創建倉庫目錄 $ 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方式提交,例如我們要將限流都改為每秒60mb
$ 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"} }'2.備份指定索引
$ 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" 指定要做快照的索引3.刪除指定索引
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這里提供一個簡單的腳本,用于備份昨天的數據并清理一個月前的數據
#!/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} ]];thenmkdir -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 ]];thenecho "${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 ]];thenecho "${i}-${DATE_YESTERDAY}快照創建成功!" fi #刪除一個月前數據 curl -XGET "http://127.0.0.1:9200/_cat/indices/?v"|grep ${i}-${DATE_MONTH_AGO} if [ $? == 0 ];thencurl -XDELETE "http://127.0.0.1:9200/${i}-${DATE_MONTH_AGO}"echo "${i}-${DATE_MONTH_AGO}索引刪除成功!" elseecho "${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`"參考:官方文檔
轉載于:https://blog.51cto.com/fengjicheng/2360344
總結
以上是生活随笔為你收集整理的Elasticsearch索引备份与清理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一加11概念机正式发布!这是全球首款主动
- 下一篇: 联想发布新款 ThinkCentre T