`

ActiveMQ:高可用集群方案

阅读更多

ActiveMQ高可用集群方案

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

 

http://wosyingjun.iteye.com/blog/2314683

 

相关文章:
范例项目: 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

分享到:
评论

相关推荐

    基于kahadb的activemq高可用集群部署配置示例

    本示例将详细讲解如何基于KahaDB存储引擎构建ActiveMQ的高可用集群。 KahaDB是ActiveMQ的一个持久化存储机制,它提供了快速、可扩展和可靠的存储解决方案。在高可用集群中,KahaDB确保即使在broker故障时,消息也...

    linux-apache-activemq-5.15.3和 linux-jdk1.8

    总之,Linux Apache ActiveMQ 5.15.3和JDK 1.8的结合为开发者提供了一个强大的消息传递解决方案,能够在Linux环境中搭建稳定、高性能的消息中间件系统。理解这两个组件的工作原理和配置要点,是成功实施消息传递系统...

    高可用之ActiveMQ集群:网络连接模式(network connector)详解.docx

    在面对大规模消息处理需求和追求系统高可用性时,ActiveMQ 提供了集群解决方案,其中网络连接模式(network connector)是关键组件。网络连接模式允许多个 ActiveMQ broker 实例通过网络互连,形成一个集群,从而...

    activemq集群配置文档

    在 ActiveMQ 的集群配置中,采用 ZooKeeper 作为集群协调器是一种非常有效的高可用性解决方案。其核心原理在于使用 ZooKeeper 来管理 ActiveMQ Broker 的注册与状态监控。在一个典型的配置中,仅有一个 Broker 作为 ...

    配置ActiveMQ 静态集群

    静态集群是ActiveMQ提供的一种高可用性解决方案,通过在多个节点间共享数据,确保即使某个节点故障,服务也能不间断地运行。以下我们将按照步骤介绍配置静态集群的关键步骤: 1. **理解集群概念**: 集群是指多个...

    4.1 ActiveMQ的三种集群模式1

    总结来说,ActiveMQ的基于共享文件的集群模式提供了高可用性的解决方案,通过共享持久化存储,确保了在节点故障时,服务不会中断。测试环境的搭建和配置过程是理解这一模式的关键,而实际生产环境中,应选用可靠的...

    activemq集群配置文档.docx

    activemq集群配置文档 ...本文档详细介绍了使用Zookeeper和ActiveMQ实现高可用的集群配置文档,并提供了具体的部署方案和配置步骤。通过遵循本文档的步骤,可以实现高可用的消息队列系统,满足业务系统的高可用性需求。

    activemq_master-slave集群安装文档

    ActiveMQ Master-Slave集群是一种高可用性和容错性的解决方案,确保即使主节点(Master Broker)发生故障,消息也不会丢失,因为它们已经被复制到从节点(Slave Broker)。这种配置是ActiveMQ推荐的策略之一,提供了...

    activemq 集群配置文档

    接下来,我们将详细介绍ActiveMQ提供的几种集群配置方案: - **2.1 客户端集群 (Customer Cluster)** - **定义**: 客户端集群主要是指多个客户端应用程序共享一组消息中间件资源的情况。 - **功能**: 在客户端...

    activeMQ集群的使用与配置[归类].pdf

    ActiveMQ集群的配置和使用是软件开发中涉及消息中间件管理的重要部分,特别是在构建高可用性和可扩展性系统时。ActiveMQ作为一个强大的开源消息代理,提供了多种集群解决方案以确保服务的连续性和性能优化。 首先,...

    ActiveMQ部署方案分析对比

    ActiveMQ提供了多种Broker Cluster实现方式,包括但不限于基于TCP/IP、JGroups等网络协议的集群方案。这些方案的特点在于能够支持水平扩展,即通过增加Broker节点的数量来提高系统的处理能力和容错能力。 #### 三、...

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

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

    ActiveMQ集群

    综上所述,ActiveMQ提供了多种集群配置方案来满足不同的业务需求。对于需要处理大量消息的应用场景,通过合理配置Broker集群和Queue Consumer集群,不仅可以提高系统的可用性和稳定性,还能有效提升消息处理效率。...

    activemq集群安装

    ActiveMQ 集群安装是提高消息中间件可用性和可靠性的关键步骤,特别是从5.9版本开始,ActiveMQ引入了新的集群实现方式,去除了传统的Master-Slave模式,并引入了基于ZooKeeper和LevelDB的解决方案。这种方式提供了一...

    ActiveMQ解决方案

    在描述中提到了两种主要的ActiveMQ高可用性设置:Master/Slave架构和failover协议。 Master/Slave架构是ActiveMQ实现高可靠性的核心机制。这种模式下,系统分为一个主服务器(Master)和一个或多个从服务器(Slave...

    activemq activeMq笔记

    ### ActiveMQ 概述 Apache ActiveMQ 是一款...- **集群**:对于更复杂的高可用性场景,可以配置 ActiveMQ 的集群。集群中的各个 broker 可以相互复制数据,确保即使某个节点失败也不会影响整个系统的稳定性。 ```xml ...

    interlok-activemq:建议的名称是“ bookish-barnacle”

    9. **高可用性与集群**:了解如何设置ActiveMQ集群,实现故障转移和负载均衡,保证服务不间断。 10. **安全配置**:实施用户认证和授权,保护消息传输的安全性,例如使用SSL/TLS加密连接。 11. **Spring框架集成**...

    ActiveMQ 5.7源码及jar包

    5. **集群与高可用性**:ActiveMQ支持集群模式,通过源码可以学习到如何配置和管理集群,实现消息的负载均衡和故障转移。 6. **安全与认证**:ActiveMQ支持JAAS(Java Authentication and Authorization Service)...

Global site tag (gtag.js) - Google Analytics