Elasticsearch叢集的備份與恢復
阿新 • • 發佈:2018-12-25
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
|