• 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]#
    
  • 相关阅读:
    Python unittest单元测试框架总结
    RabbitMQ集群搭建
    mysql之mysqldump——备份与还原
    新版本Ubuntu本地提权漏洞复现
    Flash 零日漏洞复现(CVE-2018-4878)
    申论之道
    上海失业金
    C# GUID有什么用?
    C#通过接口或者父类可以调用子类的方法或者属性吗?
    C# 按逗号分隔字符串&强制类型转换string转double
  • 原文地址:https://www.cnblogs.com/winstom/p/12390077.html
Copyright © 2020-2023  润新知