您的位置:首页 > 运维架构 > 网站架构

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

2016-07-27 18:48 816 查看
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

([b]关注微信公众号,获取更多内容)[/b]



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: