ActiveMQ--使用集群搭建来解决单点故障,实现高可用。

一、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,可以正常继续使用。

发布了227 篇原创文章 · 获赞 77 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/m2606707610/article/details/103556682