跳至主内容
版本:4.2

集群与 Khepri

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

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

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

形成集群的方式

使用 Khepri,可以使用常规方法形成集群

有关完整说明,请参阅集群指南

以下是使用 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 领导者,因此需要有法定数量的节点来验证和提交任何集群成员的更改,无论成员是添加还是移除。同样,如果条件不满足,操作将超时。

以下是一个节点加入一个有 3 个已停止节点(总共 4 个节点)的集群的示例

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.
© . This site is unofficial and not affiliated with VMware.