ActiveMQ 阿蒂米斯。具有同步复制的可靠集群
ActiveMQ Artemis. Reliable cluster with synchronous replication
我想配置具有以下预期行为的集群:
- 集群必须是 HA(至少 3 个节点)。
- 我有一些队列,其中维护处理顺序很重要。消费者总是在一个线程中读取这个队列。如果他接受了消息,那么我们就认为我们的任务完成了。
- 我不需要负载平衡 - 保持消息的顺序对我来说很重要。
- 我想避免裂脑。
- 如果我们有 3 个节点,那么如果其中 1 个节点发生故障,集群应该可以继续工作。
我尝试了以下配置:
- master + slave + slave with replication。
有效。但是没有解决脑裂问题
- 主+从+从+萍儿
据我了解,这并不能 100% 保证检测到网络问题。我们也可以得到裂脑。
- 3 对 live/backup 个节点。
这解决了脑裂问题,但我们如何避免以下情况:
- 生产者向队列中的组 A 发送消息(维护处理顺序很重要)
- A 组崩溃(所有节点的 1/3 2/6)
- A组日志中存储的消息
- 集群继续工作;
- 生产者向队列中的组 B 发送消息(维护处理顺序很重要)
- 消费者首先收到此消息;我们不支持所需的消息顺序。
如何搭建集群来解决这些问题?
您无法使用复制实现您想要的行为。您需要在节点之间使用 shared store。如果你必须使用3个节点那么我推荐master + slave + slave。否则我会推荐 master + slave。
此外,就其价值而言,复制在代理内不是同步的。它是异步和非阻塞的。然而,它仍然是可靠的。例如,当代理配置为具有复制的 HA 并且它从客户端接收到持久消息时,它将将该消息保存到磁盘 并且 将它同时发送到复制的备份而不会阻塞。但是,它将等待 both 操作完成,然后再响应客户端它已收到消息。这比在内部使用同步架构允许更大的消息吞吐量,尽管整个过程看起来与外部客户端同步。
此外,值得注意的是,正在进行的工作是改变复制的工作方式,以使其更强大地防止裂脑,并启用适合生产使用的单个主从对。
我想配置具有以下预期行为的集群:
- 集群必须是 HA(至少 3 个节点)。
- 我有一些队列,其中维护处理顺序很重要。消费者总是在一个线程中读取这个队列。如果他接受了消息,那么我们就认为我们的任务完成了。
- 我不需要负载平衡 - 保持消息的顺序对我来说很重要。
- 我想避免裂脑。
- 如果我们有 3 个节点,那么如果其中 1 个节点发生故障,集群应该可以继续工作。
我尝试了以下配置:
- master + slave + slave with replication。
有效。但是没有解决脑裂问题
- 主+从+从+萍儿
据我了解,这并不能 100% 保证检测到网络问题。我们也可以得到裂脑。
- 3 对 live/backup 个节点。
这解决了脑裂问题,但我们如何避免以下情况:
- 生产者向队列中的组 A 发送消息(维护处理顺序很重要)
- A 组崩溃(所有节点的 1/3 2/6)
- A组日志中存储的消息
- 集群继续工作;
- 生产者向队列中的组 B 发送消息(维护处理顺序很重要)
- 消费者首先收到此消息;我们不支持所需的消息顺序。
如何搭建集群来解决这些问题?
您无法使用复制实现您想要的行为。您需要在节点之间使用 shared store。如果你必须使用3个节点那么我推荐master + slave + slave。否则我会推荐 master + slave。
此外,就其价值而言,复制在代理内不是同步的。它是异步和非阻塞的。然而,它仍然是可靠的。例如,当代理配置为具有复制的 HA 并且它从客户端接收到持久消息时,它将将该消息保存到磁盘 并且 将它同时发送到复制的备份而不会阻塞。但是,它将等待 both 操作完成,然后再响应客户端它已收到消息。这比在内部使用同步架构允许更大的消息吞吐量,尽管整个过程看起来与外部客户端同步。
此外,值得注意的是,正在进行的工作是改变复制的工作方式,以使其更强大地防止裂脑,并启用适合生产使用的单个主从对。