1. 程式人生 > >Elasticsearch叢集的備份與恢復

Elasticsearch叢集的備份與恢復

0x00 NFS準備

在ES叢集上做一個NFS,並掛載:

[[email protected] ~]# yum install nfs-utils*
[[email protected] ~]# vi /etc/exports

輸入叢集的IP地址,例如:

192.168.1.2(rw)
192.168.1.3(rw)
192.168.1.4(rw)

儲存退出,並啟動NFS服務

[[email protected] ~]# service nfs start
[[email protected] ~]# service rpcgissd start
[[email protected]
~]# service rpcbind start

掛載NFS

[[email protected] ~]# mount elasticsearch.master:/data/es/es_backup /data/es/es_backup

0x01 配置

在elasticsearch.master端執行:

curl -XPUT 'http://elasticsearch.master:9200/_snapshot/backup' -d '{
"type": "fs",
"settings": {
    "location": "/data/es/es_backup",
    "compress": true
  }
}'

備份操作,名字根據自己的情況修改

curl -XPUT http://elasticsearch.master:9200/_snapshot/backup/logstash-2016.01.01 -d '     
{"indices":"logstash-sec-2016.01.01",
"ignore_unavailable": "true",
"include_global_state": false }'

0x02 備份常用命令

檢視備份狀態:

curl –XGET  http://elasticsearch.master:9200/_snapshot/backup/logstash-security-2016.01.01

刪除備份

curl -XDELETE  http://elasticsearch.master:9200/_snapshot/backup/logstash-security-2016.01.01

恢復備份

curl -XPOST http://elasticsearch.master:9200/_snapshot/backup/logstash-security-2016.01.01/_restore -d ' { "indices" : "logstash-security-2016.01.01"}'

0x03 最後附備份指令碼

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 # -*- coding:UTF-8 -*- # """ 自動備份ElaticSearch """ import sys,requests import simplejson import time,os import zipfile URL="http://elasticsearch.master:9200/_snapshot/backup" BAK_DIR="/var/wd/elasticsearch_backup/data" ZIP_DIR="/var/wd/elasticsearch_backup/zip" if __name__=='__main__': date=time.strftime('%Y.%m.%d',time.localtime(time.time()-86400)) data1={"type": "fs","settings": {"location":BAK_DIR ,"compress": True}} r1=requests.post(URL,simplejson.dumps(data1)) print r1.text index='logstash-sec-'+date url=URL+'/'+index #開始備份指定INDEX data2={"indices":index,"ignore_unavailable": True,"include_global_state": False } r2=requests.post(url,simplejson.dumps(data2)) print r2.text #查詢備份狀態 r3=requests.get(url) dic=simplejson.loads(r3.text) while  (dic['snapshots'][0]['state']=='IN_PROGRESS'): print "%s Backup is IN_PROGRESS..." % index time.sleep(10) r3=requests.get(url) dic=simplejson.loads(r3.text) if dic['snapshots'][0]['state']=='SUCCESS': print '%s 備份成功' % index try: #壓縮檔案 zfile=ZIP_DIR+'/'+index+'.zip' z = zipfile.ZipFile(zfile,'w',zipfile.ZIP_DEFLATED,allowZip64=True) print "開始壓縮檔案..." for dirpath, dirnames, filenames in os.walk(BAK_DIR):  for filename in filenames:  z.write(os.path.join(dirpath,filename))  z.close() os.system('rm -rf '+BAK_DIR) #刪除原檔案目錄 print "備份結束" except Exception,e: print e print "開始刪除index: %s" % index os.system('curl -XDELETE "http://elasticsearch.master:9200/%s"' % index) else: print '%s 備份失敗' % index