zookeeper+ActiveMQ集群实现高可用

MQ学习系列:

  1. 消息队列概念与认知
  2. ActiveMQ Topic消息重发
  3. ActiveMQ Topic 持久化订阅
  4. zookeeper+ActiveMQ集群实现高可用

使用ZooKeeper实现的Master-Slave实现方式,是对ActiveMQ进行高可用的一种有效的解决方案。

高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个Broker可以对外提供服务(也就是Master节点),其他的Broker处于待机状态,被视为Slave。如果Master因故障不能提供服务,则利用ZooKeeper的内部选举机制从 Slave中选举出一个Broker充当Master节点,继续对外提供服务。通过ZooKeeper+ActiveMQ实现的集群,可以有效的排除单点故障引起的服务中断。

1、环境准备

(1)准备三台虚拟机(没有真实环境只能用虚拟机了),IP分别为:

  • 192.168.121.128
  • 192.168.121.131
  • 192.168.121.132

关于VM虚拟机下安装centos7并且克隆出多个系统:这里 (来源网络|VMware 14自动分配ip,后半部分可以不看)。

(2)安装JDK

CentOS 7上会默认安装了OpenJDK,默认版本是1.7

[n@localhost Desktop]$ java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
[n@localhost Desktop]$ 

当然也可安装其他版本的JDK而不是用默认的JDK,安装步骤如下:

a. 上传并解压 [这里推荐WinSCP连接虚拟机]

tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/local/java

b. 删除压缩包[理由:浪费空间]

rm jdk-8u201-linux-x64.tar.gz

c. 编辑配置文件配置环境变量

vim /etc/profile
添加如下内容:JAVA_HOME根据实际目录来
export JAVA_HOME=/usr/local/java/jdk1.8.0_201/
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME="$JAVA_HOME/jre"
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/rt.jar

d. 重新加载配置或者重启虚拟机

source /etc/profile

sudo shutdown -r now

c. 更该Linux默认安装的OpenJDK为自己安装的JDK[如下命令]

[root@localhost ~]# java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
[root@localhost ~]# cd /usr/bin
[root@localhost bin]# ln -s -f /usr/local/java/jdk1.8.0_201/jre/bin/java
[root@localhost bin]# ln -s -f /usr/local/java/jdk1.8.0_201/bin/javac
[root@localhost bin]# rm -f /usr/bin/java
[root@localhost bin]# rm -f /usr/bin/javac
[root@localhost bin]# rm -f /etc/alternatives/java
[root@localhost bin]# rm -f /etc/alternatives/javac
[root@localhost bin]# java -version
-bash: /usr/bin/java: No such file or directory
[root@localhost bin]# cd ..
[root@localhost usr]# source /etc/profile
[root@localhost usr]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@localhost usr]#

(3)安装zookeeper和activeMQ

Linux上 zookeeper安装过程:

a. 将下载的zookeeper安装包分别上传到三台虚拟机上

b. 解压压缩包

tar -zxvf zookeeper-3.4.13.tar.gz -C /usr/local

c. 将/usr/local下的zookeeper-3.4.13重命名

mv zookeeper-3.4.13 zookeeper

d. 在zookeeper目录下创建两个目录data和logs,分别存放数据和日志

mkdir data

mkdir logs

f. 复制zookeeper/conf目录下的zoo_sample.cfg文件并重命名zoo.cfg

cp zoo_sample.cfg zoo.cfg

Linux上 activeMQ安装过程:

a. 将下载的activemq安装包分别上传到三台虚拟机上

b. 解压压缩包

tar -zxvf apache-activemq-5.15.8-bin.tar.gz -C /usr/local/

c. 重命名

mv apache-activemq-5.15.8 activemq


三台虚拟机按照如上过程安装即可,事实上,我们可以只安装一台然后克隆几台虚拟机,哈哈哈。

2、集群配置

第一步:在/usr/local/zookeeper/data下创建myid文件,文件内容为1。同理,其他虚拟机中也创建myid文件,内容分别为2和3。

第二步:修改/usr/local/zookeeper/conf/zoo.cfg文件,加入以下内容。

dataDir=/usr/local/zookeeper/data/
dataLogDir=/usr/local/zookeeper/logs
server.1=192.168.121.128:2888:3888
server.2=192.168.121.131:2888:3888
server.3=192.168.121.132:2888:3888

第三步:分别启动三台zookeeper(需要关闭防火墙)

service iptables stop

 centOS7 查看防火墙
 systemctl list-unit-files | grep firewalld
 systemctl list-unit-files | grep iptables

/usr/local/zookeeper/bin/zkServer.sh start

通过/usr/local/zookeeper/bin/zkServer.sh status我们可以看到其中一台虚拟机zookeeper的mode为leader剩下两台为Mode: follower

第四步:修改/usr/local/activemq/conf目录下的activemq.xml

修改brokerName='activemq-cluster'

将文件持久化配置器改为:

<persistenceAdapter>
    <replicatedLevelDB
     directory="${activemq.data}/leveldb"
     replicas="3"
     bind="tcp://0.0.0.0:0"
     zkAddress="192.168.121.128:2181,192.168.121.131:2181,192.168.121.132:2181"
     hostname="192.168.121.128"
     zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>

第五步:启动activemq

./bin/activemq start

访问三台服务器的ActiveMQ的仪表盘发现:只用其中的一台可以使用;停掉这台可以使用的,剩下两台中会通过选举算法再选出一个主节点提供服务。

posted @ 2019-02-28 18:41  厨房有只偷吃的猫  阅读(856)  评论(0编辑  收藏  举报