跳到主要内容
版本:4.1

Khepri 如何处理故障恢复

本节介绍 Khepri 基于 Raft 的故障处理和恢复方法。

集群少数派行为

当 Mnesia 用作元数据存储后端时,RabbitMQ 提供了 网络分区恢复策略

它们的作用是在集群分裂时处理冲突解决,因为双方的节点都将继续基于不完整的集群视图写入元数据存储。一些策略通过停止分裂中集群成员较少一方(即少数派)的服务,从一开始就防止冲突。

Raft,是由 Ra 库实现的共识算法,并被仲裁队列、流队列和 Khepri 使用,仅提供一种恢复策略,该策略最类似于为 Mnesia 开发的 分区处理策略 集合中的 pause_minority 策略。

当 Khepri 成员想要更新元数据存储、需要执行跨越所有在线集群成员的查询,甚至想要更改集群成员资格时,请求都会通过该 Khepri 集群中选出的领导者副本。

如果领导者没有收到来自绝大多数成员的确认,请求将被阻止并可能超时。请注意,这是对 Raft 如何处理故障处理和恢复的非常简化的描述,但也是要理解的最重要方面。

因此,如果位于网络分裂少数派一侧的 RabbitMQ 节点想要声明交换机、队列或绑定等,如果分裂没有及时解决,请求将超时。

停止的 RabbitMQ 节点

如果超过一半的 RabbitMQ 节点当前已停止或丢失,则少数派的情况也成立:剩余的运行节点无法连接到其他节点,Raft 也无法达成共识。

行为可配置吗?

与 Mnesia 使用的网络分区恢复策略不同,Khepri 使用的策略是不可配置的:这是 Raft 算法的设计。

正因如此,可以更容易地推断 RabbitMQ 的行为并了解可能发生的情况。

节点故障和恢复

当曾经托管 Khepri 领导者副本的节点发生故障时,将使用 Raft 领导者选举语义选择新的领导者。当托管先前领导者的节点重新加入时,它将识别到存在新的领导者,并且它使用了新的选举任期,并将降级为追随者。

当此节点关闭时在集群中提交的模式更改将从它与新领导者之间日志(更改历史)中的第一个共同点开始应用到该节点上。这对于应用程序来说是完全透明的,并且与新添加的节点如何赶上现有的 Khepri 领导者副本并没有真正的不同。

© . All rights reserved.