ActiveMQ集群部署

  • A+
所属分类:Linux技术

生产环境使用activemq消息队列,为解决单点故障,配合Zookeeper部署集群。上文已经介绍Zookeeper管理配置,现在介绍下集群环境的应用。

官网介绍

http://activemq.apache.org/replicated-leveldb-store.html

ActiveMQ基于Zookeeper和LevelDB实现Master/Slave

ActiveMQ的Master/Slave目前支持三种实现方式:

1)Shared File System Master Slave;

2)JDBC Master Slave;

3)Replicated LevelDB Store。

对于第三种方式,ActiveMQ使用LevelDB持久化数据,并使用Zookeeper协调集群中各节点选举Master

Master启动后接收客户端的连接请求,其他节点作为Slave连接至Master,从Master复制持久化数据,而不接收客户端的连接请求。如果Master停止,则存有最近更新的Slave被选举为Master,原Master恢复后则成为Slave。

持久化数据需要复制到规定数量的Slave上。如果设置replicas值为3,则规定数量为(3/2+1)=2(保证超过半数),即需要复制的Slave数为2,Master会同步等待某一个Slave复制持久化数据完成,而其他Slave通过异步方式复制持久化数据。一般建议设置replicas值至少为3,即ActiveMQ集群节点数至少为3,这样即使有一个节点故障,也能保证规定数量,使得集群能够正常对外提供服务。

配置3个节点的ActiveMQ集群,修改activemq.xml,保证3个节点的brokerName相同:

......

此处brokerName都设置为“mp_activemq”,这样各节点启动后,通过brokerName能够自动组成集群。

另外修改activemq.xml中的持久化配置,使用LevelDB持久化数据,并配置Zookeeper:

directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:0"
zkAddress="xx.xx.xx.xx:2181,xx.xx.xx.xx:2181,xx.xx.xx.xx:2181"
hostname="10.10.25.180"
sync="local_disk"
weight="1"
zkPath="/activemq/leveldb-stores"
/>

注意:

使用一段时间,发现activemq经常无法提供服务,这个bug官方目前仍未修复。

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: