zoukankan      html  css  js  c++  java
  • 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的仪表盘发现:只用其中的一台可以使用;停掉这台可以使用的,剩下两台中会通过选举算法再选出一个主节点提供服务。

  • 相关阅读:
    hdu 2680 最短路径(dijkstra算法+多源最短路径单源化求最小值)
    kmp算法
    STP根交换机,指定端口,根端口,阻塞端口
    python,django安装
    交换机access与trunk口
    树状数组
    hdoj 2191(多重背包)
    hdoj 2601(判断N=i*j+i+j)
    二维背包经典问题
    hdoj 2602(背包)
  • 原文地址:https://www.cnblogs.com/nm666/p/10452329.html
Copyright © 2011-2022 走看看