Activemq集群搭建ZooKeeper+LevelDB

ZooKeeper搭建

MQ高可用集群部署
参考http://activemq.apache.org/replicated-leveldb-store.html

ip 集群通信端口 openwire端口 管理端口
192.168.1.100 61619 61616 8161
192.168.1.200 61619 61616
192.168.1.300 61619 61616

一、修改 vim conf/activemq.xml

1
2
所以节点brokerName必须一致
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="mybroker" dataDirectory="${activemq.data}">

二、持久化配置

node1.100

1
2
3
4
5
6
7
8
9
10
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:61619"
zkAddress="x.x.x.x:2181,x.x.x.x:2181,x.x.x.x:2181"
zkPassword=""
hostname="192.168.1.100" //本机地址或者hostname
zkPath="/activemq/leveldb-stores" />
</persistenceAdapter>

node21.200

1
2
3
4
5
6
7
8
9
10
11
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:61619"
zkAddress="x.x.x.x:2181,x.x.x.x:2181,x.x.x.x:2181"
zkPassword=""
hostname="192.168.1.200" //本机地址或者hostname
zkPath="/activemq/leveldb-stores" />
</persistenceAdapter>
`

node31.300

1
2
3
4
5
6
7
8
9
10
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:61619"
zkAddress="x.x.x.x:2181,x.x.x.x:2181,x.x.x.x:2181"
zkPassword=""
hostname="192.168.1.300" //本机地址或者hostname
zkPath="/activemq/leveldb-stores" />
</persistenceAdapter>

启动所有节点activemq

1
/opt/apache-activemq-5.14.0/bin/activemq start

客户端失败转移连接
ActiveMQ的客户端只能访问Master的Broker,其他处于Slave的Broker不能访问,所以客户端连接的Broker应该使用failover协议(失败转移)

1
mq.broker.url=failover:(tcp://192.168.1.100:61616,tcp://192.168.1.200:61616,tcp://192.168.1.300:61616)?randomize=false&initialReconnectDelay=1000

记录部分activemq.xml配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<plugins>  
true<simpleAuthenticationPlugin>
true<users>
true<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/> //conf/credentials.properties
true<authenticationUser username="admin" password="admin11111" groups="users"/>
true</users>
true</simpleAuthenticationPlugin>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
<authorizationEntry queue=">" read="users" write="users" admin="users" />
<authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
<authorizationEntry queue="TEST.Q" read="guests" write="guests" />
<authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
<authorizationEntry topic="USERS.>" read="users" write="users" admin="users" />
<authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>

管理页面密码在jetty-realm.properties文件中修改