es用了一段时间,一直有个疑问,假设:一个集群有3个节点,都是master.node和data.node,建了一个索引,3个主分片、2个副本。(这样每个节点上有1个主分片、2个副本分片) 这个时候一个节点挂掉了。
问题1:那么另外两个节点会恢复缺失的1个主分片、2个副本分片,这2个节点是怎么分配的?
问题2:上面恢复之后(集群又有新的数据写入),挂掉的那个节点又启动了、重新加入进群了,那么这个重新启动的节点上面的旧的分片和副本,会咋样?集群还会分片新的副本和分片到这个节点上?
谢谢!
问题1:那么另外两个节点会恢复缺失的1个主分片、2个副本分片,这2个节点是怎么分配的?
问题2:上面恢复之后(集群又有新的数据写入),挂掉的那个节点又启动了、重新加入进群了,那么这个重新启动的节点上面的旧的分片和副本,会咋样?集群还会分片新的副本和分片到这个节点上?
谢谢!
5 个回复
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
赞同来自:
sec_master - 中国信息安全老弟
赞同来自:
sec_master - 中国信息安全老弟
赞同来自:
不过一般情况下,一个es集群,副本数(一般2个足够了)的量级跟节点数(一般很大)的量级,肯定会差很远,也不会说导致上面的问题。