cluster-migration-barrier属性可以保证redis集群中不会出现裸奔的主节点(这个主节点没有对应的从节点),当某个主节点的
从节点挂掉裸奔后,会从其他富余的主节点分配一个从节点过来,确保每个主节点都有至少一个从节点,不至于因为主节点挂
掉而没有相应从节点替换为主节点导致集群崩溃不可用。
这里要吐槽下,网上许多的小伙伴对这个属性的介绍还是有点歧义的,譬如这位小伙伴的介绍:
按照他的描述测试如下:
首先模拟一个集群,将从节点8003移除出集群让其主节点8006裸奔(所有主节点的cluster-migration-barrier属性都已设置成2)
将8003重新加入集群,这次是作为8001的从节点,从下图可以看到虽然8001节点已经有两个从节点,但是并没有分配一个
从节点给裸奔的8006
开始并没有怀疑网上博主的描述,以为是自己哪里操作出了问题,不过查了一圈并没有发现有什么问题,于是去查看
redis.conf中关于cluster-migration-barrier的描述....
译文:只有当一个主节点至少拥有其他给定数量个处于正常工作中的从节点的时候,才会分配从节点给集群中孤立的主节点。
这个给定数量就是migration barrier。migration barrier 是1意味着一个从节点只有在其主节点另外至少还有一个正常工作的从
节点的情况下才会被分配...
所以cluster-migration-barrier属性的含义是:那些分配后仍然剩余migration barrier个从节点的主节点才会触发节点分配,
而不是分配前有migration barrier个从节点的主节点就会触发节点分配!!
验证测试如下:
新启一个8007从节点,依然分配给8001(现在8001会有三个从节点)
再次check后,发现8001将8007分配给了之前裸奔的节点8006...
总结:
1.还是不要一味的拿来主义,只有真正的实践过才能出真知。
2.cluster-migration-barrier属性的含义是:那些分配后仍然剩余migration barrier个从节点的主节点才会触发节点分配,
而不是分配前有migration barrier个从节点的主节点就会触发节点分配!!
3.经测试cluster-migration-barrier属性只须要在所有主节点的配置中设置,不须要设置从节点的配置,但是如果主节点故障,
从节点升级为主节点,它的配置并不会自动加上cluster-migration-barrier,还是须要手动去配置上去
4.cluster-migration-barrier 默认是1,生产环境建议维持默认值,这样才能最大可能的确保集群稳定,除非你不想让集群自动
触发节点分配,可以设置一个极大的值
5.如第4点,个人认为其实这个配置有点鸡肋,只要保持默认1就好了,不过知道有这么个东西并且懂得其机制也是加深了对
redis-cluster的了解,学无止境