Zookeeper+ActiveMQ搭建集群实现高可用

本文详细介绍了如何在三台服务器上搭建Zookeeper和ActiveMQ集群,确保高可用性。首先,配置并启动Zookeeper集群,接着在每台服务器上配置ActiveMQ,修改activemq.xml文件启用LevelDB并设置集群参数。通过ZooKeeper进行集群注册,确保故障转移能力。最后,通过ZooInspector验证集群工作状态,并进行了故障模拟测试,证明了集群的高可用性。
摘要由CSDN通过智能技术生成

一、搭建Zookeeper集群

Zookeeper搭建方案 

服务器编号服务器IP地址LF通信端口LF选举端口客户端端口
1192.168.184.127288838882181
2192.168.184.128288838882181
3192.168.184.129288838882181

由于是在三台不同的服务器上搭建的集群,为了操作方便,所以每台机器上创建的文件夹都是相同路径,相同名称的 

2、将 zookeeper-3.4.14.tar.gz 分别上传到三台服务器上,每台服务器上分别使用命令解压得 zookeeper-3.4.14 文件夹

1

2

// 解压 zookeeper 的压缩包

tar -zxvf zookeeper-3.4.14.tar.gz

3、分别在三台服务器的 zookeeper-3.4.14 文件夹下,新建文件夹 mylog、mydata,用于存放 zookeeper 的日志和数据

4、进入 zookeeper-3.4.14 下的 conf 文件夹下,复制 zoo_sample.cfg 并且命名为 zoo.cfg

5、编辑 zoo.cfg (由于我们这里不是伪集群,是在三台不同的服务器上进行的集群,所以三台机器的配置文件是一样的)

14

15

16

17

18

19

20

21

22

23

24

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/usr/local/zookeeper/zookeeper-3.4.14/mydata

dataLogDir=/usr/local/zookeeper/zookeeper-3.4.14/mylog

clientPort=2181

server.1=192.168.184.127:2888:3888

server.2=192.168.184.127:2888:3888

server.3=192.168.184.127:2888:3888

6、在 zookeeper-3.4.14 的 mydata 文件下下面新建 myid 文件,并编辑 myid 文件,并且在里面写入对应的 server 的数字

1

2

3

4

// 进入 mydata 目录下

[root@CentOS001 bin]# cd /usr/local/zookeeper/zookeeper-3.4.14/mydata

// 新建文件 myid

[root@CentOS001 bin]# touch myid

7、同时启动三台服务器上的 zookeeper 服务,并且三台服务器的角色信息如下

启动服务的时候需要注意,一定要等全部启动完成之后再去查看状态,可能稍微有一点点延迟,如果启动一台或者两台使用 ./zkServer.sh status 去查看状态的话,会有 Error conftacting service,It is probably not running 的报错信息,如果不能正常启动,去 zookeeper.out 文件中查看不能启动的原因.

二、搭建ActiveMQ集群

1、ActiveMQ搭建方案

服务器IP地址ActiveMQ后台端口ActiveMQ管理控制台端口
192.168.184.127616178161
192.168.184.128616178161
192.168.184.129616178161

2、拷贝压缩包到 /otp 目录下,之所以放置在 /opt 目录下,是为了备份一个压缩包,方便以后再用

1

2

// 复制压缩包到安装目录下,我这里的安装目录是自己在 /usr/local/下新建的一个activemq目录

[root@CentOS001 bin]# cp -r apache-activemq-5.15.5-bin.tar.gz /usr/local/activemq/

3、解压缩到当前目录

4、进入解压后的文件目录

5、修改activemq.xml配置文件,使用性能比较好的LevelDB替换掉默认的KahaDB

配置项说明
directory持久化数据存放地址(默认的情况下${activemq.data}下是没有leveldb目录的,要自己创建)
replicas集群中节点的个数(由于我们是三台服务器搭建的ActiveMQ,所以replicas的数量是3)
bind集群通信端口
zkAddressZooKeeper集群地址
hostname当前服务器的IP地址,如果集群启动的时候报未知主机名错误,那么就需要配置主机名到IP地址的映射关系
zkPathZooKeeper数据挂载点(集群启动成功之后,会在zookeeper下自动注册该节点)

主机名配置如下:

设置主机名(三台主机分别执行)

# hostnamectl set-hostname CentOS001

# hostnamectl set-hostname CentOS002

# hostnamectl set-hostname CentOS003 

各主机解析(三台主机分别执行)

# vi /etc/hosts

 192.168.184.127 CentOS001

 192.168.184.128 CentOS002

 192.168.184.129 CentOS003

三台ActiveMQ服务器的配置如下:

192.168.184.127服务器

[root@CentOS001 bin]# vim /usr/local/activemq/apache-activemq-5.15.5/conf/activemq.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<!-- 三台服务器的brokerName一定要保持一致 -->

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-zookeeper-test" dataDirectory="${activemq.data}">

<persistenceAdapter>

    <!--注释掉或者删除掉kahaDB-->

    <!--kahaDB directory="${activemq.data}/kahadb"/ -->

        <replicatedLevelDB

        directory="${activemq.data}/leveldb"

        replicas="3"

        bind="tcp://0.0.0.0:61617"

        zkAddress="192.168.184.127:2181,192.168.184.128:2181,192.168.184.129:2181"

        hostname="CentOS001"   

        zkPath="/activemq/leveldb-stores"/>

</persistenceAdapter>

192.168.184.128服务器

[root@CentOS002 bin]# vim /usr/local/activemq/apache-activemq-5.15.5/conf/activemq.xml

1

2

3

4

5

6

7

8

9

10

11

12

<!-- 三台服务器的brokerName一定要保持一致 -->

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-zookeeper-test" dataDirectory="${activemq.data}">

<replicatedLevelDB

<!--kahaDB directory="${activemq.data}/kahadb"/ -->

        directory="${activemq.data}/leveldb"

        replicas="3"

        bind="tcp://0.0.0.0:61617"

        zkAddress="192.168.184.127:2181,192.168.184.128:2181,192.168.184.129:2181"

        hostname="CentOS002"   

        zkPath="/activemq/leveldb-stores"/>

</persistenceAdapter>

192.168.184.129服务器

[root@CentOS003 bin]# vim /usr/local/activemq/apache-activemq-5.15.5/conf/activemq.xml

1

2

3

4

5

6

7

8

9

10

11

12

<!-- 三台服务器的brokerName一定要保持一致 -->

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-zookeeper-test" dataDirectory="${activemq.data}">

<replicatedLevelDB

        <!--kahaDB directory="${activemq.data}/kahadb"/ -->

        directory="${activemq.data}/leveldb"

        replicas="3"

        bind="tcp://0.0.0.0:61617"

        zkAddress="192.168.184.127:2181,192.168.184.128:2181,192.168.184.129:2181"

        hostname="CentOS003"   

        zkPath="/activemq/leveldb-stores"/>

</persistenceAdapter>

 

默认情况下启动时,ActiveMQ管理后台绑定到127.0.0.1:8161,这表示我们只能在本地访问,这肯定是不能接受的,我们需要修改这个地址,三台都修改。

打开/usr/local/activemq/apache-activemq-5.15.5/conf/jetty.xml,找到id="jettyPort"的bean,  

 修改这里的host成0.0.0.0,端口随意,也可以使用默认的8161:  

    <bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
             <!-- the default port number for the web console -->
        <property name="host" value="0.0.0.0"/>
        <property name="port" value="8161"/>
    </bean>
 

三、启动集群

  1、操作之前保证关闭防火墙,并且windows和Linux相互之间是可以ping通的

  2、先启动ZooKeeper集群,因为只有zookeeper集群启动之后,你才能将ActiveMQ服务在zookeeper上注册  

  3、然后再分别启动三台ActiveMQ服务器

启动命令:/usr/local/activemq/apache-activemq-5.15.5/bin/activemq start

启动后,查看日志文件,日志目录:/usr/local/activemq/node1/data/activemq.log

最后,ActiveMQ的主从模型,是一种高可用的解决方案,在zookeeper中注册若干的ActiveMQ Broker,其中只有一台作为主机master对外提供服务,其他作为备份slave保持待机。当master出现问题导致宕机不能正常提供服务的时候,zookeeper通过内部选举,在众多slave中推举出一台作为master继续对外提供服务。

activemq集群最多支持损坏一个节点,若损坏2台,集群所有节点将停止运行

集群中只有master对外提供服务,其他两个slave不对外提供服务,当访问activemq管理后台时,可以用“nerstat -antup | grep 端口” 命令分别查看哪台的8161在运行,运行哪个,我们就使用“http://IP:端口”访问哪个

 

四、测试

  使用ZooInspector工具来查看具体的内容,可以参考Zookeeper 数据查看工具 ZooInspector 的使用 - 变体精灵 - 博客园这篇博客来了解关于ZooInspector的使用

  通过查看Zookeeper的节点信息情况,可以得出192.168.184.127被选举成了主机,那么使用该主机去登录ActiveMQ的客户端,可以登录成功

  使用命令 ./activemq stop 关闭 192.168.184.127这台主机,查看ZooInspector,发现zookeeper通过选举机制推举出了新的主机 192.168.184.128,使用该主机访问ActiveMQ的控制台,发现可以登录ActiveMQ的管理控制台

  重新启动192.168.184.127这台服务器,保证三台服务器同时在线,然后手动down掉一台slaver,发现ActiveMQ依旧可以提供服务,如果半数的服务器是正常的情况下,整个集群就能正常工作,这样就保证了高可用

  至此,整个集群的搭建就完成了.

原博主地址:Zookeeper+ActiveMQ搭建集群实现高可用 - 变体精灵 - 博客园

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值