天天看点

Activemq+Zookeeper集群

简介

  activemq基于master-slave集群实现方式有多种,主要为目录共享和数据库共享,但从activemq5.9.0版本开始,增加了基于zookeeper+leveldb的实现方式。借助于zookeeper,因此至少需要(replicas/2)+1个activemq服务存活才能保证集群的正常运行,从而避免单点故障,缺点是没有负载均衡的作用。

准备

10.10.2.20 zookeeper1 activemq1

10.10.2.21 zookeeper2 activemq2

10.10.2.22 zookeeper3 activemq3

安装与配置

  • 一.zookeeper安装配置

以下操作是在其中一台上,其他两台按照如下配置即可。

1.添加hosts

vim /etc/hosts
 amq1
 amq2
 amq3
           

2.配置java环境

vim /etc/profile
    ##JAVA###
    export JAVA_HOME=/usr/local/jdk1._71
    export JRE_HOME=/usr/local/jdk1._71/jre
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    source /etc/profile
           

3.安装zookeeper

cd /usr/local/src
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-/zookeeper-.tar.gz
tar -zxvf zookeeper-.tar.gz -C /usr/local
           

4.配置zk的环境变量

vim /etc/profile
#zookeeper
ZOOKEEPER_HOME=/usr/local/zookeeper-.
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile
           

5.修改zookeeper配置文件

#创建zookeeper的数据目录和日志目录
mkdir -p /data/zookeeper/zk1/{data,log}
cd /usr/local/zookeeper-/conf
cp zoo_sample.cfg zoo.cfg
vim /etc/zoo.cfg
tickTime=
initLimit=
syncLimit=
dataDir=/data/zookeeper/zk1/data
dataLogDir=/data/zookeeper/zk1/log
clientPort=
server=amq1::
server=amq2::
server=amq3::
           

6.在dataDir下创建myid文件,对应节点id

#在20上 
cd /data/zookeeper/zk1/data
echo  > myid
#在21上 
cd /data/zookeeper/zk2/data
echo  > myid
#在22上 
cd /data/zookeeper/zk3/data
echo  > myid
           

7.启动zookeeper服务

依次在3台服务器上启动zk服务

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

注:注:在你所在的当前目录下会生成一个zookeeper.out的日志文件,里面记录了启动过程中的详细信息;由于集群没有全部信息,会报“myid 2或myid 3 未启动”的信息,当集群全部启动后就会正常,我们可以忽略。

8.查看zookeeper所有节点的状态

#20
/usr/local/zookeeper-/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-/bin/../conf/zoo.cfg
Mode: leader
#21
/usr/local/zookeeper-/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-/bin/../conf/zoo.cfg
Mode: follower
#22
/usr/local/zookeeper-/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-/bin/../conf/zoo.cfg
Mode: follower
           
  • 二.activemq安装配置

activemq5.12需要jre1.7(1.6 for version <=5.10.0)

1.安装

[root@test ~]# cd /usr/local/src
[root@test src]# wget http://mirrors.hust.edu.cn/apache/activemq/5.12.1/apache-activemq-5.12.1-bin.tar.gz
[root@test src]# tar -zxvf apache-activemq-5.12.1-bin.tar.gz 
[root@test src]# mv apache-activemq-5.12.1 /usr/local/
           

2.配置

在3台服务器上做同样配置,需注意个别参数配置。

[root@test apache-activemq-.]# vim conf/activemq.xml
 <persistenceAdapter>
      <replicatedLevelDB 
         directory="${activemq.data}/leveldb"
         replicas="3"
         bind="tcp://0.0.0.0:0"
         zkAddress="10.10.2.20:2181,10.10.2.21:2181,10.10.2.22:2181" 
         hostname="10.10.2.20"
         sync="local_disk"
         zkPath="/activemq/leveldb-stores"
      />
 </persistenceAdapter>
           

其中:

directory : 存储数据的路径

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

bind : 当这个节点成为Master, 它会绑定配置好的地址和端口来履行主从复制协议,默认端口为61616

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

zkPassword : 当连接到ZooKeeper服务器时用的密码,此处由于没有密码

hostname : 本机ip

sync : 在认为消息被消费完成前, 同步信息所存贮的策略, 如果有多种策略用逗号隔开, ActiveMQ会选择较强的策略(local_mem, local_disk则肯定选择存贮在本地硬盘)

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

注意: 在某些情况下,可以调整下zkSessionTimeout参数,以免网络波动或其他情况导致不必要的重新选举。

zkSessionTimeout参数

3.启动服务

依次在3台服务器上启动服务,会启动activemq的8161和61616两个端口;由于zookeeper机制,并不是3台服务器都会启动这两个端口,zk确保只有一台会启动这两个端口对外提供服务。

/usr/local/apache-activemq-/bin/activemq start
           

总结

  zookeeper+activemq的配置方案,能够提供(3-1)/2的容错率,也就是3台服务器允许宕机一台,而不影响整个集群的对外提供服务。

  客户端连接使用failover方案:

mq.broker.url=failover:(tcp://192.168.1.191:61616,tcp://192.168.1.192:61616,tcp://192.168.1.193:61616)?initialReconnectDelay=1000

关掉其中任何一台,经过测试能够正常提供服务,客户端会自动切换连接,从而避免单点故障。