JMS之——ActiveMQ高可用+负载均衡集群

Posted 爷的眼睛闪亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMS之——ActiveMQ高可用+负载均衡集群相关的知识,希望对你有一定的参考价值。

一、高可用集群

从ActiveMQ5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的Master-Slave实现方式,其他两种方式目录共享和数据库共享方式依然存在.

1、文件共享(KahaDB)

 

[html] view plain copy
 
  1. <persistenceAdapter>  
  2.   <kahaDB directory="${activemq.data}/kahadb"/>  
  3. </persistenceAdapter>  

 

2、数据库共享

 

[html] view plain copy
 
  1. <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  2.     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
  3.     <property name="url" value="jdbc:mysql://localhost:3306/smq?relaxAutoCommit=true"/>  
  4.     <property name="username" value="root"/>  
  5.     <property name="password" value="root"/>  
  6.     <property name="maxActive" value="20"/>  
  7.     <property name="poolPreparedStatements" value="true"/>  
  8. </bean>  
  9. <persistenceAdapter>  
  10.     <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" createTablesOnStartup="false"/>  
  11. </persistenceAdapter>  

 

3、复制的LevelDB

LevelDB是Google开发的用于持久化数据的高性能类库,LevelDB并不是一种服务,需要用户自己实现,能处理十亿级别规模的Key-Value型数据,占用内存小.

[html] view plain copy
 
  1. <persistenceAdapter>  
  2. <replicatedLevelDB  
  3.   directory="${activemq.data}/leveldb"  
  4.   replicas="3"  
  5.   bind="tcp://0.0.0.0:62621"  
  6.   zkAddress="192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183"  
  7.   hostname="edu-zk-01"  
  8.   zkPath="/activemq1/leveldb-stores" />  
  9. </persistenceAdapter>  
  10. --SSDB(基于LevelDB)  

高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ Broker.只有其中的一个Broker可以提供服务,被视为Master,其他的Broker处于待机状态,被视为Slave.如果Master因故障不能提供服务,ZooKeeper会从Slave中选举出一个Broker充当Master

 

二、ActiveMQ集群部署规划

ZooKeeper集群环境:192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183
ActiveMQ需要划分的端口:
      mq集群通讯端口(bind="tcp://0.0.0.0:62621" ActiveMQ相互之间通许,数据同步...)
      mq集群消息端口(conf/activeMq.xml 客户端监听端口)
      mq管理控制台监听端口(conf/jetty.xml)
一个高可用集群中每个ActiveMQ的BrokerName必须相同,否则不能加入集群

 

[html] view plain copy
 
  1. <broker xmlns="http://activemq.apache.org/schema/core" brokerName="DobboEdu" dataDirectory="${activemq.data}">  

 

三、客户端broker采用失败重连机制

 

[plain] view plain copy
 
  1. mq.brokerURL=failover:(tcp://192.168.1.81:51611,tcp://192.168.1.82:51611,tcp://192.168.1.83:51611)?randomize=false&initialReconnectDelay=1000&maxReconnectDelay=30000  

当一个ActiveMQ节点挂掉,ActiveMQ服务一样正常使用,如果仅剩一个ActiveMQ节点,因为不能选举Master,ActiveMQ不能正常运转;如贵ZooKeeper集群出了问题,需要对
ActiveMQ重新启动一次.
replicatedLevelDB不支持延迟或者计划任务消息.这些消息存储在另外的LevelDB文件中,如果使用延迟或者计划任务消息,将不会复制到slave Broker上,不能实现消息的高可用.

 

四、负载均衡集群

1.集群一链接集群二

集群一中所有ActiveMQ配置如下:加在persistenceAdapter适配器节点前,networkConnector uri 为集群二的消息端口,这里采用失败重连机制

 

[html] view plain copy
 
  1. <networkConnectors>  
  2.     <networkConnector uri="static:{tcp://192.168.1.101:53531,tcp://192.168.1.101:53532,tcp://192.168.1.101:t3533}" duplex="false"/>  
  3. </networkConnectors>  

 

2.集群二链接集群一

集群二中所有ActiveMQ配置如下:加在persistenceAdapter适配器节点前,networkConnector uri 为集群一的消息端口,这里采用失败重连机制

[html] view plain copy
 
    1. <networkConnectors>  
    2.     <networkConnector uri="static:{tcp://192.168.1.101:53511,tcp://192.168.1.101:53512,tcp://192.168.1.101:t3513}" duplex="false"/>  
    3. </networkConnectors>   

以上是关于JMS之——ActiveMQ高可用+负载均衡集群的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ实现负载均衡+高可用部署方案(转)

ActiveMQ实现负载均衡+高可用部署方案

Kubernetes(k8s)之k8s高可用负载均衡集群(haproxy+pacemaker实现负载均衡+高可用)

Kubernetes(k8s)之k8s高可用负载均衡集群(haproxy+pacemaker实现负载均衡+高可用)

ActiveMQ 集群负载平衡

RabbitMQ集群架构之使用Haproxy实现高可用负载均衡