ActiveMQ集群搭建+ZooKeeper

在虚拟机安装centos7,要提前安装好jdk环境

工作流程:
ZooKeeper中管理多个Broker节点,根据 Master选举策略让其中一个 Broker选举为Master(只有Master才具备对外提供服务的能力),剩下Brokerslave
编码时,client端(消费者)通过failover协议来连接ActiveMQ集群。

一、zookeeper 安装配置

 

服务端口

投票端口

选举端口
zk1 2181 2887 3887
zk2 2182 2888 3888
zk3 2183 2889 3889

 

在/Tools/zookeeper下复制3个zookeeper服务,并分别配置它们的文件conf/zoo.cfg:

zk1.   

   # /home/admin/Tools/zookeeper01   虚拟机zookeeper安装路径

    dataDir=/home/admin/Tools/zookeeper01/data

    dataLogDir=/home/admin/Tools/zookeeper01/log

#服务端口

clientPort=2181

# zk集群之间的通信地址

server.1=192.168.23.129:2887:3887

server.2=192.168.23.129:2888:3888

server.3=192.168.23.129:2889:3889

ZK2.

# zookeeper的数据存储和日志存储目录

dataDir=/home/admin/Tools/zookeeper02/data

dataLogDir=/home/admin/Tools/zookeeper02/log

#服务端口

clientPort=2182

# zk集群之间的通信地址

server.1=192.168.23.129:2887:3887

server.2=192.168.23.129:2888:3888

server.3=192.168.23.129:2889:3889

ZK3.   

dataDir=/home/admin/Tools/zookeeper03/data

dataLogDir=/home/admin/Tools/zookeeper03/log

#服务端口

clientPort=2183

# zk集群之间的通信地址

server.1=192.168.23.129:2887:3887

server.2=192.168.23.129:2888:3888

server.3=192.168.23.129:2889:3889

 

依次启动

zookeeper01/bin/zkServer.sh  start

zookeeper02/bin/zkServer.sh  start

zookeeper03/bin/zkServer.sh  start

查询状态

zookeeper01/bin/zkServer.sh  status

返回Leader follower  证明zookeeper 安装成功;

 

activeMQ安装配置

 

--

M-S 通讯

服务端口

jetty控制台端口

Mq01

62626

61616

8161

Mq02

62627

61617

8162

Mq03

62628

61618

8163

 

1. 修改ActiveMQ配置文件conf/activemq.xmlconf/jetty.xml

 注意:配置中brokerName名称必须一致,否则不能集群

Mq01:

Activemq.xml 配置

1). <broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster" dataDirectory="${activemq.data}">

2).<transportConnectors>

    <!-- node1服务端口使用默认端口61616 -->

    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>

   </transportConnectors>

3).<!-- 持久化的部分为ZooKeeper集群连接地址-->  

<persistenceAdapter>  

    <replicatedLevelDB  

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

      replicas="3"  

      bind="tcp://0.0.0.0:62626"  

      zkAddress="192.168.23.129:2181,192.168.23.129:2182,192.168.23.129:2183"   

      zkPath="/activemq/leveldb-stores"  

      hostname="mq-server" />  

</persistenceAdapter>

 

hostname="mq-server"  正式环境    mq-server01     mq-server02   mq-server03等等 在etc/hosts中做映射

<!--

# directory: 存储数据的路径

# replicas:集群中的节点数【(replicas/2)+1公式表示集群中至少要正常运行的服务数量】,3台集群那么允许1台宕机, 另外两台要正常运行  

# bind:当该节点成为master后,它将绑定已配置的地址和端口来为复制协议提供服务。还支持使用动态端口。只需使用tcp://0.0.0.0:0进行配置即可,默认端口为61616。

# zkAddress:ZK的ip和port, 如果是集群,则用逗号隔开(这里作为简单示例ZooKeeper配置为单点, 这样已经适用于大多数环境了, 集群也就多几个配置)

# zkPassword:当连接到ZooKeeper服务器时用的密码,没有密码则不配置。

# zkPah:ZK选举信息交换的存贮路径,启动服务后actimvemq会到zookeeper上注册生成此路径   

# hostname: ActiveMQ所在主机的IP

# 更多参考:http://activemq.apache.org/replicated-leveldb-store.html

-->

jetty.xml 配置

<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">

    <property name="host" value="0.0.0.0"/>

<property name="port" value="8161"/>

 <!-- 在这里修改端口为8161,默认就是8161 -->

</bean>

Mq02:

Activemq.xml 配置

1). <broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster" dataDirectory="${activemq.data}">

2).<transportConnectors>

    <!-- node1服务端口使用默认端口61616 -->

    <transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>

   </transportConnectors>

 

3).<!-- 持久化的部分为ZooKeeper集群连接地址-->  

<persistenceAdapter>  

    <replicatedLevelDB  

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

      replicas="3"  

      bind="tcp://0.0.0.0:62627"  

      zkAddress="192.168.23.129:2181,192.168.23.129:2182,192.168.23.129:2183"   

      zkPath="/activemq/leveldb-stores"  

      hostname="mq-server"  

      />  

</persistenceAdapter>

<!--

# directory: 存储数据的路径

# replicas:集群中的节点数【(replicas/2)+1公式表示集群中至少要正常运行的服务数量】,3台集群那么允许1台宕机, 另外两台要正常运行  

# bind:当该节点成为master后,它将绑定已配置的地址和端口来为复制协议提供服务。还支持使用动态端口。只需使用tcp://0.0.0.0:0进行配置即可,默认端口为61616。

 

jetty.xml 配置

<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">

    <property name="host" value="0.0.0.0"/>

<property name="port" value="8162"/>

 <!-- 在这里修改端口为8162,默认就是8161 --></bean>

同理,修改mq3的配置信息,这里不再重复;

依次启动activemq服务

注意,启动前需要修改HOST配置文件,

修改host

 

命令:vi /etc/hosts

 

192.168.23.129 mq-server

测试:

Ping mq-server  ,验证是否能ping 通;

然后依次启动

mq01/bin/activemq start

mq02/bin/activemq start

mq03/bin/activemq start

输入命令 :ps -ef|grep activemq # 检查进程是否运行,即activemq是否启动成功

三、Client使用

该zookeeper+activemq的集群Master Slave部署方案,能够提供(3-1)/2的容错率,即3台服务器允许宕机一台,而不影响整个集群的对外提供服务。

编写代码连接时使用failover策略:

IConnectionFactory factory = new ConnectionFactory("failover:tcp://192.168.23.129:61616,tcp://192.168.23.129:61617,tcp://192.168.23.129:61618");

 

posted on 2019-08-21 12:20  @atn  阅读(256)  评论(0编辑  收藏  举报

导航