在本文中,我们将研究以下主题:
答案: 高可用性是指集群在面临某些故障时仍能保持操作能力。例如,集群可以检测到主分片失败并在无需外部手动干预的情况下将副本提升为主分片。
答案: Redis-Cluster可以迅速了解主分片何时失败,并且可以将其副本晋升为新主分片。
答案: 以下是脑裂情况的演示方式:
步骤#1: 想象一下,我们有一个具有三个主分片和每个主分片一个副本的Redis-Cluster。总体而言,我们的Redis集群是一个六成员的集群,其中有三个主分片和三个副本。进一步想象,网络分区已经发生,即左侧的组将无法与右侧的组中的分片通信。
现在,两个集群组都认为它们处于脱机状态,两者都将触发任何主分片的故障转移,导致左侧具有所有主分片,右侧也将具有所有主分片。
步骤#2: 两侧认为它们具有所有主分片,将继续接收修改数据的客户端请求。这是一个问题,因为也许客户端A在左侧将键foo的值设置为bar,但客户端B在右侧将相同键的值设置为baz。
步骤#3: 当网络分区被删除并且分片尝试重新连接时,我们将会有冲突,因为我们有两个保存不同数据的分片,声称是主分片,我们不会知道哪些数据是有效的。这称为脑裂情况,在分布式系统的世界中是一个非常常见的问题。
答案: 在集群中保持奇数个主分片和每个主分片两个副本。以下是解决此问题的详细解决方案:
受任何客户端写入请求。
让我们来看看下面的集群:
现在,假设发生网络分割,如下所示:
在这里,左侧组(节点集合)处于少数,因此它不会尝试触发故障转移,并将停止接受任何客户端写入请求。
右侧组(节点集合)处于多数,因此它具有触发任何主分片故障转移的权限和能力。