ActiveMQ高可用+负载均衡集群

来源:互联网 发布:淘宝店招怎么设置全屏 编辑:程序博客网 时间:2024/05/21 14:57

一,高可用集群


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


(1)文件共享(KahaDB)
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>

</persistenceAdapter>


 ( 2 )数据库共享
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/smq?relaxAutoCommit=true"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
    <property name="maxActive" value="20"/>
    <property name="poolPreparedStatements" value="true"/>
</bean>
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.data}" 
dataSource="#mysql-ds" createTablesOnStartup="false"/>

</persistenceAdapter>


 ( 3 )可复制的LevelDB
   LevelDB是Google开发的用于持久化数据的高性能类库,LevelDB并不是一种服务,需要用户自己实现,能处理十亿级别规模的Key-Value型数据,占用内存小.
<persistenceAdapter>
<replicatedLevelDB
  directory="${activemq.data}/leveldb"
  replicas="3"
  bind="tcp://0.0.0.0:62621"
  zkAddress="192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183"
  hostname="edu-zk-01"
  zkPath="/activemq1/leveldb-stores" 
/>
</persistenceAdapter>


--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必须相同,否则不能加入集群
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="DobboEdu" dataDirectory="${activemq.data}">


客户端broker采用失败重连机制
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 为集群二的消息端口,这里采用失败重连机制
<networkConnectors>
<networkConnector uri="static:{tcp://192.168.1.101:53531,tcp://192.168.1.101:53532,tcp://192.168.1.101:t3533}" duplex="false"/>
</networkConnectors>
    2.集群二链接集群一
    集群二中所有ActiveMQ配置如下:加在persistenceAdapter适配器节点前,networkConnector uri 为集群一的消息端口,这里采用失败重连机制
<networkConnectors>
<networkConnector uri="static:{tcp://192.168.1.101:53511,tcp://192.168.1.101:53512,tcp://192.168.1.101:t3513}" duplex="false"/>
</networkConnectors>
0 0
原创粉丝点击