ES中文社区中,有如下问题:
脑补一下,如果你遇到上述问题,你一般怎么解决?
上述问题涉及到集群备份、索引数据备份、数据迁移、数据恢复等问题,而数据备份和恢复又分为:
该方案适用于
:集群整体备份与迁移,包括:全量、增量贝恩和恢复。
该方案适用于
:索引层面迁移数据或Mapping,支持:analyzer/Mapping/data的迁移操作。
相比于:reindex跨集群操作,elasticdump无需在ES集群的配置文件elasteicsearch.yml中设置授权迁移访问地址(白名单)。
该方案适用于
:本地索引更新Mapping实现索引层面迁移,或者跨集群的索引迁移。
缺点:如前所述,跨集群迁移需要elasticsearch.yml中加上ip白名单。
官方文档指出:你不能仅通过获取集群所有节点的数据目录副本来备份Elasticsearch集群。 Elasticsearch可能在运行时对其数据目录的内容进行更改; 复制其数据目录不能达到捕获其内容的一致快照的预期。
如果尝试通过拷贝文件备份还原集群,将会导致失败,会报文件损坏或丢失文件的错误。 或者,看似成功了,但却丢失了一些数据。
备份集群
的唯一可靠方法是使用快照和还原功能。
增量
创建的。这意味着,当创建索引快照时,Elasticsearch避免复制任何已存储在存储库中的数据作为同一索引的早期快照的一部分。因此,可以非常频繁
地为集群创建快照。以下操作在windows10单节点集群环境ES7.2 Kibana7.2上执行,linux原理一致。
1path.repo: ["D:\\install\\elasticsearch-7.2.0-windows-x86_64\\elasticsearch-7.2.0\\backup"]
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}
步骤2.1:全量备份——拍摄集群快照 想象成拍照的点击确认的那一刻。
1PUT /_snapshot/my_backup/snapshot_cluster?wait_for_completion=true
执行返回结果核心包括:
1快照索引信息
2快照执行起始时间、持续时间
3成功、失败分片数等
步骤2.2:按需备份——拍摄索引快照
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 非串行执行,可以按需选择执行即可。
为验证效果,我们先执行了删除索引操作。
1DELETE hamlet_*
2POST /_snapshot/my_backup/snapshot_hamlet_index/_restore
执行成功后返回:
1{
2 "accepted" : true
3}
为验证效果,我们先执行了 DELETE * 删除全部索引(实际线上环境注意规避风险)
1POST /_snapshot/my_backup/snapshot_cluster/_restore
1GET /_snapshot/_all
1GET /_snapshot/my_backup/snapshot_hamlet_index/_status
1DELETE /_snapshot/my_backup/snapshot_hamlet_index
同mysql dump功能,严格讲elasticdump有导入、导出数据的功能。
背景:
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
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
第一:建立共享文件系统:如NFS共享
,确定每一个节点挂载到指定路径,才能创建快照存储库。
第二:在所有的主节点、数据节点都要配置相同的path.repo。
会报错如下: 英文reason里面已经给出解决方案。
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 ],
本文依然比较基础,实战出真知。
针对开头问题,请思考。
本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!