【问题标题】:ActiveMQ Artemis. Reliable cluster with synchronous replicationActiveMQ 阿尔忒弥斯。具有同步复制的可靠集群
【发布时间】:2020-07-21 16:20:55
【问题描述】:

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

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

我尝试了以下配置:

  1. 主+从+从+复制。

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

  1. 主+从+从+Pinger

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

  1. 3 对实时/备份节点。

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

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

我应该如何构建集群来解决这些问题?

【问题讨论】:

    标签: activemq-artemis


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答!这就是我需要的!请提供有关如何构建分布式共享存储的文章/文档/成功案例。抱歉,我在 google 中找不到信息。我将创建一个新问题,我将在其中描述详细要求
    • 您的共享存储需要 SAN 或 NAS(例如 NFS)。代理配置详情在the ActiveMQ Artemis HA documentation
    • @JustinBertram,我正在查看softwaremill.com/mqperf 的最新性能测试,但不明白为什么不使用主动-主动以及为什么复制是同步的。文档状态:“并置(实时和备份)”,正如您提到的复制是异步的。而且我的印象是“但是,它将等待两个操作完成”是不正确的。当我杀死一个活动节点时,备份并没有那里的所有消息(这很好),当“活动”节点再次出现时,消息会保留在那里。
    • @la00,你真的应该问一个新问题而不是评论这个问题(尽管我会更新我的答案以阐明同步与异步复制)。
    • @JustinBertram 抱歉。感谢您的更新,从文档中我认为该功能已经到位。与 Kafka 的比较似乎不公平,因为它可能只保证一个节点收到消息,在大多数情况下它是可以的(+ 性能)。同时,我将尝试为我的用例做一个,即 3 个节点,与客户端 HA 位于同一位置。
    猜你喜欢
    • 2019-05-05
    • 2014-04-20
    • 2016-08-23
    • 1970-01-01
    • 2022-11-28
    • 2018-07-18
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    相关资源
    最近更新 更多