CentOS 7 安装 Zookeeper + ActiveMQ集群

原理

使用ZooKeeper实现的Master-Slave实现方式,是对ActiveMQ进行高可用的一种有效的解决方案。

高可用的原理:

  • 使用ZooKeeper(集群)注册所有的ActiveMQ Broker。
  • 只有其中的一个Broker可以对外提供服务(也就是Master节点),其他的Broker处于待机状态,被视为Slave。
  • 如果Master因故障而不能提供服务,则利用ZooKeeper的内部选举机制会从Slave中选举出一个Broker充当Master节点,继续对外提供服务。

环境准备

主机名 | 系统 | IP地址 | zk 端口 | MQ 版本 | MQ 消息端口 | MQ 控制台端口|
---|---|---|---|---|---|---|---|
node01 | Centos7.5 | 172.16.1.11 | 2181 | 5.15.6 | 61616 |8161 |
node02 | Centos7.5 | 172.16.1.12 | 2181 | 5.15.6 | 61616 |8161 |
node03 | Centos7.5 | 172.16.1.13 | 2181 | 5.15.6 | 61616 |8161 |

zookeeper 集群

zookeeper 的集群安装之前文章已经介绍过, CentOS 7 Zookeeper 介绍 及 集群安装,本次也同样使用该环境;

ActiveMQ 安装

下载地址:

下面的操作,需要在三台服务器上操作:

cd /opt/soft/

tar xf apache-activemq-5.15.6-bin.tar.gz 

mv apache-activemq-5.15.6 /opt/activemq-5.16.6

ln -s /opt/activemq-5.16.6 /opt/activemq

ls -ld /opt/activemq*

# lrwxrwxrwx  1 root root  20 Mar  1 14:22 /opt/activemq -> /opt/activemq-5.16.6
# drwxr-xr-x 10 root root 193 Sep  4  2018 /opt/activemq-5.16.6

增加服务管理脚本:

cat > /etc/systemd/system/activemq.service <<EOF
[Unit]
Description=ActiveMQ
Requires=ActiveMQ.target
After=ActiveMQ.target
 
[Service]
User=root
Group=root
Type=forking
Environment=JAVA_HOME=/opt/jdk
WorkingDirectory=/opt/activemq
ExecStart=/opt/activemq/bin/activemq start
ExecStop=/opt/activemq/bin/activemq stop
ExecReload=/opt/activemq/bin/activemq restart
 
[Install]
WantedBy=multi-user.target
EOF

配置

修改一、

把下面这行中的 brokerName 值为 activemq-cluster,或者任意自定义的,这里的值需要另外两个都一样才可以,表示是一个集群。

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-cluster" dataDirectory="${activemq.data}">

修改二、

需要增加集群相关的信息,增加zookeeper的信息等,如下:

可以删除源文件中的 persistenceAdapter 标签,然后直接复制下来内容后进行端口相关的修改。

下面的这段配置,剩下的两台都需要配置,唯一不同的是需要把hostname 中的值对应到每台机器的名称修改。

        <persistenceAdapter>
            <!--<kahaDB directory="${activemq.data}/kahadb"/> -->
            <replicatedLevelDB
                directory="${activemq.data}/leveldb"
                replicas="3"
                bind="tcp://0.0.0.0:62222"
                zkAddress="172.16.1.11:2181,172.16.1.12:2181,172.16.1.13:2181"
                hostname="node01"
                sync="local_disk"
                zkPath="/activemq/leveldb-stores"
            />
        </persistenceAdapter>

启动测试

按照上面的配置修改好三台服务器后启动测试

# systemctl start activemq

# systemctl status activemq

● activemq.service - ActiveMQ
   Loaded: loaded (/etc/systemd/system/activemq.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-03-03 14:01:09 CST; 3s ago
  Process: 16243 ExecStart=/opt/activemq/bin/activemq start (code=exited, status=0/SUCCESS)
 Main PID: 16298 (java)
   CGroup: /system.slice/activemq.service
           └─16298 /opt/jdk/bin/java -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login...

Mar 03 14:01:09 node03 systemd[1]: Starting ActiveMQ...
Mar 03 14:01:09 node03 activemq[16243]: INFO: Loading '/opt/activemq-5.16.6//bin/env'
Mar 03 14:01:09 node03 activemq[16243]: INFO: Using java '/opt/jdk/bin/java'
Mar 03 14:01:09 node03 activemq[16243]: INFO: Starting - inspect logfiles specified in logging.properties and log4j.proper...details
Mar 03 14:01:09 node03 activemq[16243]: INFO: pidfile created : '/opt/activemq-5.16.6//data/activemq.pid' (pid '16298')
Mar 03 14:01:09 node03 systemd[1]: Started ActiveMQ.
Hint: Some lines were ellipsized, use -l to show in full.

注意:这里需要注意,要三个服务全都启动后,集群才是正常,并且只有一台机器提供服务,剩下两台并不监听端口

查看:

node01:

[root@node01 conf]# netstat -lntup | egrep '61616|8161|62222'
tcp6       0      0 :::8161                 :::*                    LISTEN      12405/java          
tcp6       0      0 :::62222                :::*                    LISTEN      12405/java          
tcp6       0      0 :::61616                :::*                    LISTEN      12405/java

node02:

[root@node02 data]# netstat -lntup | egrep '61616|8161|62222'
[root@node02 data]#

node03:

[root@node03 data]# netstat -lntup | egrep '61616|8161|62222'
[root@node03 data]#
posted @ 2020-03-01 15:39  司家勇  阅读(473)  评论(0编辑  收藏  举报