1. 简介

这里是在linux虚拟机上搭建的zookeeper集群+基于levelDB的activeMQ集群,实际只有一台机

2.集群搭建步骤

2.1 搭建zookeeper集群

2.1.1 准备zookeeper集群主机与端口

主机客户端端口集群通信端口集群选举端口
127.0.0.1218228873887
127.0.0.1218328883888
127.0.0.1218428893889

 

 

 

 

 

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对应

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.163631616178162
127.0.0.163632616188163
127.0.0.163633616198164

 

 

 

 

 

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&amp;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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐