多节点集群
大概流程:
1.环境和版本
2.关闭防火墙并保证windows可以ping通过Activemq
3.要求具备zK集群并可以成功启动
4.集群部署规划列表
5.创建3台集群目录
6,修改管理控制台端口
7. hostname名字映射
8. AcitveMQ群配置
9. 修改各节点的消息端口
10. 按顺序启动3个ActiveMQ节点,到这步前提是zk集群已经成功启动运行
ActiveMQ如何保证高可用:集群搭建
zookeeper集群中都会有一个master,当 Master 宕机后,zookeper 监测到没有心跳信号, 则认为 master 宕机了,然后选举机制会从剩下的 Slave 中选出一个作为 新的 Master
所以,首先搭建zk集群,我这里是用一台机器搭建的一个伪集群
1、.登陆zookeeper官网下载 https://zookeeper.apache.org/
上传到linux后再复制两份出来
分别修改每份下conf/zoo.cfg配置文件,如果没有,就复制zoo_sample.cfg并改名为zoo.cfg
dataDir 对应目录要手动创建下
dataLogDir 对应目录要手动创建下
clientPort 端口修改一下
server.1=192.168.1.166:4000:5000
server.2=192.168.1.166:4001:5001
server.3=192.168.1.166:4002:5002
修改conf/zoo.cfg 后,myid文件中的内容也要修改,id要对应起来,因为zoo.cfg文件中和myid文件中的id对不上,可能会启动失败。
把对应的id数字写进去,分别进入zookeeper配置的dataDir目录,执行
echo “1”>myid.pid
echo “2”>myid.pid
echo “3”>myid.pid
然后启动三个服务,这个可以写一个脚本启动
注意:脚本写完需要修改权限为可执行的脚本
chmod 700 zk_batch.sh
启动成功后可以使用jps查看进程
可以进入bin目录下查看各个服务的状态
./zkServer.sh status
2、ActiveMQ集群
1、新建 /mq_cluster文件夹 将原始的解压文件复制三个,进入conf/jetty.xml修改管理控制台端口
增加IP 到域名的映射(/etc/hosts 文件)
进入到conf/activemq.xml中,修改为相同的borkername(3个都修改)
改为 replica levelDB (3个都配,这里列举一个)
<persistenceAdapter>
<replicatedLevelDB
directory="{activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:63631"
zkAddress="localhost:2191,localhost:2192,localhost:2193" //zk集群地址
sync="local_disk"
zkPath="/activemq/leveldb-stores"
hostname="mq-server" //上一步IP 到域名的映射的名称
/>
</persistenceAdapter>
改端口(三个都改,分别为61617、61618、61619)
activemq集群搭建完成后,需要先启动zk集群,然后在启动mq集群,mq集群的启动和关闭同样可以写一个脚本,跟上述的zk脚本一致,修改路径即可,这样方便我们操作
启动完成后,可以连接一个zk的客户端查看
./zkCli.sh -server 127.0.0.1:2191
连接成功后可以查看mq的三个节点
查看节点状态
get /activemq/leveldb-stores/00000000003
可以看到 00000003 的节点状态是master (即为63631 的那个mq 服务) 而其余的00000004、 00000005 activemq 的节点是 slave
到此activemq集群搭建成功
查看三个端口只有8161可以使用,也就是所谓的master
集群可用性测试:
修改代码
public static final String ACTIVEMQ_URL = "failover:(tcp://xxx.xxx.xxx.xxx:61616,tcp://xxx.xxx.xxx.xxx:61617,
tcp://xxx.xxx.xxx.xxx:61618)?randomize=false";
public static final String QUEUE_NAME = "queue_cluster";
正常测试:
收到三条消息
可用性测试:
杀死8161端口号
这时8161宕机后,8162激活了(也就是8162被选举为master)
继续向mq发送消息,这时会自动连接上激活的服务
到此activemq可用性测试完成