1. 简介
这里是在linux虚拟机上搭建的zookeeper集群+基于levelDB的activeMQ集群,实际只有一台机
2.集群搭建步骤
2.1 搭建zookeeper集群
2.1.1 准备zookeeper集群主机与端口
主机 | 客户端端口 | 集群通信端口 | 集群选举端口 |
127.0.0.1 | 2182 | 2887 | 3887 |
127.0.0.1 | 2183 | 2888 | 3888 |
127.0.0.1 | 2184 | 2889 | 3889 |
2.1.2 下载zookeeper安装包
下载地址:https://downloads.apache.org/zookeeper
从版本3.5.5开始,带有bin名称的包才是我们想要的下载可以直接使用的,里面有编译后的二进制的包,而之前的普通的tar.gz的包里面只是源码的包无法直接使用,如apache-zookeeper-3.6.2-bin.tar.gz
2.1.3 上传并解压apache-zookeeper-3.6.2-bin.tar.gz到虚拟机上,复制2份,共3个节点
我这里是把安装包上传到/opt/lsl/zookeeper这里,然后创建data目录
2.1.4 找到conf目录,将zoo_simple.cfg复制一份重命名为zoo.cfg,然后修改配置文件
节点一zoo.cfg配置:
#zk的数据目录
dataDir=/opt/lsl/zookeeper/data/2182
dataLogDir=/opt/lsl/zookeeper/log/2182
#zk端口
clientPort=2182
#zk集群配置
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
节点二zoo.cfg配置:
#zk的数据目录
dataDir=/opt/lsl/zookeeper/data/2183
dataLogDir=/opt/lsl/zookeeper/log/2183
#zk端口
clientPort=2183
#zk集群配置
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
节点三zoo.cfg配置:
#zk的数据目录
dataDir=/opt/lsl/zookeeper/data/2184
dataLogDir=/opt/lsl/zookeeper/log/2184
#zk端口
clientPort=2184
#zk集群配置
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
2.1.5 在3个zk数据目录下面创建myid文件,内容分别是:1、2、3,需要与zoo.cfg配置文件中的server.x对应![](https://i-blog.csdnimg.cn/blog_migrate/c2956e004e2481337b8ae2807f576e27.png)
2.1.6 分别启动zk集群各节点
如果zookeeper启动报错:JAVA_HOME is not set and java could not be found in PATH:如果已经安装了jdk,那么可能是zookeeper/bin/zkEnv.sh中没有读到环境变量,可以在该文件中直接写入JAVA_HOME环境变量的绝对路径
vim zkEnv.sh
#在bin/zkEnv.sh中写入jdk的绝对路径
JAVA_HOME="/usr/java/jdk1.8.0_131"
2.2 搭建activeMQ集群
2.2.1 准备activeMQ集群主机与端口
主机 | 集群端口(conf/activemq.xml) | 消息端口(conf/activemq.xml) | 管理控制台端口(conf/jetty.xml) |
127.0.0.1 | 63631 | 61617 | 8162 |
127.0.0.1 | 63632 | 61618 | 8163 |
127.0.0.1 | 63633 | 61619 | 8164 |
2.2.2 下载activeMQ安装包
官网下载地址:http://activemq.apache.org/components/classic/download
windows版本:apache-activemq-xxx-bin.zip
linux版本:apache-activemq-xxx-bin.tar.gz
如这里下载的apache-activemq-5.16.1-bin.tar.gz
2.2.3 上传并解压apache-activemq-5.16.1-bin.tar.gz到虚拟机上,复制2份,共3个节点
2.2.4 更改节点一conf/jetty.xml配置
1.更改ActiveMQ管理控制台端口
<property name="host" value="0.0.0.0"/>
<property name="port" value="8162"/>
2.2.5 更改节点一conf/activemq.xml配置
1.将brokerName改为统一的名称,如zookeeper-activemq-test,(注:三个节点的brokerName要一致)
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="zookeeper-activemq-test" dataDirectory="${activemq.data}">
2.使用性能比较好的LevelDB替换掉默认的KahaDB
<persistenceAdapter>
<!--注释掉或者删除掉kahaDB-->
<!--kahaDB directory="${activemq.data}/kahadb"/ -->
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:63631"
zkAddress="127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184"
hostname="cxj"
zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>
配置项说明:
directory #持久化数据存放地址(默认的情况下${activemq.data}下是没有leveldb目录的,要自己创建)
replicas #集群中节点的个数(由于我们是三台服务器搭建的ActiveMQ,所以replicas的数量是3)
bind #集群通信端口
zkAddress #ZooKeeper集群地址
hostname #当前服务器的IP地址,如果集群启动的时候报未知主机名错误,那么就需要配置主机名到IP地址的映射关系,
zkPath #ZooKeeper数据挂载点(集群启动成功之后,会在zookeeper下自动注册该节点)
(如果需要)linux虚拟机修改主机名:
#查看主机名:
hostname
#修改主机名:
hostnamectl set-hostname 主机名
#配置主机名到IP的映射:在/etc/hosts文件末尾加上:ip地址 主机名
vim /etc/hosts
3.更改ActiveMQ后台端口
<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
2.2.6 同理更改其他2个节点的配置文件的集群端口、消息端口、管理控制台端口
2.2.7 启动ActiveMQ集群所有节点
#启动后在zookeeper安装目录下测试activemq是否注册到zk中,用zkCli.sh -server ip:端口登录zk,
zkCli.sh -server ip地址:端口
#用ls /查看是否连接上zk集群)
ls /
如果activemq集群启动报错:java.io.IOException: com/google/common/util/concurrent/internal/InternalFutureFailureAccess
解决方法一:
清除所有的数据,也就是删除每个节点的上面配置的 replicatedLevelDB 节点中 directory 属性指向的目录 ,即删除每个节点下的 data/leveldb 目录
解决方法二(推荐):
将failureaccess-1.0.1.jar包放到ActiveMQ每个节点的lib目录下,然后重启每个节点,下载地址:https://mvnrepository.com/artifact/com.google.guava/failureaccess