使用python增量备份elasticsearch索引

使用python增量备份elasticsearch索引

一、elasticsearch仓库和快照

这里就真不多介绍关于elasticsearch的知识了,直接去看官网吧,直奔备份主题!
官方提供了elasticsearch的备份方案,地址:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/modules-snapshots.html#_repositories

1.1仓库和快照

快照和恢复模块需要创建一个存储快照单独存放索引位置的仓库,在初始的es版本只支持共享文件系统,现已支持各种方式的存储方式了,废话不多说,下面开始实践

二、创建一个仓库

官方提供了一个很简单方式,一个PUT请求就搞定,如下:

  1. PUT /_snapshot/my_backup { "type": "fs", "settings": { ... repository specific settings ... } }

在这里,简单方便的使用curl就可完成此需求,不过有个前提配置,需要在配置文件中加入path.repo,注此配置要在所有es集群节点都加上,否则不生效
配置如下

  1. path.repo: ["/backup/es-backup/es-repo", "/backup/es-backup/es-repo"]#前面的为nfs服务端挂载路径,后面为本地挂载点
  1. curl -XPUT 10.0.0.2:9200/_snapshot/backup -d '{"type":"fs","settings":{"location":"/ROOT/es-backup/es-repo"}}'

查看仓库的创建情况:

  1. curl 10.0.0.2:9200/_snapshot/_all

关于仓库的其他操作去看官网都有提示,关于nfs的配置就更不说了

三、python脚本备份es

  1. #-*- coding:utf-8 -*-
  2. # Author:chuck
  3. import requests
  4. import datetime,time,os
  5. import json
  6. import zipfile
  7. URL="http://10.0.0.2:9200/_snapshot/zhibo-backup"
  8. REPO_DIR="/backup/es-backup/es-repo-"
  9. ZIP_DIR="/backup/es-backup/es-zip"
  10. if __name__ == '__main__':
  11. date = time.strftime('%Y.%m.%d',time.localtime(time.time()-86400))
  12. index = 'test-zhibo'+ date
  13. url = URL + '/'+index+'?wait_for_completion=true' + '?indices=zhibo'
  14. #以json格式发送post请求,指定要备份索引名称,此处为zhibo
  15. index_json = {
  16. "indices": "zhibo", }
  17. #开始备份指定的索引
  18. rp = requests.post(url,json=index_json)
  19. print rp.text
  20. #查看备份状态
  21. rs = requests.get(url).text
  22. dic =json.loads(rs)
  23. rs_res = dic['snapshots'][0]['state']
  24. if rs_res == 'IN_PROGRESS':
  25. print "备份正在进行中"
  26. elif rs_res == 'SUCCESS':
  27. print '%s索引备份成功'%index
  28. try:
  29. #开始压缩文件
  30. zipfn = ZIP_DIR+'/'+index+'.zip'
  31. z = zipfile.ZipFile(zipfn,'w',zipfile.ZIP_DEFLATED,allowZip64=True)
  32. print '开始压缩文件'
  33. for dirpath,dirnames,filenames in os.walk(REPO_DIR):
  34. for filename in filenames:
  35. z.write(os.path.join(dirpath,filename))
  36. z.close()
  37. print '备份结束'
  38. except Exception,e:
  39. print e
  40. print "开始删除index: %s" % index
  41. rd = requests.delete(url,json=index_json)
  42. rd_res = json.loads(rd.text)['acknowledged']
  43. if rd_res:
  44. print "删除索引成功"
  45. else:
  46. print '%s备份失败'%index
  47. #恢复备份
  48. #curl -XPOST http://10.0.0.2:9200/_snapshot/backup/zhibo-2017-02-10/_restore
  49. os.system('find /ROOT/es-backup/es-zip/ -mtime +6 | xargs rm -f ')

此备份为增量备份,有关备份,删除,查看备份都在脚本中了,关于定时任务和备份策略的请自行解决

1
未经许可,不得转载,否则将受到作者追究,博主联系方式见首页右上角

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论
取消评论
代码 贴图 加粗 链接 删除线 签到