ActiveMQ常见的高可用架构模式及使用LevelDB、ZooKeeper进行高可用消息架构

来源:互联网 发布:假身份证骗网络贷款 编辑:程序博客网 时间:2024/06/05 15:19

ActiveMQ进行高可用架构可以采用主从方式(Master-Slave)或负载均衡(集群)方式。 


1. 主从模式

Master-Slave方式中,只能是Master提供服务,Slave是实时地备份Master的数据,以保证消息的可靠性。当Master失效时,Slave会自动升级为Master,客户端会自动连接到Slave上工作。主从模式,可以使用如下方式实现:


1.1. 基于共享文件(Shared File System Master Slave)

这种方式Slave的个数没有限制,哪个ActiveMQ实例先获取共享文件的锁,那个实例就是Master,其它的ActiveMQ实例就是Slave,当当前的Master失效,其它的Slave就会去竞争共享文件锁,谁竞争到了谁就是Master。此模式结构图如下:


1.2. 基于数据库(JDBC Master Slave)

JDBC Master Slave模式和Shared File Sysytem Master Slave模式的原理是一样的,只是把共享文件系统换成了共享数据库。


1.3. 基于zookeeper

此种模式通过zookeeper做为服务选取器来选择activemq作为master,稍后会进行具体介绍。


2. Broker集群模式

此种配置是一个消费者连接到多个broker集群的中的一个broker,当该broker出问题时,消费者自动连接到其他一个正常的broker。消费者使用 failover:// 协议来连接broker。broker之间的通过静态发现(static discovery)和动态发现(dynamic discovery)来维持彼此发现,下面来介绍静态发现和动态发现的机制。


2.1. Static Discovery集群

静态发现通过配置固定的broker uri来发现彼此,配置语法如下:

static:(uri1,uri2,uri3,...)?options

例如:

static:(tcp://localhost:61616,tcp://remotehost:61617?trace=false,vm://localbroker)?initialReconnectDelay=100

2.2. Dynamic Discovery集群

动态发现机制是在各个broker启动时通过Fanout transport来发现彼此。在配置ActiveMQ实例时,不需要知道所有其它实例的URI地址,只需在所有实例的${ACTIVEMQ_HOME}/conf/activemq.xml文件中添加以下内容:

<networkConnectors>  

       <networkConnector uri="multicast://default" />  

</networkConnectors>

同时在<transportConnectors>节点中添加以下部分内容:

<transportConnectors>  

         <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" discoveryUri="multicast://default" />  

</transportConnectors>  


3. 网络连接(Network Connectors)模式集群

多个broker组成集群,当其中一个broker的消费者出问题导致消息堆积无法消费掉时,通过ActiveMQ支持的Network of Broker方案可将该broker堆积的消息转发到其他有消费者的broker。该方案主要有以下两种配置方式:


3.1. 基于固定地址



3.1. 基于组播发现



4. 基于ZooKeeper的高可用详解

整体的系统结构如下图所示:


ActiveMQ提供了队列、本地持久化的功能,ZooKeeper提供了主从选举的功能,通过zookeeper选取activemq leader的形式实现当某个activemq节点出问题时,保证系统的可用性。


4.1. ZooKeeper部署

配置zoo.cfg文件,修改dataDir地址和集群服务地址


在dataDir路径下创建myid文件,注意与server.x中的x保持一致。


4.2. ActiveMQ配置


修改persistenceAdapter标签,使用LevelDB,并配置与zookeeper连接信息,其中hostname为本机地址。


4.3. 验证测试

在浏览器地址栏分别输入:

http://192.168.1.104:8161/admin/queues.jsp

http://192.168.1.106:8161/admin/queues.jsp

http://192.168.1.108:8161/admin/queues.jsp

因为使用zookeeper做负载均衡,三台只有一台是master,其他两台处于等待状态,所以只有其中一台提供服务,但一旦这台服务器宕机以后,会有另外一台顶替上来,所以其他几个ip地址是打不开的,只有一台能打开。在客户端使用的时候,使用 failover进行配置的,如下:

mq.broker.url=failover:(tcp://192.168.1.104:61616,tcp://192.168.1.106:61616,tcp://192.168.1.108:61616)?initialReconnectDelay=1000


关注微信公众号,获取更多内容



0 0
原创粉丝点击