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