5.ActiveMQ-Zookeeper主从搭建

ZooKeeper实现的MasterSlave实现方式,是对ActiveMQ进行高可用的一种有效的解决方案,高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQBroker。只有其中的一个Broker可以对外提供服务(也就是Master节点),其他的Broker处于待机状态,被视为Slave。如果Master因故障而不能提供服务,则利用ZooKeeper的内部选举机制会从Slave中选举出一个Broker充当Master节点,继续对外提供服务。

 

Zookeeper方案

主机IP 消息端口 通信端口 节点目录/opt/下
192.168.136.175 2181 2888:3888 zookeeper
192.168.136.176 2181 2888:3888 zookeeper
192.168.136.178 2181 2888:3888

zookeeper

ActiveMQ方案

主机IP 集群通信端口 消息端口 控制台端口 节点目录/opt/下
192.168.136.175 62621 51511 8161 activemq-cluster/node
192.168.136.176 62621 51511 8162 activemq-cluster/node
192.168.136.178 62621 51511 8163 activemq-cluster/node

 

1. 下载 zookeeper 和 activemq 

http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/

http://activemq.apache.org/activemq-5156-release.html

 

2. 执行 tar -zxvf zookeeper-3.4.13.tar.gz -C /opt/ 解压 zookeeper 到 /opt 目录下。

    执行 mv zookeeper-3.4.13/ zookeeper  改名 为 zookeeper 

    然后到 /etc/profile 下配置 zookeeper 环境变量。

 

3. 修改 /opt/zookeeper/conf/zoo_sample.cfg 文件配置,执行 mv zoo_sample.cfg zoo.cfg 修改名称。

配置完之后,回到上级目录, mkdir data 创建 data 文件夹。然后创建一个名为 myid 的文件,文件内容为0。另外两台服务器为1和2。

启动 zookeeper

另外两台机子,应该就是follower

 

3. 创建 /opt/activemq-cluster 文件夹,然后执行 tar -zxvf apache-activemq-5.15.6-bin.tar.gz -C /opt/activemq-cluster/ 。接在 cd /opt/activemq-cluster,在 activemq-cluster 目录下执行 mv apache-activemq-5.15.6 node 把文件夹名字改为 node。

 

4. 修改node/conf/jetty.xml 文件配置,端口改为8161,8162,8163。默认8161,有一个机器不需要修改。

 

5. 修改activemq.xml文件配置

第一处修改:brokerName="activemq-cluster"

第二处修改:先注释掉适配器中的kahadb,然后下入一下配置

<replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:62621" zkAddress="192.168.136.175:2181,192.168.136.176:2181,192.168.136.175:2181" hostname="activemq-1" zkPath="/activemq/leveldb-stores">

第三处修改:消息端口改为 51511

搭建完毕!!!

 

启动 activemq,在bin目录下执行 ./activemq start

执行 zkCli.sh 进入 zookeeper 。可以看见有三个挂载点。

或者用 ZooInspector 工具也可以看到

java 代码中 URL 为:

failover:(tcp://192.168.136.175:51511,tcp://192.168.136.176:51512,tcp://192.168.136.178:51513)?Randomize=false

 

搭建中遇到的问题:

防火墙需要关闭,不然zk集群的时候连接不上。关闭防火墙:service iptables stop

hostname找不到,报 Unexpected session error 。这个是因为配置的时候hostname=activemq-1,但是另外两台机器不知道  activemq-1 的ip 是什么。需要去 /etc/hosts 下配置主机名称。