客户需要将云上ES中的数据恢复到本地集群,但是恢复到本地后,索引分片显示未分片状态,数据不可用。如下图所示:
那么本文将讲解如何解决此类数据恢复的问题,这里以客户实际案例为环境:ES6.4.3
1,搭建一个3个节点的集群,ES6.4.3
2,将用户云上集群的快照文件打包上传到自己的COS桶
3,在自建集群上安装6.4.3COS插件,并执行COS恢复
4,解决数据恢复过程中遇到的分片分配的问题
在前面的四步中,我们重点讲最后一步数据如何解决分片的问题,其它三步可以参考本博文中关于COS的博文内容。
在快照在本地恢复后,查看索引状态,显示所有分片未分片,通过GET _cluster/allocation/explain 查看分片为何报错?
我们可以发现以下原因:
那么知道了原因,我们就来在本地集群改一下索引分片策略,我们针对索引取消分片策略:如下图:
然后,我们再来看此索引分片的效果,结果无效
那么取消本地集群的索引分片设置,分片还是无法自动恢复激活状态。那么我们看一下官方介绍:通过忽略以下方法来进行恢复看看
然后结果还是显示未分片,还是不行。那怎么办呢?用户催得很。再次查阅官方文档,终于得到如下信息:
那么以上得意思是:
跨集群恢复快照时,如果源集群有设置分片过滤规则,新得目标集群也要有相应得分片设置。否则,索引分片将无法正常运行。
因此知道原因了,我马上跟用户联系,看用户集群是否有特殊配置,比如是否配置了冷热集群、磁盘是否选择SSD,经过沟通,用户集群的配置非冷热集群,但是磁盘属性为SSD。
因此,我们再找一个索引看看其设置,是否设置分片过滤规则
那么这个设置是怎么来得呢?是腾讯云通过模板为那些配置了SSD磁盘的用户默认设置的。因此问题就出在这里。那么到底如何解决这个问题呢?
我们需要将本地集群的磁盘属性标记为HOT属性,同时设置索引分片过滤原则。那么我去本地集群改一下集群属性:
通过es配置文件更改如下配置,并重启集群
然后再次执行数据恢复并查看索引分片恢复状态:索引分配成功
果然,数据未分配,就是跟集群的分片过滤设置以及跨级群快照恢复的注意事项,那么到此为止,问题得到有效解决。将方案同步用户,用户问题也迎刃而解。特发时间记录这次故障的解决过程
本节以一个实际列子讲到如何将一个COS快照恢复到本地,以及重点讲了如何将数据从未分片更改为正常激活状态,保证用户服务快速可用的过程。整个过程需要重点关注:
1,explain API 的使用,expalin API每次只会对集群故障的一个索引信息进行输出。解决完这个后,再解决另外的索引问题。
2,需要关注本次需要参考的文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/shard-allocation-filtering.html https://www.elastic.co/guide/en/elasticsearch/reference/7.2/modules-snapshots.html
3,自定义集群COS插件如果是低版本比如6.0.0的安装直接再es plungins 目录下新建文件夹,然后将插件包上传到plugins目录,重启ES服务即可,与高版本COS插件安装不同。
4,COS插件与ES插件的版本需要一致,无论是云上集群还是自建集群。都要求版本一致。否则会因为版本问题而导致数据恢复异常。
5,ES快照的原理是会将源集群的索引mapping、Settings这些信息全部执行文件拷贝。因此如果目标集群规则设置不准确的话,也会到导致用户ES集群的数据恢复失败。
那么以上,就是本次数据恢复的总结。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。