有没有办法在分布式ActiveMQ集群中进行故障转移?

时间:2011-10-17 09:09:27

标签: messaging activemq

在分布式activemq群集中,如果某个节点发生故障,其消息将丢失,直至其返回。即使节点出现故障,有没有办法继续分发这些消息?

3 个答案:

答案 0 :(得分:0)

你想要master-slave哈吗? http://activemq.apache.org/masterslave.html

  

运行大量独立经纪人或经纪人的问题   网络是消息由任何一个物理经纪人拥有   时间点。如果那个经纪人失败了,你必须等待它   在消息可以传递之前重新启动。 (如果你正在使用   非持久性消息传递和经纪人失败你通常会失败   你的留言)。

     

MasterSlave背后的想法是将消息复制到从属设备   经纪人即使你有灾难性的硬件故障了   主人的机器,文件系统或数据中心,你立即得到   故障转移到从站,没有消息丢失。

更多信息:http://activemq.apache.org/replicated-message-store.html

答案 1 :(得分:0)

创建一个代理网络,每个代理都有一个从属服务器(例如直接复制)。 这样,如果主设备发生故障,从设备可以加入代理网络并占据其前主设备的位置。根据您选择的复制方案,前主代理甚至可以恢复并重新加入新主服务器作为从属节点。

例如:direct replication

中的network of brokers

据我所知,不可能“强制”activemq在多个代理上冗余地存储待处理的消息。

答案 2 :(得分:0)

是的,您使用共享邮件存储执行此操作并让多个代理使用该存储。这些经纪人中只有一个在任何时候都是活跃的 - 首先连接到商店的经纪人。这是通过锁管理的。当活动代理摔倒时,第二个代理将获取锁定,然后它将变为活动状态,处理存储中未由第一个代理发送的任何消息。客户端(生产者和消费者)通过连接字符串

连接到代理对
failover:(tcp://broker1Host:broker1Port,tcp://broker2Host:broker2port)

只有持有锁的代理才会接受连接,因此故障转移字符串指定客户端应尝试连接到列表中的下一个代理。使用这种机制,如果主站发生故障,甚至可能有多个从站等待接管。

如果您可以访问支持锁定的网络文件系统(例如SAN或NFS),可以在http://activemq.apache.org/shared-file-system-master-slave.html找到有关此内容的更多信息,如果没有,则可以使用数据库作为邮件存储http://activemq.apache.org/jdbc-master-slave.html