一、ActiveMQ集群搭建
想保证ActiveMQ为高可用,需要通过搭建集群的方式来实现。搭建集群是通过Zookeeper+LevelDB持久化方式来实现。
要注意的是:在集群模式下,客户端只可以访问Master,不可以访问Slave。当Master宕机后,Zookeeper检测到没有心跳信号,则通过选举机制从剩下的Slave中选出一个新的Master,当故障服务器恢复后会以Slave的角色加入到集群中。
主机IP | Zookeeper集群端口 | ActiveMQtcp端口 | 管理控制台端口 |
192.168.6.10 | 2181 | 61616 | 8161 |
192.168.6.11 |
2181 | 61616 | 8161 |
192.168.6.12 | 2181 | 61616 | 8161 |
1.将每台机器配置文件中的持久化方式改为 replicated LevelDB
<persistenceAdapter>
<replicatedLevelDB
directory="{activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:63631"
zkAddress="192.168.6.10:2181,192.168.6.11:2181,192.168.6.12:2181"
zkPassword="123456"
sync="local_disk"
zkPath="/activemq/leveldb-stores"
#服务器ip
hostname="192.168.6.10" />
</persistenceAdapter>
2.启动Zookeeper集群
3.启动ActiveMQ集群
随便进入一个zk集群的客户端
./zkCli.sh -server 127.0.0.1:2181
连接之后
存在activemq节点,证明集群部署成功,随后查看其详细内容
ls /activemq/leveldb-stores
4.查看当前ActiveMQ集群状态
get /activemq/leveldb-stores/00000000003
节点信息为null的是从,有详细信息的为主。
5.测试集群可用性
当集群搭建成功后,可发现在浏览器访问Master的Broker可以访问到,Slave的Broker拒绝访问,证明集群搭建成功。
更改Java代码连接时的URL
public static final String ACTIVEMQ_URL = "failover:(tcp://192.168.6.10:61616,
tcp://192.168.6.11:61616,
tcp://192.168.6.12:61616)?randomize=false";
public static final String QUEUE_NAME = "queue_cluster";
测试:
集群正常可用,当故意使一个服务器下线,发现failover故障转移生效,另一台Slave变为Master,可以正常继续使用。