`

ActiveMQ高可用集群方案

阅读更多

ActiveMQ高可用集群方案

在高并发、对稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案。从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper + LevelDB 的 Master-Slave 实现方式。

相关文章:
范例项目: http://wosyingjun.iteye.com/blog/2312553 
ActiveMQ的简单实用:http://wosyingjun.iteye.com/blog/2314681

一. ActiveMQ的高可用原理

使用ZooKeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个Broker可以提供服务,被视为 Master,其他的 Broker 处于待机状态,被视为Slave。如果Master因故障而不能提供服务,Zookeeper会从Slave中选举出一个Broker充当Master。
Slave连接Master并同步他们的存储状态,Slave不接受客户端连接。所有的存储操作都将被复制到 连接至 Master的Slaves。如果Master宕了,得到了最新更新的Slave会成为 Master。故障节点在恢复后会重新加入到集群中并连接Master进入Slave模式。
是不是觉得和Redis Sentinel主从高可用的方式很像,这里的zookeeper起到的作用和reids里的sentinel作用差不多。

另外,附上官方文档的一则警告,请使用者注意。replicated LevelDB 不支持延迟或者计划任务消息。这 些消息存储在另外的LevelDB文件中,如果使用延迟或者计划任务消息,将不会复制到Slave Broker上,不能实现消息的高可用。

二. ActiveMQ的持久化方式

ActiveMQ有三种持久化方式(在activemq.xml可配):
(1) 基于共享文件系统(KahaDB,默认)

<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

(2) 基于JDBC

<persistenceAdapter>
    <jdbcPersistenceAdapter dataSource="#MySQL-DS"/>
</persistenceAdapter>
<!--注意:需要添加mysql-connector-java相关的jar包到avtivemq的lib包下-->
<bean id="MySQL-DS" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/beautyssm_mq?useUnicode=true&amp;characterEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="xxxx"/>
</bean>

(3) 基于可复制的LevelDB(常用于集群)

<persistenceAdapter>
  <replicatedLevelDB
    directory="${activemq.data}/leveldb" #数据存储路径
    replicas="3" #节点个数
    bind="tcp://0.0.0.0:62621" #用于各个节点之间的通讯
    zkAddress="localhost:2181,localhost:2182,localhost:2183"
    hostname="localhost"
    zkPath="/activemq/leveldb-stores"/>#在zookeeper中集群相关数据存放路径
</persistenceAdapter>

LevelDB是Google开发的一套用于持久化数据的高性能类库。LevelDB并不是一种服务,用户需要自行实现Server。是单进程的服务,能够处理十亿级别规模Key-Value型数据,占用内存小。
这里我们采用第三种方式,也是官网推荐的方式。

三. 高可用的部署

1、ActiveMQ的高可用集群基于Zookeeper的高可用集群,所以要先部署Zookeeper集群

见:ZooKeeper高可用集群的安装及配置

2、在3个ActiveMQ节点中配置conf/activemq.xml中的监控端口
节点1:
<property name="port" value="8161"/>
节点2:
<property name="port" value="8162"/>
节点3:
<property name="port" value="8163"/>
3、在3个ActiveMQ节点中配置conf/activemq.xml中的持久化适配器
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
    <persistenceAdapter>
      <replicatedLevelDB
        directory="${activemq.data}/leveldb"
        replicas="3"
        bind="tcp://0.0.0.0:6262?"
        zkAddress="localhost:2181,localhost:2182,localhost:2183"
        hostname="localhost"
        zkPath="/activemq/leveldb-stores"/>
    </persistenceAdapter>
</broker>   

注:每个 ActiveMQ 的 BrokerName 必须相同,否则不能加入集群。

4、修改各节点的消息端口:
节点1:
<transportConnector name="openwire" uri="tcp://0.0.0.0:61611maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
节点2:
<transportConnector name="openwire" uri="tcp://0.0.0.0:61612maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
节点3:
<transportConnector name="openwire" uri="tcp://0.0.0.0:61613maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
5、按顺序启动 3 个 ActiveMQ 节点:
$ /usr/local/activemq/activemq-01/bin/activemq start
$ /usr/local/activemq/activemq-02/bin/activemq start
$ /usr/local/activemq/activemq-03/bin/activemq start

监听日志:

$ tail -f /usr/local/activemq/activemq-01/data/activemq.log
$ tail -f /usr/local/activemq/activemq-02/data/activemq.log
$ tail -f /usr/local/activemq/activemq-03/data/activemq.log

四. 集群部署

之前已经实现了ActiveMQ的高可用部署,单仅仅是高可用集群,无法达到负载均衡的作用,接下来只需简单配置就能完成可以实现负载均衡的集群功能:

在集群1的activemq.xml中链接集群2(在persistenceAdapter标签前配置):

<networkConnectors>
    <networkConnector uri="static:(tcp://192.168.2.100:61611,tcp://192.168.2.101:61612,tcp://192.168.2.102:61613)" duplex="false"/>
</networkConnectors>

在集群2的activemq.xml中链接集群1(在persistenceAdapter标签前配置):

<networkConnectors>
    <networkConnector uri="static:(tcp://192.168.1.100:61611,tcp://192.168.1.101:61612,tcp://192.168.1.102:61613)" duplex="false"/>
</networkConnectors>

这样就实现了ActiveMQ的集群高可用负载均衡功能。

三. 客户端连接:

ActiveMQ 的客户端只能访问Master的Broker,其他处于Slave的Broker不能访问。所以客户端连接Broker应该使用failover协议。
配置文件地址应为:
failover:(tcp://192.168.1.100:61611,tcp://192.168.1.100:61612,tcp://192.168.1.100:61613)?randomize=false
或:
failover:(tcp://192.168.2.100:61611,tcp://192.168.2.100:61612,tcp://192.168.2.100:61613)?randomize=false

4
8
分享到:
评论
2 楼 pomtch 2017-02-22  

2、在3个ActiveMQ节点中配置conf/activemq.xml中的监控端口
应该改成
在3个ActiveMQ节点中配置conf/jetty.xml中的监控端口
1 楼 denglin 2016-11-07  
[flash=200,200][url][u][i][b][color=white][align=center][size=small][img]
引用
[/img][/size][/align][/color][/b][/i][/u][/url][/flash]

相关推荐

    ActiveMQ部署方案分析对比

    构建高可用的ActiveMQ系统在生产环境中是非常重要的,单点的ActiveMQ作为企业应用无法满足高可用和集群的需求,所以ActiveMQ提供 了master-slave、broker cluster等多种部署方式,但通过分析多种部署方式之后我认为...

    Java思维导图xmind文件+导出图片

    ActiveMQ高可用集群企业及部署方案 ActiveMQ P2P及PUB/SUB模式详解 ActiveMQ消息确认及重发策略 ActiveMQ基于Spring完成分布式消息队列实战 Kafka Kafka基于Zookeeper搭建高可用集群实战 kafka消息处理过程...

    activemq:这里是消息队列的activemq的简单使用

    高可用 派出单点故障引起的服务中断(一个挂掉,另一个立即顶上,消息不丢失) 负载均衡 以提升效率为更多的客户服务(压力不用集中在一个节点上) 集群方式 客户端集群:让多个消费者同步一个队列 Broke cluster:多...

    ActiveMq工作无忧面试题详解

    目标:通过本课程学习,能够很好的认识消息队列的高可用方案——主从架构和分布式集群架构,能够很好的理解这两种架构的优缺点并能实际的运用到生成环境中。适合人群:有一定java开发能力的中高级开发人员。

    26.Spring Boot 服务的注册和发现.rar

    16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud, Redis,ActiveMQ,Nginx,Mycat,Netty,...

    Fourinone分布式并行计算四合一框架

    Fourinone是高可用的,没有单点问题,可以有任意多个复本,它的复制不是定时而是基于内容变更复制,有更高的性能,Fourinone实现了领导者选举算法(但不是Paxos),在领导者服务器宕机情况下,会自动不延时的将请求...

    fourinone-3.04.25

    Fourinone是高可用的,没有单点问题,可以有任意多个复本,它的复制不是定时而是基于内容变更复制,有更高的性能,Fourinone实现了领导者选举算法(但不是Paxos),在领导者服务器宕机情况下,会自动不延时的将请求...

    Fourinone分布式计算框架

    FourInOne是高可用的,没有单点问题,可以有任意多个复本,它的复制不是定时而是基于内容变更复制,有更高的性能,FourInOne实现了领导者选举算法(但不是Paxos),在领导者服务器宕机情况下,会自动不延时的将请求...

    单点登录源码

    ActiveMQ | 消息队列 | [http://activemq.apache.org/](http://activemq.apache.org/) JStorm | 实时流式计算框架 | [http://jstorm.io/](http://jstorm.io/) FastDFS | 分布式文件系统 | ...

    java开源包1

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包11

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包2

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包3

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包6

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包5

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包10

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包4

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包8

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包7

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包9

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

Global site tag (gtag.js) - Google Analytics