【activemq】zookeeper+replicated-leveldb-store的主从集群 搭建

前期说明

从ActiveMQ5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式。

增加了基于Zookeeper+LevelDB的Master-Slave实现方式,也是官方推荐的。

基于Zookeeper和LevelDB搭建ActiveMQ集群,集群仅提供主备方式的高可用集群功能,避免单点故障。

资料 : http://activemq.apache.org/replicated-leveldb-store

原理说明:
使用ZooKeeper集群注册所有的ActiveMQ Broker但只有其中的一个Broker可以提供服务它将被视为Master,其他的Broker处于待机状态被视为Slave。
如果Master 因故障而不能提供服务ZooKeeper会从Slave中选举出一个Broker充当Master。
Slave 连接Master并同步他们的存储状态,Slave不接受客户端连接。所有的存储操作都将被复制到连接至Master的Slaves。如果Master宕机得到了最新更新的Slave会成为Master。故障节点在恢复后会重新加入到集群中并连接Master 进入Slave模式。
所有需要同步的消息操作都将等待存储状态被复制到其他法定节点的操作完成才能完成。
沂以,如果你配置了replicas=3,那么法定大小是(3/2)+1=2。Master将会存储并更新然后等待(2-1)=1个Slave存储和更新完成,才汇报success。
有一个node要作为观擦者存在。当一个新的Master被选中,你需要至少保障一个法定node在线以能够找到拥有最新状态的node。
这个node才可以成为新的Master。
因此,推荐运行至少3个replica nodes以防止一个node失败后服务中断。

需要提前具备zk集群。具体可以看我之前的博客。

https://blog.csdn.net/jia970426/article/details/104542589

1.集群部署规划列表

2.根目录下创建/mq_cluster 复制三份解压后的activemq到这个目录

[root@localhost opt]# cp -r apache-activemq-5.15.11 /mq_cluster/mq_node01
[root@localhost opt]# cp -r apache-activemq-5.15.11 /mq_cluster/mq_node02
[root@localhost opt]# cp -r apache-activemq-5.15.11 /mq_cluster/mq_node03

3.修改管理控制台端口

修改mq_node02  mq_node03的控制台端口。文件在conf/jetty.xml

[root@localhost mq_node02]# vim /mq_cluster/mq_node03/conf/jetty.xml 

4.hostname名字映射

5.activemq集群配置

5.1 3个节点的BrokerName要求完全一致

[root@localhost mq_cluster]# vim mq_node01/conf/activemq.xml 
[root@localhost mq_cluster]# vim mq_node02/conf/activemq.xml 
[root@localhost mq_cluster]# vim mq_node03/conf/activemq.xml 

5.2 3个节点的持久化配置

说明一下 下面是持久化配置,前提需要zk集群 端口和地址都需要改成自己的。

 
  <persistenceAdapter>
         <replicatedLevelDB
           directory="${activemq.data}/leveldb"
           replicas="3"
           bind="tcp://0.0.0.0:63631"
           zkAddress="192.168.58.134:2191,192.168.58.134:2192,192.168.58.134:2193"
           hostname="jayi-server"
           sync="local_disk"
           zkPath="/activemq/leveldb-stores"
           />
    </persistenceAdapter>
    <persistenceAdapter>
         <replicatedLevelDB
           directory="${activemq.data}/leveldb"
           replicas="3"
           bind="tcp://0.0.0.0:63632"
           zkAddress="192.168.58.134:2191,192.168.58.134:2192,192.168.58.134:2193"
           hostname="jayi-server"
           sync="local_disk"
           zkPath="/activemq/leveldb-stores"
           />
    </persistenceAdapter>
    
    <persistenceAdapter>
         <replicatedLevelDB
           directory="${activemq.data}/leveldb"
           replicas="3"
           bind="tcp://0.0.0.0:63633"
           zkAddress="192.168.58.134:2191,192.168.58.134:2192,192.168.58.134:2193"
           hostname="jayi-server"
           sync="local_disk"
           zkPath="/activemq/leveldb-stores"
           />
    </persistenceAdapter>

每一个mq都修改一下。

6.修改各个节点的消息端口

mq_node02改成61617

mq_node03改成61618

7.先启动zk集群 在启动activemq集群

按照顺序启动3个ActiveMQ节点,
到这步前题是zk集群已经成功启动运行

8.测试activemq集群是否搭建成功

登录任意一台zk服务器客户端,查看/activemq 下节点的个数。可以看出下面有三个服务节点。说明集群配置成功。

花了1个小时 终于一次性成功 幸运。

全部评论
您好leveldb不是已经被弃用了嘛!
点赞 回复 分享
发布于 2020-06-03 19:16
请问现在用的是什么呢?
点赞 回复 分享
发布于 2020-06-03 19:16

相关推荐

10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 19:05
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务