用于群集设置的ActiveMQ数据存储

用于群集设置的ActiveMQ数据存储,activemq,Activemq,我们一直在生产中使用ActiveMQ 5.16.0版代理和单个实例。现在,我们计划使用AMQ代理集群进行HA和负载分配,并保持消息数据的一致性。目前我们只使用一个队列 HA可以通过故障转移来实现,但我们需要使用相同的数据存储还是可以分开?如果我为AMQ代理使用不同的实例,那么如何设置公共数据存储 请指导我如何为HA和负载分布设置数据存储您可以配置ActiveMQ,以便实例共享消息存储,或者它们具有单独的消息存储。如果它们共享一个消息存储,那么(本质上)代理将自动形成一个主从配置,这样只有一个代理

我们一直在生产中使用ActiveMQ 5.16.0版代理和单个实例。现在,我们计划使用AMQ代理集群进行HA和负载分配,并保持消息数据的一致性。目前我们只使用一个队列

HA可以通过故障转移来实现,但我们需要使用相同的数据存储还是可以分开?如果我为AMQ代理使用不同的实例,那么如何设置公共数据存储


请指导我如何为HA和负载分布设置数据存储

您可以配置ActiveMQ,以便实例共享消息存储,或者它们具有单独的消息存储。如果它们共享一个消息存储,那么(本质上)代理将自动形成一个主从配置,这样只有一个代理(一次)将接受来自客户端的连接,并且只有一个代理将更新存储。客户机需要在其连接URI中标识两个代理,并将连接到碰巧是主代理的代理

对于这样的共享消息存储,消息存储中的锁协调主从分配,这使得消息存储的选择至关重要。存储可以是共享文件系统或共享数据库。只有少数共享文件系统实现可以正常工作——任何基于NFS 4.x的实现都应该可以正常工作。CIFS/SMB存储可以工作,但提供商之间的差异太大,很难确定。NFS v3无法工作,无论实现得多么好,因为锁定语义不合适。在任何情况下,存储都需要健壮,或者需要复制,或者两者兼而有之,因为整个代理集群都依赖于它。没有商店,就没有经纪人

在我的经验中,共享文件存储比共享数据库更容易获得好的吞吐量,当然,有很多因素需要考虑。糟糕的网络连接将使任何类型的共享存储(或任何类型的集群)都难以获得良好的吞吐量

使用单个消息存储时,通常会将代理放入某种网格中,使用“网络连接器”将消息从一个代理传递到另一个代理。两个代理都将接受来自客户端的连接(没有主代理),网络连接将处理消息发送到一个代理,但需要从另一个代理使用的情况

客户端不一定需要在其连接URI中指定所有代理,但通常会指定,以防其中一个代理停机

网格通常比共享文件存储的主从式更容易设置,而且(广义地说)可以处理更多的客户端负载。但是,(a)丢失代理相当于丢失与其关联的任何消息(直到可以恢复代理为止)和(b)mesh干扰消息传递模式,如消息分组和独占消费者

确实没有硬性规定来决定使用哪种配置。许多已经拥有某种共享存储基础设施(例如,一个像样的关系数据库或群集NFS)的安装人员倾向于使用它。云部署的兴起使得无共享存储的网格操作变得(我认为)更加流行,因为它是如此对称


这里可以说的还有很多。作为一个广泛的问题,我怀疑OP有点超出了SO的范围。如果您将问题分成更小、更集中的部分,您可能会得到更多的关注。

多个聚集在一起的ActiveMQ服务器可以通过以下几种方式提供HA:

  • 通过跨多个代理节点使用计算资源来扩展消息流
  • 在代理节点的单节点计划内或计划外停机期间维护消息流
  • 在ActiveMQ进程失败时共享数据存储
  • 经纪人网络解决了#1和#2。标准的3节点群集将为您提供优异的性能和扩展生产者和消费者数量的能力,并将整个流程分割到3节点以提供更大的容量

    在所有消息传递产品中,解决#3是复杂的。代理总是工作在完全空的状态——因此,将单个代理的数据存储集群化成为一种反模式。很多情况下,与添加NFSv4、GFSv2或JDBC并使用共享存储相比,依靠具有单个代理节点的RAID磁盘将提供更高的可靠性

    也就是说,如果您必须使用共享存储,请遵循最佳实践并使用GFSv2或NFSv4。JDBC的速度要慢得多,需要大量的数据库维护才能保持高效运行


    注意:[@Kevin Boone]关于CIFS/SMB的说明不正确,不应使用CIFS/SMB。否则,他的回答是可靠的。

    您使用的是什么版本的ActiveMQ?这是一个相当复杂的问题。到底什么东西需要高度可用?这只是保持整体服务正常运行的问题,还是需要消息数据的完全一致性?您是否使用了邮件组之类的功能,这些功能要求邮件排序的一致性?如果应用程序似乎需要一个健壮的共享消息存储,您是否有提供该存储的基础设施?嗨@KevinBoone,我已经更新了我的问题CIFS/SMB无法工作。它的锁定机制是不正确的,但它确实是。我已经看到它在许多实质性的装置中工作。CIFS本身支持与ActiveMQ协同工作的锁定模式;问题在于文件系统驱动程序与锁交互的方式。但是,我当然不推荐将CIFS与ActiveMQ结合使用。使用CIFS/SMB实际上可以保证您让两个代理都认为它们在某一点上处于活动状态,并且会破坏数据存储。奇怪的是,您看到了哪些成功运行的CIFS/SMB服务?我从来没有在Win64上看到过成功,我想知道Samba中的增强功能可能会有更好的效果。我所看到的有效安装——这只是我对少数几个站点的特殊体验——都是基于propriet的