ActiveMQ集群搭建+ZooKeeper
在虚拟机安装centos7,要提前安装好jdk环境
工作流程:
在ZooKeeper中管理多个Broker节点,根据 Master选举策略让其中一个 Broker选举为Master(只有Master才具备对外提供服务的能力),剩下Broker为slave。
编码时,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.xml和conf/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
三、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");