ActiveMQ集群部署

Hi, Everyone!Welcome to DQF's Blog,For technical exchange, Please add QQ: 905030209,Thanks!

1. 环境准备

需要软件jdk8,zookeeper,activeMQ,服务器系统:centos7
zookeeper下载地址: http://apache.fayea.com/zookeeper/zookeeper-3.4.14/
activeMQ下载地址: http://activemq.apache.org/download.html

2. 服务器及端口

  • zookeeper服务器及端口说明
IP clientPort 与leader交互数据端口 与leader交互数据备用端口
10.30.34.172 2181 2881 3881
10.30.34.173 2182 2882 3882
10.30.34.174 2183 2883 3883
  • ActiveMQ服务器及端口说明
IP 集群端口 消息端口 管控台端口
10.30.34.172 62621 51511 8161
10.30.34.173 62622 51512 8162
10.30.34.174 62623 51513 8163
  • 安装路径

zookeeper: /opt/zookeeper
activeMQ: /opt/activemq

3. 安装步骤

3.1 JDK8安装

一般在centos7中会自带jdk8,如果没有直接yum install java
安装完成后查看java版本如下:

# java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)

3.2 Zookeeper安装

解压文件:

cd /opt
tar  xvf zookeeper-3.4.14.tar.gz
mv zookeeper-3.4.14 zookeeper

创建数据目录和日志目录:

mkdir /opt/zookeeper/{data,logs} -p

修改配置文件:

cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim /opt/zookeeper/conf/zoo.cfg

以34.172主机为例配置文件如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs

# the port at which the clients will connect
clientPort=2181 # 这个地方34.172为2181,34.173为2182,34.174为2183
#下面这段关于server的原配置文件中没有需要手动添加
server.1=10.30.34.172:2881:3881
server.2=10.30.34.173:2882:3882
server.3=10.30.34.174:2883:3883

对于以上参数的解释:

server.A=B:C:D
server.1=10.0.70.12:2881:3881
server.2=10.0.70.13:2882:3882
server.3=10.0.70.14:2883:3883
A是一个数字,表示这个是第几号服务器;
B是这个服务器的IP地址(或者是与IP地址做了映射的主机名);
C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的Leader服务器交换信息
的端口;
D是在leader挂掉时专门用来进行选举leader所用的端口。
注意:如果是伪集群的配置方式,不同的Zookeeper实例通信端口号不能一样,所以要给
它们分配不同的端口号。

设置myid

# 我们可以看到上面红的是部分有server.1 server.2 server.3 要在三台不通的机器上设置myid
# 在10.30.34.172中设置
echo "1" > /opt/zookeeper/data/myid
# 在10.30.34.173中设置
echo "2" > /opt/zookeeper/data/myid
# 在10.30.34.174中设置
echo "3" > /opt/zookeeper/data/myid

开启端口:

# 如果有防火墙策略那么需要添加到防火墙白名单中使其端口可用,灾备环境暂未设置防火墙
# 以237.198为例
firewall‐cmd ‐‐zone=public ‐‐add‐port=2181/tcp ‐‐permanent
firewall‐cmd ‐‐zone=public ‐‐add‐port=2881/tcp ‐‐permanent
firewall‐cmd ‐‐zone=public ‐‐add‐port=3881/tcp ‐‐permanent
# 重启防火墙服务
systemctl restart firewalld

启动zookeeper:

cd /opt/zookeeper/bin/
./zkServer.sh start &

查看哪台是leader机:

# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower/leader #leader则为leader机

3.3 ActiveMQ安装

解压文件到指定目录下:

cd /opt
tar xvf apache-activemq-5.15.9-bin.tar.gz
mv apache-activemq-5.15.9 activemq

修改三台主机管控台端口(/opt/activemq/conf/jetty.xml),默认端口8161:

# 三台机器端口号要有区别本次为`34.172端口8161,34.173端口为8162,34.174端口为8163`
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init‐method="start">
      <!‐‐ the default port number for the web console ‐‐>
      <property name="host" value="0.0.0.0"/>
      <property name="port" value="8161"/>
</bean>

集群配置:
在3个ActiveMQ节点中配置conf/activemq.xml中的持久化适配器。
replicas 集群的数量,因为当前是三台所以这里是3
bind 这个主要是要修改不通的端口,三台机器分别为62621,62622,62623
zkAddress 这个地址是zookeeper配置的地址,三台机器都是一样的
hostname 本机ip
zkPath 默认为”/activemq/leveldb-stores”
注意:每个ActiveMQ的brokerName必须相同,否则不能加入集群。

        <persistenceAdapter>
            <replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:62621" zkAddress="10.30.34.172:2181,10.30.34.173:2182,10.30.34.174:2183" hostname="10.30.34.172" zkPath="/activemq/leveldb-stores"/>
        </persistenceAdapter>

修改各节点的消息端口(注意,避免端口冲突,三台机器分别为51511,51512,51513),默认消息端口61616,同样是 conf/activemq.xml:

        <transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:51511?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        </transportConnectors>

4. 启动zookeeper和activemq

4.1 启动zookeeper

启动:

cd /opt/zookeeper/bin
./zkServer.sh start &

查看状态:

cd /opt/zookeeper/bin
./zkServer.sh status
# 启动日志可以下bin/zookeeper.out中查看。

4.2 启动activemq

命令如下:

cd /opt/activemq/bin/
./activemq start &
# 监听日志:
tailf /opt/activemq/data/activemq.log
Leave a Reply

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Blog Theme: FreeDom by DQF.