前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >干货 | Elasitcsearch7.X集群/索引备份与恢复实战

干货 | Elasitcsearch7.X集群/索引备份与恢复实战

作者头像
铭毅天下
发布2019-11-18 15:02:24
2.7K0
发布2019-11-18 15:02:24
举报
文章被收录于专栏:铭毅天下铭毅天下

1、问题引出

ES中文社区中,有如下问题:

  • 问题1:存储数据,data目录从一个机器直接移到一台新的机器是否可以直接使用?
  • 问题2:es升级时,data目录如果在外部路径,从低版本升级到高版本时,data目录是否直接可以使用?
  • 问题3:将一个旧的es数据(400多G)迁移到新的es中的时候直接将旧es的data目录下indices文件拷贝到新es的data下(大概花了一个晚上),这种做法是否可取?

脑补一下,如果你遇到上述问题,你一般怎么解决?

2、问题分析

上述问题涉及到集群备份、索引数据备份、数据迁移、数据恢复等问题,而数据备份和恢复又分为:

  • 1、ES Mapping&Setting 基础信息备份。
  • 2、ES 全量数据备份。
  • 3、ES 增量数据备份。
  • 4、ES 数据恢复。

3、常见备份和恢复索引/集群方案

  • 方案一:使用ES的快照和恢复功能进行备份和恢复。

该方案适用于:集群整体备份与迁移,包括:全量、增量贝恩和恢复。

  • 方案二:使用elasticdump迁移Mapping和数据。

该方案适用于:索引层面迁移数据或Mapping,支持:analyzer/Mapping/data的迁移操作。

相比于:reindex跨集群操作,elasticdump无需在ES集群的配置文件elasteicsearch.yml中设置授权迁移访问地址(白名单)。

  • 方案三:使用reindex实行集群内部或跨集群同步数据。

该方案适用于:本地索引更新Mapping实现索引层面迁移,或者跨集群的索引迁移。

缺点:如前所述,跨集群迁移需要elasticsearch.yml中加上ip白名单。

4、直接拷贝文件能不能实现集群备份呢?

官方文档指出:你不能仅通过获取集群所有节点的数据目录副本来备份Elasticsearch集群。 Elasticsearch可能在运行时对其数据目录的内容进行更改; 复制其数据目录不能达到捕获其内容的一致快照的预期。

如果尝试通过拷贝文件备份还原集群,将会导致失败,会报文件损坏或丢失文件的错误。 或者,看似成功了,但却丢失了一些数据。

备份集群的唯一可靠方法是使用快照和还原功能。

5、方案一:Elasticsearch快照和还原功能

5.1 快照注意事项
  • 1、快照是从正在运行的Elasticsearch集群中获取的备份。
  • 2、您可以创建单个索引或整个群集的快照,支持本地文件存储,以及远程第三方存储库存储(包括:S3,HDFS,Azure,Google Cloud Storage等)。
  • 3、快照是增量创建的。这意味着,当创建索引快照时,Elasticsearch避免复制任何已存储在存储库中的数据作为同一索引的早期快照的一部分。因此,可以非常频繁地为集群创建快照。
  • 4、如果您的集群启用了Elasticsearch安全功能,则在备份数据时,必须授权快照API调用。
  • 5、在升级之前备份数据时,请记住,如果快照中包含与升级版本不兼容的版本中创建的索引,则可能导致升级后将无法还原快照。
  • 6、兼容列表如下: 在1.x中创建的索引快照可以恢复到2.x。 在2.x中创建的索引快照可以恢复到5.x。 在5.x中创建的索引快照可以恢复到6.x。 在6.x中创建的索引快照可以恢复到7.x。 反例:无法将在1.x中创建的索引快照还原到5.x或6.x,无法将在2.x中创建的索引快照还原到6.x或7.x,以及无法将在5.X创建的索引快照还原到7.x。
  • 7、要保证还原的集群有足够的存储容量。
5.2 快照执行步骤

以下操作在windows10单节点集群环境ES7.2 Kibana7.2上执行,linux原理一致。

5.2.1 步骤1:配置快照存储路径及注册快照存储库
  • 在elasticsearch中添加如下配置:
代码语言:javascript
复制
1path.repo: ["D:\\install\\elasticsearch-7.2.0-windows-x86_64\\elasticsearch-7.2.0\\backup"]
  • 注册快照存储库(即设置存储路径)
代码语言:javascript
复制
1PUT /_snapshot/my_backup
2{
3  "type": "fs",
4  "settings": {
5    "location": "D:\\install\\elasticsearch-7.2.0-windows-x86_64\\elasticsearch-7.2.0\\backup"
6  }
7}
5.2.2 步骤2:拍摄快照

步骤2.1:全量备份——拍摄集群快照 想象成拍照的点击确认的那一刻。

代码语言:javascript
复制
1PUT /_snapshot/my_backup/snapshot_cluster?wait_for_completion=true

执行返回结果核心包括:

代码语言:javascript
复制
1快照索引信息
2快照执行起始时间、持续时间
3成功、失败分片数等

步骤2.2:按需备份——拍摄索引快照

代码语言:javascript
复制
 1PUT /_snapshot/my_backup/snapshot_hamlet_index?wait_for_completion=true
 2{
 3  "indices": "hamlet_*",
 4  "ignore_unavailable": true,
 5  "include_global_state": false,
 6  "metadata": {
 7    "taken_by": "mingyi",
 8    "taken_because": "backup before upgrading"
 9  }
10}

步骤2.3 增量备份——同步骤2.1 假设ES有实时数据持续写入,不同时间点会生成不同的快照。

步骤2.1, 2.2, 2.3 非串行执行,可以按需选择执行即可。

5.2.3 步骤3:恢复快照
  • 步骤3.1 恢复索引快照

为验证效果,我们先执行了删除索引操作。

代码语言:javascript
复制
1DELETE hamlet_*
2POST /_snapshot/my_backup/snapshot_hamlet_index/_restore

执行成功后返回:

代码语言:javascript
复制
1{
2  "accepted" : true
3}
  • 步骤3.2 恢复集群快照

为验证效果,我们先执行了 DELETE * 删除全部索引(实际线上环境注意规避风险)

代码语言:javascript
复制
1POST /_snapshot/my_backup/snapshot_cluster/_restore
5.3 快照常见操作
  • 1、查看所有快照存储库
代码语言:javascript
复制
1GET /_snapshot/_all
  • 2、查看快照状态
代码语言:javascript
复制
1GET /_snapshot/my_backup/snapshot_hamlet_index/_status
  • 3、删除快照
代码语言:javascript
复制
1DELETE /_snapshot/my_backup/snapshot_hamlet_index

6、方案二:elasticdump迁移

同mysql dump功能,严格讲elasticdump有导入、导出数据的功能。

背景:

  • 192.168.1.1:9200 迁移源集群,
  • 192.168.3.2:9200 迁移目的集群。
6.1 迁移Setting和Mapping等
代码语言:javascript
复制
 1elasticdump \
 2  --input=http://192.168.1.1:9200/my_index \
 3  --output=http://192.168.3.2:9200/my_index \
 4  --type=analyzer
 5elasticdump \
 6  --input=http://192.168.1.1:9200/my_index \
 7  --output=http://192.168.3.2:9200/my_index \
 8  --type=settings
 9elasticdump \
10  --input=http://192.168.1.1:9200/my_index \
11  --output=http://192.168.3.2:9200/my_index \
12  --type=mapping
6.2 迁移数据
代码语言:javascript
复制
1elasticdump \
2  --input=http://192.168.1.1:9200/my_index \
3  --output=http://192.168.3.2:9200/my_index \
4  --type=data

细节参见:https://github.com/taskrabbit/elasticsearch-dump

7、最常见问题

7.1 多节点集群如何配置才能实现快照?

第一:建立共享文件系统:如NFS共享,确定每一个节点挂载到指定路径,才能创建快照存储库。

第二:在所有的主节点、数据节点都要配置相同的path.repo。

7.2 相同名称索引存在的情况下执行恢复快照?

会报错如下: 英文reason里面已经给出解决方案。

代码语言:javascript
复制
1{
2  "error": {
3    "root_cause": [
4      {
5        "type": "snapshot_restore_exception",
6        "reason": "[my_backup:snapshot_cluster/_THlX1vMQvGmwxcRCmhnlA] cannot restore index [.kibana_task_manager] because an open index with same name already exists in the cluster. Either close or delete the existing index or restore the index under a different name by providing a rename pattern and replacement name"
7      }
8    ],

8、小结

本文依然比较基础,实战出真知。

针对开头问题,请思考。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、问题引出
  • 2、问题分析
  • 3、常见备份和恢复索引/集群方案
  • 4、直接拷贝文件能不能实现集群备份呢?
  • 5、方案一:Elasticsearch快照和还原功能
    • 5.1 快照注意事项
      • 5.2 快照执行步骤
        • 5.2.1 步骤1:配置快照存储路径及注册快照存储库
        • 5.2.2 步骤2:拍摄快照
        • 5.2.3 步骤3:恢复快照
      • 5.3 快照常见操作
      • 6、方案二:elasticdump迁移
        • 6.1 迁移Setting和Mapping等
          • 6.2 迁移数据
          • 7、最常见问题
            • 7.1 多节点集群如何配置才能实现快照?
              • 7.2 相同名称索引存在的情况下执行恢复快照?
              • 8、小结
              相关产品与服务
              Elasticsearch Service
              腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档