ActiveMQ
ActiveMQ多节点集群
1、部署规划和步骤
1、大概流程:
如何保证高可用 ==》 搭建集群
ZooKeeper + Replicated LevelDB Store
集群 http://activemq.apache.org/replicated-leveldb-store
这幅图的意思就是 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
分别将每台的端口 (jetty.xml)修改为 8161、8162、8163
7、host名字映射
红框部分修改为自己的ip和地址i映射
ip addr #查看ip
8、ActiveMQ集群配置
配置三台activemq的broker_Name
为一致:achang
3个activemq节点的持久化配置:↓
三个都要配置,bind绑定的端口分别为:63631、63632、63633
9、修改各activemq节点的消息端口
修改三台节点的后台消息端口分别为:61616、61617、61618
10、按顺序启动3个ActiveMQ节点
启动至少3台的zookeeper集群:
到这步提前是zk集群已经成功启动运行
11、zk集群的节点状态说明
启动客户端:
[root@s1 zookeeper-3.4.10]$ bin/zkCli.sh
ls / # 查看所有根节点
观察到我们上面的activemq已经连接到了zookepper里面
阿昌遇到的问题:
启动后zk集群后,并连接,发现没有上图自己设置的activemq,找了好久的原因,以为自己上面配置流程出错了。后面发现,自己的3台activemq都没启动,所以才会没有。如果还有问题就一个一个restart一下activemq!!!
查看我的节点状态 :
get /activemq/leveldb-stores/00000000022
此次验证表明 00000000020 的节点状态是master ,而其余的(00000000021 00000000022 ) activemq 的节点是 slave
如此集群顺利搭建成功 !!!!!!!!!
2、集群可用性测试
此次测试表明只有 8162 的端口可以使用,也就是8162 代表的就是master
其他的8161、8163都访问不了
测试集群可用性:
(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";
以上代表集群可以正常使用 !!↑
此时真正的可用性测试:
kill 11470 # 现在的master activemq
马上对应的8162失效
但是马上就会选出新的master,实现了高可用
这样! 集群的可用性测试成功!!!