ActiveMQ 阿蒂米斯。具有同步复制的可靠集群

ActiveMQ Artemis. Reliable cluster with synchronous replication

我想配置具有以下预期行为的集群:

  1. 集群必须是 HA(至少 3 个节点)。
  2. 我有一些队列,其中维护处理顺序很重要。消费者总是在一个线程中读取这个队列。如果他接受了消息,那么我们就认为我们的任务完成了。
  3. 我不需要负载平衡 - 保持消息的顺序对我来说很重要。
  4. 我想避免裂脑。
  5. 如果我们有 3 个节点,那么如果其中 1 个节点发生故障,集群应该可以继续工作。

我尝试了以下配置:

  1. master + slave + slave with replication。

有效。但是没有解决脑裂问题

  1. 主+从+从+萍儿

据我了解,这并不能 100% 保证检测到网络问题。我们也可以得到裂脑。

  1. 3 对 live/backup 个节点。

这解决了脑裂问题,但我们如何避免以下情况:

  1. 生产者向队列中的组 A 发送消息(维护处理顺序很重要)
  2. A 组崩溃(所有节点的 1/3 2/6)
  3. A组日志中存储的消息
  4. 集群继续工作;
  5. 生产者向队列中的组 B 发送消息(维护处理顺序很重要)
  6. 消费者首先收到此消息;我们不支持所需的消息顺序。

如何搭建集群来解决这些问题?

您无法使用复制实现您想要的行为。您需要在节点之间使用 shared store。如果你必须使用3个节点那么我推荐master + slave + slave。否则我会推荐 master + slave。

此外,就其价值而言,复制在代理内不是同步的。它是异步和非阻塞的。然而,它仍然是可靠的。例如,当代理配置为具有复制的 HA 并且它从客户端接收到持久消息时,它将将该消息保存到磁盘 并且 将它同时发送到复制的备份而不会阻塞。但是,它将等待 both 操作完成,然后再响应客户端它已收到消息。这比在内部使用同步架构允许更大的消息吞吐量,尽管整个过程看起来与外部客户端同步。

此外,值得注意的是,正在进行的工作是改变复制的工作方式,以使其更强大地防止裂脑,并启用适合生产使用的单个主从对。