Elasticsearch备份

常见备份方案

使用es的快照和恢复功能进行备份和恢复
适用于:集群整体备份与迁移。包括:全量、增量备份和恢复

使用elasticdump迁移mapping数据
适用于:索引层面迁移数据或mapping,支持:analyzer/mapping/data的迁移操作
比较:reindex跨集群操作,elasticdump无需在es集群的配置文件中设置授权迁移访问地址(白名单)

reindex实行集群内部或跨集群同步数据
适用于:本地索引更新Mapping实现索引层面迁移,或者跨集群的索引迁移
缺点:跨集群迁移需要elasticsearch.yml中加上ip白名单

问题:
能否直接拷贝文件实现集群备份?
不能仅通过获取集群所有节点的数据目录副本来备份elasticsearch集群。es可能在运行时对其数据目录的内容进行更改;复制器数据目录不能达到捕获其内容的一致快照的预期。
如果尝试通过拷贝文件备份还原集群,将会导致失败,会报文件损坏或丢失文件的错误。或者,看似成功了,但却丢失了一些数据。备份集群的唯一可靠方法就是使用快照和还原功能。

es的快照和还原功能

1.注册快照存储库。在elasticsearch中添加配置path.repo: /data/backup ##任意指定路径。(如果是集群,则每一个数据节点都得配置此路径,并且,这个目录对于每一个数据节点都要有共享读写权限)

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/data/backup"
  }
}

查看仓库信息

GET _snapshot/my_backup

2.拍摄快照
PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true #wait_for_completion参数指定在快照初始化后立即返回请求还是等待快照完成。

{
  "indices": "index_1,index_2",    #指定快照index
  "ignore_unavailable": true,      #快照创建期间不存在的index会被忽略
  "include_global_state": false,   #防止将集群全局状态存储为快照的一部分
  "metadata": {                    #设置元数据添加到快照中
    "taken_by": "chen",          #可设置该快照由谁进行创建
    "taken_because": "backup before upgrading" 
  }
}

快照名称可以使用日期表达式自动导出,类似于创建新index。注意:特殊字符需要进行URI编码
例如snap-2020.05.06可以使用如下命名进行创建

#PUT /_snapshot/my_backup/
PUT /_snapshot/my_backup/%3Csnapshot-%7Bnow%2Fd%7D%3E

索引快照过程是增量的(所以需要进行增量备份时,在进行一次快照即可)。
在制作索引快照的过程中,es分析已存储在存储库中的索引文件的列表,并仅复制自上一个快照以来创建或更改的文件,这样可以将多个快照以紧凑的形式保存在存储库中。快照过程以非阻塞方式执行,可以继续对正在快照的索引执行所有索引和搜索操作。但是,快照表示创建快照时索引的时间点视图,因此在快照过程开始后不会添加到索引的记录。对于已启动且当前为重定位的主要分片,快照过程将立即启动,
除了创建每个索引的副本之外,快照过程还可以存储全局集群元数据,其中包括持久性集群设置和模板。集群中任何时间都只能执行一个快照过程,在创建特定分配的快照时,该分片无法移动到另一个节点,这可能会干扰重新平衡过程和分配筛选,快照完成后,es只能将分片移动到另一个节点(根据当时的分配过滤设置和重新平衡算法)

#查看快照状态

GET /_snapshot/my_backup/snapshot_2

状态可以有如下状态

IN_PROGRESS                       快照当前正在运行。
SUCCESS                           快照完成,所有分片已成功存储。
FAILED                            快照以错误结束,无法存储任何数据。
PARTIAL                           全局群集状态已存储,但没有成功存储至少一个分片的数据。failure在这种情况下,该部分应包含有关未正确处理的分片的更多详细信息。
INCOMPATIBLE                      快照是使用旧版本的Elasticsearch创建的,因此与集群的当前版本不兼容。

3.恢复快照
先进行索引删除操作 DELETE test-*
恢复操作 POST /_snapshot/my_backup/snapshot_2/_restore

elasticdump迁移

同mysql dump功能,elasticdump有导入、到处数据的功能
背景:
迁移源集群:10.1.1.2
迁移目的集群: 10.1.1.3

elasticdump \
  --input=http://10.1.1.2:9200/my_index\
  --output=http://10.1.1.3:9200/my_index\
  --type=settings     #还可为mapping、data

问题
多节点集群如何配置才能实现快照?
建立共享文件系统,例如nfs,确定每一个节点挂载到指定路径,才能创建快照存储库
在所有的主节点、数据节点都要配置相同的path.repo

你可能感兴趣的:(elasticsearch)