你不会是程序猿吧?

请教关于ES索引自动发现的逻辑

Elasticsearch | 作者 wangxinrong | 发布于2020年03月23日 | 阅读数:1499

背景:
现有的es集群中有几个索引很大,数据放在集群中的一组节点上。我想分出来单独放一个新集群,但又不想按常规方式新建集群,迁移数据再把原集群节点下线掉,因为没有足够服务器做腾挪并且用时太长。
 
我做了下面的测试:
1.新建测试集群clusterA、clusterB,clusterA有数据节点nodeA1,nodeA2。
2.在clusterA上新建索引indexA1,indexA2。
3.指定index.routing.allocation.include._name:"nodeA1,nodeA2",让两个索引的数据只分配到这两个节点。
4.关闭indexA2。即indexA1为打开状态,indexA2为关闭状态。
5.将nodeA1,nodeA2节点master信息改为clusterB的,重启节点。
6.***此时clusterB添加上了nodeA1,nodeA2,并且自动发现了打开状态的indexA1和关闭状态的indexA2,indexA2打开后可正常使用。我想要的目的已经达到。
7.***此时clusterA上的indexA1、indexA2信息仍然存在,并且状态为red不可用。
8-1.如果同样方法把nodeA1,nodeA2从clusterB改回clusterA,则clusterA上的索引恢复正常,clusterB上的索引变为red。
8-2.***如果我先将clusterA上的indexA1、indexA2删除,然后再用同样方法把nodeA1,nodeA2从B集群改回A集群,此时并没有自动发现indexA1、indexA2,而是节点上的indexA1、indexA2数据被删除!
 
结论:
1.可以通过直接把节点从A集群改到B集群的方式,连节点带数据一起迁到新集群。
2.如果相同id的索引已经在新集群中出现过并且被删除,则使用该方式会导致数据被删除,比较危险。
 
疑问:
当新加入的节点数据目录不为空时,它上面的索引自动发现的逻辑是怎样在的。用我测试的这种方式迁移数据操作是否规范,是否存在问题,例如我刚发现的数据被删除的情况,和一些其他问题。
 
已邀请:

locatelli

赞同来自: byx313

这就是dangling indices。导入dangling indices是best effort,所以不应该作为常规手段。
 
https://www.elastic.co/guide/e ... .html

byx313 - BLOG:https://www.jianshu.com/u/43fd06f9589c

赞同来自:

8-2 的说法,上去机器看,数据目录以及文件夹应该都还在吧?因为对于clusterA而言nodeA1、nodeA2是下线的,删除动作应该是失败的吧?

要回复问题请先登录注册