`

ActiveMQ集群之Master-Slave

    博客分类:
  • MQ
 
阅读更多

Activemq默认主要使用2个端口,8161(Web管理控制台端口)、61616(提供消息队列服务的端口)

ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要由两种:Master-Slave和Broker Cluster。

1、Master-Slave

Master-Slave方式中,只能是Master提供服务,Slave是实时地备份Master的数据,以保证消息的可靠性。当Master失效时,Slave会自动升级为Master,客户端会自动连接到Slave上工作。Master-Slave模式分为三类:Pure Master Slave、Shared File System Master Slave和JDBC Master Slave。

 

消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和ReliableMessaging结合起来应该是很好的保证了消息的可靠传送。

 

消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续尝试。消息中心启动以后首先要检查制定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。

 

ActiveMQ持久化方式:AMQ、KahaDB、JDBC、LevelDB。

 

1.1、Pure Master Slave

Pure Master Slave具有以下限制:只能有一个slave broker连接到master broker。在因master broker失效后slave才接管(保证消息完全拷贝)要想恢复master,停止slave,拷贝slave中的数据文件到master中,然后重启。5.8版本之后已经不支持,了解可参考:http://activemq.apache.org/pure-master-slave.html

 

1.2、Shared File System Master

通过共享存储的方式实现主从架构,与Pure Master Slave不同在于可以有多个Slave。基本上,你可以运行多个broker,这些 broker 共享activemq数据目录。当第一个broker得到文件上的排他锁之后,其它的 broker 便会在循环中等待获得这把锁。默认每10秒判断一次。客户端使用failover transport来连接到可用的master broker。当master broker失效的时候会释放这把锁,这时候其中一个slave broker会得到这把锁从而成为 master broker。如果多套AMQ部署在不同的设备上,这里的directory应该指向一个远程的系统目录(分布式文件系统,NFS)。客户端通过failover方式进行连接,多个AMQ实例地址使用英文逗号隔开,当某个实例断开时会自动重连,但如果所有实例都失效,failover默认情况下会无限期的等待下去,不会有任何提示。

 

1.2.1、AMQ

AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储在一个个文件中,文件的默认大小为32M,如果一条消息的大小超过了 32M,那么这个值必须设置大一点。当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段,这个文件被删除。AMQ适用于ActiveMQ5.3之前的版本。默认配置如下:

<persistenceAdapter>

   <amqPersistenceAdapter directory="/opt/scm/activemq/sharedata/amqdb" />

</persistenceAdapter>

 

1.2.2、KahaDB

KahaDB是基于文件的本地数据库储存形式,虽然没有AMQ的速度快,但是它具有强扩展性,恢复的时间比AMQ短,从5.4版本之后KahaDB做为默认的持久化方式。

<persistenceAdapter>
    <kahaDB directory="/opt/scm/activemq/sharedata/kahadb"/>
</persistenceAdapter>

 

注意事项:

a、slave的控制台不能访问,原因就是slave没有拿到文件锁,不能访问文件。

b、master和slave设置的连接密码必须一致方便客户端连接

 

1.2.3、LevelDB

这种文件系统是从ActiveMQ5.8之后引进的,它和KahaDB非常相似,也是基于文件的本地数据库储存形式,但是它提供比KahaDB更快的持久性。与KahaDB不同的是,它不是使用传统的B-树来实现对日志数据的提前写,而是使用基于索引的LevelDB。

<persistenceAdapter>
    <levelDB directory="/opt/scm/activemq/sharedata/leveldb"/>
</persistenceAdapter>

 

注意事项:

a、至少必须有3个节点

b、多个节点brokerName必须一致

 

1.3、JDBC Master Slave

可以将消息存储到数据库中,例如:Mysql、SQL Server、Oracle、DB2。

activemq.xml配置修改:

<persistenceAdapter>
	<jdbcPersistenceAdapter dataSource="#activemq-ds" createTablesOnStartup="true" useDatabaseLock="true"/>
</persistenceAdapter>

 

activemq.xml配置新增:

<bean id="activemq-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql://192.168.1.170:3306/testmq?relaxAutoCommit=true"/>
	<property name="username" value="root"/>
	<property name="password" value="esm123"/>
	<property name="maxActive" value="200"/>
	<property name="poolPreparedStatements" value="true"/>
</bean>

 

从配置中可以看出数据库的名称是testmq,你需要手动在MySql中增加这个库。然后重新启动消息队列,你会发现多了3张表:activemq_acks、activemq_lock、activemq_msgs

注意事项:

1、必须在activemq的lib目录下加入相关驱动包:mysql-connector-java-5.0.8.jar、commons-dbcp-1.2.2.jar、commons-pool-1.3.jar

2、必须手动创建数据库(testmq),并且数据库的字符集为:character-set改成latin1

3、可以持久化延迟的消息

4、可以打开slave的管控台

5、createTablesOnStartup=true待首次自动创建好表结构后,可修改其为false,提升效率

6、跟共享文件系统的方式类似,但是更可靠,速度上最慢

7、建议使用Mysql5.3以上版本(部分低版本锁有问题)

 

1.4、zookeeper Master Slave

<persistenceAdapter>
	<replicatedLevelDB directory="${activemq.data}/leveldb" replicas="2" bind="tcp://0.0.0.0:0" zkAddress="192.168.1.82:3181,192.168.1.82:3182,192.168.1.82:3183"  zkPassword="" hostname="CS" zkPath="/activemq/leveldb-stores" />    
</persistenceAdapter>

注意事项:

1、replicated LevelDB 不支持延迟或者计划任务消息。这 些消息存储在另外的LevelDB文件中,如果使用延迟或者计划任务消息,将不会复制到Slave Broker上,不能实现消息的高可用。

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

配置说明:

a、这个zkPath代表zookeeper内的”路径”,即你运行在3181端口的zk内的”寻址节点”,类似于JNDI。如果你没有这个zkPath,默认它在zk内的寻址节点为”/default”。加入到某一组master slave中的mq的实例中的zkPath必须完全匹配。

b、replicas=”3”的设置 ,这边的数字指的就是ActiveMQ实例的节点数,它需要满足2N+1

分享到:
评论

相关推荐

    activemq_master-slave集群安装文档

    这种配置是ActiveMQ推荐的策略之一,提供了三种不同的实现方式:Pure Master Slave、Shared File System Master Slave和JDBC Master Slave。 在安装和配置ActiveMQ Master-Slave集群之前,需要准备以下环境: 1. ...

    activemq-master-slave集群安装文档.doc

    在本文档中,我们关注的是ActiveMQ的Master-Slave集群配置,这是实现高可用性和容错机制的一种重要方式。 Master-Slave架构的核心思想是通过将消息复制到备用的Slave Broker,确保即使主Master Broker发生故障,...

    ActiveMQ 集群——JDBC Master Slave + Broker Cluster

    ActiveMQ 集群——JDBC Master Slave + Broker Cluster ActiveMQ 集群是指将多个 ActiveMQ 服务器组合在一起,以提高系统的可扩展性和可靠性。在这个集群中,我们可以使用 JDBC Master Slave 模式和 Broker Cluster...

    ActiveMQ Master/Slave 主从配置

    ActiveMQ支持多种高可用的主从配置模式,包括Shared File System Master/Slave、JDBC Master/Slave和Replicated LevelDB Store。文章主要介绍了使用JDBC Master/Slave模式来实现ActiveMQ的高可用配置。 在JDBC ...

    ActiveMQ集群

    在ActiveMQ集群中,Queue的Consumer(消息消费者)也可以形成集群。这意味着如果某个Consumer失效,所有未被确认的消息将自动转给其他的Consumer处理。这种机制有助于提高消费者之间的负载平衡,确保消息的快速处理...

    activemq集群配置文档.docx

    activemq集群配置文档 基于Zookeeper和ActiveMQ的集群配置文档旨在实现高可用的消息队列系统。该文档将详细介绍如何使用Zookeeper实现Master-Slave模式来实现高可用性,并提供具体的部署方案和配置步骤。 一、 ...

    apache-activemq-5.15.6

    8. **故障恢复**:ActiveMQ支持故障恢复和高可用性配置,如使用Master-Slave模式或者通过共享存储实现主备切换。它还提供消息持久化机制,防止消息丢失。 9. **插件扩展**:ActiveMQ具有高度可扩展性,允许开发者...

    2019实战ActiveMQ集群与应用实战视频教程

    - Master-Slave 模式:一个主节点负责处理消息,而备份节点在主节点故障时接管服务。 - 多播模式:所有节点都监听同一个多播地址,当消息到达时,所有节点都会收到并处理消息。 - Broker-to-Broker 模式:各节点...

    activemq集群配置文档

    本文档将详细介绍如何利用 ZooKeeper 实现 ActiveMQ 的 Master-Slave 集群配置,以及具体的部署步骤。 #### 二、ActiveMQ 高可用原理 ##### 2.1 原理概述 在 ActiveMQ 的集群配置中,采用 ZooKeeper 作为集群协调...

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

    ActiveMQ 集群网络连接模式(Network Connector)详解 ActiveMQ 集群网络连接模式(Network Connector)是 ActiveMQ 提供的一种集群功能,旨在提高消息服务的横向扩展性和高可用性。通过将多个不同的 broker 实例...

    ActiveMQ集群安装和部署

    为了实现ActiveMQ集群,需要在两台服务器上分别配置Master和Slave。具体步骤如下: **1. Master配置** - **配置Master**: 找到`C:\ActiveMQ\conf`目录下的`activemq.xml`配置文件,修改`broker`节点中的`broker...

    ActiveMQ部署方案分析对比

    ### ActiveMQ部署方案分析对比 #### 一、引言 在现代企业的IT架构中,消息中间件扮演...在未来的发展过程中,随着技术的进步和业务需求的变化,不断优化和完善ActiveMQ集群部署方案将是保持系统稳定高效运行的关键。

    linux环境下ActiveMQ持久化、集群环境搭建详解

    可以使用 Apache ActiveMQ 的集群模式,例如使用 Master-Slave 模式或 Replicated LevelDB 模式。 总结 搭建 ActiveMQ 持久化和集群环境需要对 Linux 操作系统、Java 环境、ActiveMQ 等方面有深入的了解。需要安装...

    ActiveMQ部署方案分析对比.zip

    ActiveMQ集群部署方式对比:Pure Master Slave方式,Shared Filesystem Master-Slave方式 ,Shared Database Master-Slave方式,Replicated LevelDB Store方式,Broker-Cluster部署方式....

    activemq 集群配置文档

    ### ActiveMQ集群配置详解 #### 一、ActiveMQ与JMS规范基础 在深入了解ActiveMQ集群配置之前,我们首先简要回顾一下Java消息服务(Java Message Service, JMS)的基础概念,这对于理解ActiveMQ的工作原理及其集群...

    4.7、activemq 集群 conduitSubscriptions 均衡消费和master slave,jdbc存储1

    在ActiveMQ集群环境中,实现消息均衡消费和主备切换是一个重要的功能。本示例主要讨论了如何通过配置和代码实现ActiveMQ集群中的`conduitSubscriptions`策略,以及结合`jdbc`存储,来确保消息的高可用性和消费的均衡...

    activemq集群安装

    在ActiveMQ集群中,LevelDB被用于存储和复制消息,以确保数据的一致性。 集群部署的高可用性原理在于,每个Broker都在ZooKeeper集群上注册,ZooKeeper监控所有Broker的状态。Master Broker负责处理客户端请求,而...

Global site tag (gtag.js) - Google Analytics