跳至主要内容
版本:4.0

集群和 Khepri

当 RabbitMQ 节点集群时,它们会调用元数据存储后端来创建或扩展其集群。 Mnesia 和 Khepri 都是这种情况。

因此,形成或扩展基于 Khepri 的 RabbitMQ 集群的方式与 Mnesia 相同。

rabbit@host-5rabbit@host-4rabbit@host-3rabbit@host-2rabbit@host-1
RabbitMQ 集群发生在元数据存储级别

创建集群

您可以使用常规方法创建集群

有关完整描述,请参阅集群指南

以下是一个使用 CLI 的示例

rabbitmqctl join_cluster rabbit@remote-host

从集群中移除节点

与集群形成一样,可以使用常规方法从集群中移除节点。

以下是一个使用 CLI 工具的示例

# Stop RabbitMQ without stopping the runtime (its OS process).
rabbitmqctl stop_app

# Reset it.
rabbitmqctl reset

# Restart the node as a blank one.
rabbitmqctl start_app

何时启用 Khepri?

可以在创建集群之前或之后启用 Khepri。

启用 Khepri 后,第一步是将集群视图从 Mnesia 同步到 Khepri(如果 Khepri 在创建集群后启用)。

注意事项

由于使用了 Raft 共识算法,所有涉及更新元数据存储的操作(有时甚至查询)都需要一定数量的节点可用。

rabbit@host-5rabbit@host-4rabbit@host-3rabbit@host-2rabbit@host-1
更新存储和集群更改需要法定人数

这对 Khepri 以及其他基于 Raft 的功能(即法定人数队列)都是如此。

重新启动集群成员

重新启动或停止集群成员时,剩余的节点可能会失去其法定人数。 这可能会影响启动节点的能力。

例如,在一个包含 5 个节点的集群中,所有节点都被停止,则前两个启动的节点将在第三个节点启动之前等待,然后再完成引导并开始处理消息。 这是因为元数据存储在此示例中至少需要 3 个节点才能选举一个领导者并完成初始化过程。 在此期间,前两个节点会等待,如果第三个节点没有出现,它们可能会超时。

添加或移除集群成员

同样,必须存在一个 Raft 领导者,因此一定数量的节点才能验证和提交对集群成员资格的任何更改,无论成员是添加还是移除。 同样,如果未满足该条件,操作将超时。

以下是一个节点加入一个包含 4 个节点的集群的示例,其中 3 个节点已停止

rabbitmqctl -n rabbit@host-5 join_cluster rabbit@host-4

# => Error:
# => Khepri has timed out on node rabbit@host-5.
# => Khepri cluster could be in minority.
© 2024 RabbitMQ. All rights reserved.