悟空,拿我的打狗棒来

es集群某个数据节点宕机,然后又恢复了,会发生什么?

Elasticsearch | 作者 sec_master | 发布于2019年10月10日 | 阅读数:15407

es用了一段时间,一直有个疑问,假设:一个集群有3个节点,都是master.node和data.node,建了一个索引,3个主分片、2个副本。(这样每个节点上有1个主分片、2个副本分片) 这个时候一个节点挂掉了。
问题1:那么另外两个节点会恢复缺失的1个主分片、2个副本分片,这2个节点是怎么分配的?
问题2:上面恢复之后(集群又有新的数据写入),挂掉的那个节点又启动了、重新加入进群了,那么这个重新启动的节点上面的旧的分片和副本,会咋样?集群还会分片新的副本和分片到这个节点上?

谢谢!
已邀请:

doom

赞同来自: sec_master

重新启动的节点上面的旧的分片和副本,会变成副本分片。然后与主分片同步;
这个问题需要清楚一下几点
1. 3个节点,3个主分片、2个副本,默认情况下,每一个节点都有一个主分片和2个副本分片;例如分布情况如下:
(s0,r1_1,r2_2),
(s1,r2_1,r0_2),
(s2,r0_1,r1_2)
s代表主分片,后面的数字代表分片的序号;
r代表副本分片;2个数字的含义分布为,分片的序号和副本的序号;eg:r2_1代表s2的第一副本,r0_2代表s0的第二副本
2. 需要断掉以后,例如(s1,r2_1,r0_2)这个节点断掉;如果这个节点是主节点,那需要先选举主节点;不是就不选;
然后主节点,会把副本分片提升为主分片,丢失s1。 会把其他节点如(s0,r1_1,r2_2),r1_1这个副本分片提升为s1,;目前这个节点上2个主分片s0,s1; 丢失副本r2_1,同样也会把r2_2,提升为r2_1。丢失r0_2,这个不管。数据还是不丢失的。3. 重新启动这个节点。这个节点会加入集群,然后就是分片同步;补全丢失的分片;(r0_2,r1_2,r2_2),没有主分片;以前的数据也不会删除,只做数据上的同步
匿名用户

匿名用户

赞同来自: sec_master

这个问题还是自己试验一遍最好了。
 
 

chencandong

赞同来自:

当挂掉1台主机的时候,另外两台主机会把挂掉主机的主分片的副本提升为主分片,此时集群的主分片是完整,但是存在副本不完整,此时集群的状态为yellow状态,一段时间之后(支持配置),挂掉的主机没有恢复加入到集群,es集群会认为踢掉的节点不会在恢复,这个时候才会生成集群缺失的副本,将集群恢复为green,因此经常存在一种情况就是集群副本在恢复的时候节点又加回来的情况,此时es会对比两个副本的数据,以数据完整度高的为主,再根据reblance配置重新rebanlance

sec_master - 中国信息安全老弟

赞同来自:

经过测试,关掉一个节点后,集群的副本会升级为主分片,此时集群主分片是正常的、副本缺失,状态为yellow。待到重启关掉的节点后,该节点会自动加入该集群,上面主要是副本、没有主分片给它。对于他的副本是咋来的,这个时候我就验证不了,应该是旧的基于分片、副本更新、升级过来的。感觉社区,第一次发帖!下面是两个图(关掉一个节点、重新启动)合成一个图的测试过程

es测试.png

 

sec_master - 中国信息安全老弟

赞同来自:

经过总结分析,一个集群中挂掉了一个节点,集群会不会变成黄色,取决于副本的数量,如果副本数>=(集群数-1),则集群会变黄;否则集群会变绿,因为上面的那种情况会丢失副本,同一个节点上的分片、副本都不会重复,这就涉及节点、分片、副本的规划问题,如果只有3个节点,创建的index有3个副本,则集群不可能变为green,因为多出来的一套副本,没有节点可以承担,如下图:

副本问题.png

不过一般情况下,一个es集群,副本数(一般2个足够了)的量级跟节点数(一般很大)的量级,肯定会差很远,也不会说导致上面的问题。

要回复问题请先登录注册