ActiveMQ

ActiveMQ多节点集群

1、部署规划和步骤

1、大概流程

activem集群 activemq集群部署_activemq

如何保证高可用 ==》 搭建集群

ZooKeeper + Replicated LevelDB Store

集群 http://activemq.apache.org/replicated-leveldb-store

activem集群 activemq集群部署_activemq_02

这幅图的意思就是 Client们都连接Master,Slave不接收连接。当 Master 宕机后,zookeper 监测到没有心跳信号, 则认为 master 宕机了,然后选举机制会从剩下的 Slave 中选出一个作为 新的 Master

2、环境和版本

zookeper : 3.4.10

JDK:1.8.0.161

activemq:5.16.0

CentOS-7-x86_64-Minimal-2009

3、关闭防火墙并保证win可以ping通过ActiveMQ服务器

4、要求具备ZK集群并可以成功启动

5、集群部署规划列表

主机

Zookeeper集群端口

AMQ集群bind端口

AMQ消息tcp端口

管理控制台端口

AMQ节点安装目录

192.168.109.101

2181

bind=“tcp://0.0.0.0:63631”

61616

8161

/mq_cluster/mq_node01

192.168.109.102

2182

bind=“tcp://0.0.0.0:63632”

61617

8162

/mq_cluster/mq_node02

192.168.109.103

2183

bind=“tcp://0.0.0.0:63633”

61618

8163

/mq_cluster/mq_node03


6、创建3台集群目录、修改管理控制台端口号

复制之前做的activemq的文件夹,将其还原初始化默认,并在创建/mq_cluster文件夹,将其赋值于文件夹下,并再复制2个分别命名为:

mq_node01、mq_node02、mq_node03

activem集群 activemq集群部署_activemq_03

分别将每台的端口 (jetty.xml)修改为 8161、8162、8163

activem集群 activemq集群部署_activem集群_04


7、host名字映射

红框部分修改为自己的ip和地址i映射

activem集群 activemq集群部署_java_05

ip addr #查看ip

activem集群 activemq集群部署_分布式_06


8、ActiveMQ集群配置

配置三台activemq的broker_Name为一致:achang

activem集群 activemq集群部署_分布式_07

activem集群 activemq集群部署_activemq_08

3个activemq节点的持久化配置:↓

三个都要配置,bind绑定的端口分别为:63631、63632、63633

activem集群 activemq集群部署_activem集群_09


9、修改各activemq节点的消息端口

修改三台节点的后台消息端口分别为:61616、61617、61618

activem集群 activemq集群部署_activemq_10

activem集群 activemq集群部署_activemq_11

activem集群 activemq集群部署_zookeeper_12


10、按顺序启动3个ActiveMQ节点

启动至少3台的zookeeper集群:

activem集群 activemq集群部署_activemq_13

activem集群 activemq集群部署_activem集群_14

activem集群 activemq集群部署_java_15

到这步提前是zk集群已经成功启动运行


11、zk集群的节点状态说明

启动客户端:

[root@s1 zookeeper-3.4.10]$ bin/zkCli.sh
ls /   # 查看所有根节点

activem集群 activemq集群部署_activemq_16

观察到我们上面的activemq已经连接到了zookepper里面

阿昌遇到的问题

启动后zk集群后,并连接,发现没有上图自己设置的activemq,找了好久的原因,以为自己上面配置流程出错了。后面发现,自己的3台activemq都没启动,所以才会没有。如果还有问题就一个一个restart一下activemq!!!

activem集群 activemq集群部署_activem集群_17

查看我的节点状态 :

get /activemq/leveldb-stores/00000000022

activem集群 activemq集群部署_activem集群_18

此次验证表明 00000000020 的节点状态是master ,而其余的(00000000021 00000000022 ) activemq 的节点是 slave

如此集群顺利搭建成功 !!!!!!!!!


2、集群可用性测试

此次测试表明只有 8162 的端口可以使用,也就是8162 代表的就是master

activem集群 activemq集群部署_activemq_19

其他的8161、8163都访问不了

activem集群 activemq集群部署_activem集群_20

测试集群可用性:

(1)首先:

修改代码

public static final String ACTIVEMQ_URL = "failover:(tcp://192.168.109.101:61616,tcp://192.168.109.101:61617,tcp://192.168.109.101:61618)?randomize=false";

public static final String QUEUE_NAME = "queue_cluster";

activem集群 activemq集群部署_activem集群_21

activem集群 activemq集群部署_分布式_22

以上代表集群可以正常使用 !!↑


此时真正的可用性测试:

kill 11470 # 现在的master activemq

activem集群 activemq集群部署_zookeeper_23

马上对应的8162失效

activem集群 activemq集群部署_zookeeper_24

但是马上就会选出新的master,实现了高可用

activem集群 activemq集群部署_java_25

这样! 集群的可用性测试成功!!!