硬件环境:
三台linux服务器:192.168.2.13,192.168.2.15,192.168.2.16。
推荐部署在三台机器上,都部署在一台机器还是会有单点故障,最少1G的内存就够了。
下载最新版本的zookeeper,apache-activemq(都是linux的64位,jdk什么的就不说了)
下面的配置三台机器基本都是一样,特别之处有备注,下面开始搭建。
1.新建文件夹 mqzk (可自己定义)
2.解压zookeeper,activmq到此目录。这里路径为:~/mqzk/zookeeper, ~/mqzk/activmq
3.配置zookeeper
3.1 配置conf/zoo.cfg(zoo.cfg默认不存在的,需要把zoo_sample.cfg文件名称修改为zoo.cfg)
打开zoo.cfg,修改dataDir=当前zookeeper的data文件夹目录(如果没有data文件夹,就创建一个)
这里有三台zookeeper所以这里要配置下集群server,在zoo.cfg最后面添加三行:
server.1=192.168.2.13:2888:3888 (本机ip)
server.2=192.168.2.15:2888:3888 (第二台机ip)
server.3=192.168.2.16:2888:3888 (第三台机ip)
这里的三个server,对应着3台linux服务器(ok)。
保存退出。
3.2 进入 ~/mqzk/zookeeper/data文件夹,新建myid文件。打开myid文件,里面输入1保存退出。
输入1的原因是因为上面的server.1,所以这个值在3台zookeeper里是不一样的。
3.3 到此配置结束。其他两台按照此配置就可以了。
3.4 假设三台都配置好了,开始依次重启这3台服务器:进入zookeeper/bin目录,执行./zkServer.sh start 启动
4.配置activemq
4.1 这里主要是配置activemq/confg目录下的activemq.xml文件,打开activemq.xml文件。
找到 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="panguixiangbroker" dataDirectory="${activemq.data}">
将 brokerName的值改为自己需要的字符串(我这里是panguixiangbroker);
要特别注意这里,这个brokerName的值必须三台activemq一样(这样zookeeper才会认为是一个集群的)
4.2 找到:
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
改为:
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3" <!--这里有三台所以就3了-->
bind="tcp://0.0.0.0:0"
zkAddress="192.168.2.13:2181,192.168.2.15:2181,192.168.2.16:2181"
hostname="192.168.2.13" <!--当前机器的ip-->
zkPath="/activemq/leveldb-stores" sync="local_disk"/> <!--这个是默认的不用改-->
<!--<kahaDB directory="${activemq.data}/kahadb"/> -->
</persistenceAdapter>
保存退出
其他两台active mq的配置类似。
依次启动3台 activemq。(bin/linux-64/./activemq start)
在浏览器访问:http://192.168.2.13:8161,http://192.168.2.15:8161,http://192.168.2.16:8161
发现只有一台可以正常访问,这就对了。
然后在spring的jms配置文件里,引用集群mq,例如: failover:(tcp://192.168.2.13:61616, tcp://192.168.2.15:61616 , tcp://192.168.2.16:61616 ) 。
到此全部结束,当然这只是个简单的配置,更多配置参数请参考:
http://activemq.apache.org/replicated-leveldb-store.html
zookeeper有也有对外的api(java,ruby,python,php,等版本),可以根据业务需要开发适合直接的监控管理系统。
不在本文范围之类。