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来发现彼此,配置语法如下:
<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]
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=1002.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]
相关文章推荐
- 银联的跨行清算体系架构分析
- 架构图
- 【分享】分享一个压缩 PNG 的网站 TinyPNG
- 网站流量突然下降应该怎么找原因?
- 网站流量突然下降应该怎么找原因?
- Kafka剖析(一):Kafka背景及架构介绍
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- 架构设计经验
- 三、LVS高可用搭建
- ODPS技术架构及应用实践
- 一、高并发架构设计杂写
- iOS 工具不错的网站
- .net网站开发中关于gridview控件“弹窗”设置的解决办法
- LAMP平台部署及应用一
- 自己搭建并维护一个小型网站
- 统计网站人数和访问量
- iOS应用架构谈 组件化方案
- 三种主流的WebService实现方案(REST/SOAP/XML-RPC)简述及比较
- iOS应用架构谈 本地持久化方案及动态部署
- iOS应用架构谈 view层的组织和调用方案