2024-05-02
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/6398266807

回答

一、保证足够的容错性和高可用性

Redis Cluster 的设计目标就是保证 Redis 集群中即使部分节点失败的情况下仍然能保证整个集群的稳定运行。如果只有两个主节点,一旦其中一个主节点失败,那么整个集群的压力就全部集中到一个节点上了,而该节点可能因为无法承担全部的数据和请求而导致奔溃。至少三个主节点,一个主节点失败,其余主节点依然可以通过互相协作来继续提供服务。

二、选举和决策的一致性

在 Redis Cluster 中,主节点使用 Raft 算法进行故障检测和 Master 选举。而Raft 算法要求多数节点存活来保持集群状态的一致性和决策的有效性,即新 Master 的选举需要大于半数的集群 Master 节点同意才能选举成功。如果整个集群只有两个节点,其中一个挂了,另外一个主节点则无法根据协议进行决策,也就会因为无法选举新的 Master 节点导致无法实现故障转移了。

关于 Redis Cluster 选举请参考:在 Redis Cluster 中,如果一个主机点挂掉了,是如何完成选举的?

三、脑裂现象

在分布式系统中,“脑裂”是指集群内的节点由于网络分区被分成互不通信的两个子集,每个子集都可能认为自己是有效的集群而独立操作,这会导致数据不一致。如果只有两个主节点,如果产生了脑裂则每个子集都无法决策。而至少有三个主机节点,即使一个主节点因为网络问题而与其他两个子节点隔离,其他两个子节点仍然可以保证集群的运行。

关于脑裂请参考:什么是脑裂?怎么解决