本文介绍伪分布式集群部署方式,实际生产中正常部署也可参考
一、zookeeper安装与配置
1.现在zookeeper,本文引用版本 zookeeper-3.4.12.tar
2.解压缩zookeeper-3.4.12.tar 三份,并重命名为zookeeper-one、 zookeeper-two、 zookeeper-three
```java
2.1 tar -zxvf zookeeper-3.4.12.tar
2.2 mv zookeeper-3.4.12 zookeeper-one
mv zookeeper-3.4.12 zookeeper-two
mv zookeeper-3.4.12 zookeeper-three
```
3.对zookeeper-one、 zookeeper-two、 zookeeper-three三个zookeeper服务进行配置,已zookeeper-one为例
3.1 进入conf目录:cd zookeeper-one/conf/ 复制zoo_sample.cfg 为zoo.cfg(cp zoo_sample.cfg zoo.cfg)
3.2 修改zoo.cfg 的配置参数:
# The number of milliseconds of each tick
#心跳间隔时间,zookeeper中使用的基本时间单位,毫秒值。每隔2秒发送一个心跳
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
#leader与客户端连接超时时间。表示5个心跳间隔
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
#Leader与Follower之间的超时时间,表示2个心跳间隔
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
#数据目录
dataDir=/soft/zookeeper/zookeeper-one/data
#日志目录
dataLogDir=/soft/zookeeper/zookeeper-one/logs
# the port at which the clients will connect
#客户端连接端口。多个实例的端口配置不可重复
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#server.NUM=IP:port1:port2 NUM表示本机为第几号服务器;IP为本机ip地址;
#port1为leader与follower通信端口;port2为参与竞选leader的通信端口
#多个实例的端口配置不能重复,如下:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
3.3 在 zookeeper-one 目录下分别创建data和logs目录
mkdir logs
mkdir data
在data目录下创建文件myid : vim data/myid 然后写入对应的服务器编号即server.NUM中的NUM数字,然后保存即可
4. 启动zookeeper
分别进入三个zookeeper的bin目录执行启动命令:
$ /soft/zookeeper/zookeeper-one/bin/zkServer.sh start # 启动zk1服务
$ /soft/zookeeper/zookeeper-two/bin/zkServer.sh start # 启动zk2服务
$ /soft/zookeeper/zookeeper-three/bin/zkServer.sh start # 启动zk3服务
# 三个服务都启动之后再查看启动状态,否则由于集群内服务无法相互连接会导致无法看到正确状态
$ /soft/zookeeper/zookeeper-one/bin/zkServer.sh status # 查看zk1服务状态
$ /soft/zookeeper/zookeeper-two/bin/zkServer.sh status # 查看zk2服务状态
$ /soft/zookeeper/zookeeper-three/bin/zkServer.sh status # 查看zk3服务状态
集群启动结果如下:
二、ActiveMQ的伪集群配置
1.下载activemq 文件
2.解压缩activemq文件分别到activemq-one、 activemq-two 和activemq-three三个目录中
3.修改三个目录下的conf目录下的activemq.xml文件和jetty.xml文件
如activemq-one目录中confi目录下的文件配置如下:
conf/activemq.xml
<!-- activemq支持5种协议:openwire、amqp、 stomp、mqtt、ws,这里我们只使用openwire协议,注释其它协议 -->
<transportConnectors>
<!-- node1服务端口使用默认端口61616 -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<!--
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
-->
</transportConnectors>
<!-- 持久化的部分为ZooKeeper集群连接地址-->
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:0"
zkAddress="localhost:2181,localhost:2182,localhost:2183"
zkPath="/opt/activemq/leveldb-stores"
hostname="localhost"
/>
</persistenceAdapter>
<!--
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
-->
/conf/jetty.xml:
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<property name="host" value="0.0.0.0"/>
<!-- 在这里修改端口为8161,默认就是8161 -->
<property name="port" value="8161"/>
</bean>
activemq-two目录中confi目录下的文件配置如下:
conf/activemq.xml:
<transportConnectors>
<!-- 服务端口改为61617 -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<!-- 持久化的部分为ZooKeeper集群连接地址-->
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:0"
zkAddress="localhost:2181,localhost:2182,localhost:2183"
zkPath="/opt/activemq/leveldb-stores"
hostname="localhost"
/>
</persistenceAdapter>
/conf/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>
activemq-three目录中confi目录下的文件配置如下:
/opt/activemq/node3/conf/activemq.xml:
<transportConnectors>
<!-- 服务端口改为61618 -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<!-- 持久化的部分为ZooKeeper集群连接地址-->
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:0"
zkAddress="localhost:2181,localhost:2182,localhost:2183"
zkPath="/opt/activemq/leveldb-stores"
hostname="localhost"
/>
</persistenceAdapter>
/opt/activemq/node3/conf/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="8163"/> <!-- 在这里修改端口为8163,默认是8161 -->
</bean>
4.启动activemq服务
$ /soft/activemq/activemq-one/bin/activemq start # 启动节点node1服务 stop停止服务
$ /soft/activemq/activemq-two/bin/activemq start # 启动节点node2服务 stop停止服务
$ /soft/activemq/activemq-three/bin/activemq start # 启动节点node3服务 stop停止服务
$ ps -ef|grep activemq # 检查进程是否运行,即activemq是否启动成功
$ netstat -anp|grep 61616 # 查看服务端口61616,监听情况
$ netstat -anp|grep 61617 # 查看服务端口61617,监听情况
$ netstat -anp|grep 61618 # 查看服务端口61618,监听情况
可以通过查看启动日志信息判断启动是否有错:
tail -f /soft/activemq/activemq-one/data/activemq.log
tail -f /soft/activemq/activemq-two/data/activemq.log
tail -f /soft/activemq/activemq-three/data/activemq.log
也可以通过 ip + 端口号 访问对应的activemq管理页面查看activemq服务是否启动成功
注意:
1. 如果通过虚拟做服务,主机无法访问虚拟机中的端口是,首先关闭防火墙,然后开放对应的端口,指令如下:
service iptables stop 关闭防火墙
iptables -I INPUT -p tcp --dport 22:80 -j ACCEPT #允许访问22到80端口
iptables -I INPUT -p tcp --dport 8161 -j ACCEPT #允许访问8161端口
iptables -D INPUT -p tcp --dport 80 -j ACCEPT #删除指定(80)端口
iptables -I INPUT -p tcp -s 192.168.1.112 --dport 80 -j ACCEPT #只允许指定ip访问本机80端口
2. 手动指定虚拟机的IP地址: ifconfig 网卡名 IP netmask 子网掩码
ifconfig eth0 102.168.0.1 netmask 255.255.255.0
2.ActiveMQ参数配置 application.properties 配置
# 单节点配置
#spring.activemq.broker-url=tcp://192.168.0.108:61616
# zk部署多节点部署配置
spring.activemq.broker-url=failover(tcp://192.168.0.108:61616,tcp://192.168.0.108:61617,tcp://192.168.0.108:61618)
spring.activemq.pool.max-connections=50
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
#spring.activemq.user=admin
#spring.activemq.password=admin
网友评论