美文网首页
ActiveMQ学习-集群配置

ActiveMQ学习-集群配置

作者: chaorenex1 | 来源:发表于2018-12-06 21:30 被阅读0次

    ActiveMQ集群方案

    本人最近使用VM搭建ActiveMQ集群成功了,写篇文章记录下。集群方案介绍。

    MasterSlave模式

    至少需要3个节点,利用ZooKeeper从众多节点中选举一个Master节点,其他为Slave节点。只有Master节点对外提供服务,使用LevelDB存储消息,当主节点宕机后,其他节点会选举出一个新的节点成为Master节点,继续对外提供服务。

    • 优点:实现高可用,排除单节点故障导致的服务中断。
    • 缺点:无法实现负载均衡,各个节点的消息无法同步。

    BrokerCluster模式

    不同节点的Broker之间通过networkConnectors (网络连接器)方式同步消息,使得不同节点的消费者可以互相消费消息。

    网络连接器:主要用于配置ActiveMQ服务器与服务器之间的网络通信方式,用于同步消息。分为静态和动态。

    • 静态连接器:指定iP地址
    <networkConnectors>
    
        <networkConnector uri="static:(tcp://xxx,tcp://xxx)"/>
    
    </networkConnectors>
    
    • 动态连接器:广播
    <networkConnectors>
    
        <networkConnector uri="multicast://xxx"/>
    
    </networkConnectors>
    
    • 优点:实现负载均衡,多个Broker之间同步消息。
    • 缺点:不能高可用。

    将两者结合可以同时实现高可用和负载均衡,一举两得。

    集群规划

    VM创建三台服务器,每台服务器运行两个activemq实例,分别为:activemq1和activemq2。

    activemq1: 192.168.254.132,192.168.254.133,192.168.254.134

    activemq2: 192.168.254.132,192.168.254.133,192.168.254.134

    MasterSlave集群

    在192.168.254.132上操作

    解压安装包
    tar -zxvf apache-activemq-5.15.8-bin.tar.gz

    mv apache-activemq-5.15.8 activemq1 #broker-a集群

    cp –r activemq1 activemq2 #broker-b集群

    修改activemq1的activemq.xml文件

    vi activemq1/conf/activemq.xml

    • broker-a
    配置brokerName
    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="broker-a" dataDirectory="${activemq.data}">
    
    配置LevelDB消息持久化
    <persistenceAdapter>
                <replicatedLevelDB directory="${activemq.data}/leveldb"
                        replicas="3"
                        bind="tcp://0.0.0.0:0"
                        zkAddress="192.168.254.132:2181,192.168.254.133:2181,192.168.254.134:2181"
                        zkPassword=""
                        hostname="192.168.254.132"
                        sync="local_disk"
                        zkPath="/activemq/leveldb-stores"/>
            </persistenceAdapter>
    
    修改消息传输端口
    <transportConnectors>
                <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?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>
    

    修改activemq2的activemq.xml文件

    vi activemq2/conf/activemq.xml

    • broker-b
    配置brokerName
    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="broker-b" dataDirectory="${activemq.data}">
    
    配置LevelDB消息持久化
    <persistenceAdapter>
                <replicatedLevelDB directory="${activemq.data}/leveldb"
                        replicas="3"
                        bind="tcp://0.0.0.0:0"
                        zkAddress="192.168.254.132:2181,192.168.254.133:2181,192.168.254.134:2181"
                        zkPassword=""
                        hostname="192.168.254.132"
                        sync="local_disk"
                        zkPath="/activemq/leveldb-stores"/></persistenceAdapter>
    
    修改消息传输端口
    <transportConnectors>
                <transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="amqp" uri="amqp://0.0.0.0:6672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="stomp" uri="stomp://0.0.0.0:61713?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="mqtt" uri="mqtt://0.0.0.0:2883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="ws" uri="ws://0.0.0.0:61714?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    </transportConnectors>
    
    

    brokerName一致才会认为是同一个集群,且至少有3个才会成功,否则无法选举主节点,导致没有broker可以提供服务。

    BrokerCluster集群

    • broker-a
    配置静态连接器
    <networkConnectors>
             <networkConnector uri="static:(tcp://192.168.254.132:61616,tcp://192.168.254.133:61616,tcp://192.168.254.134:61616)" duplex="false"/>
    </networkConnectors>
    
    
    • broker-b
    配置静态连接器
    <networkConnectors>
             <networkConnector uri="static:(tcp://192.168.254.132:61617,tcp://192.168.254.133:61617,tcp://192.168.254.134:61617)" duplex="false"/>
    </networkConnectors>
    

    然后使用如下命令把activemq1、activemq2目录分别拷贝到192.168.254.133,192.168.254.134。

    scp –r /usr/local/activemq1/ 192.168.254.133:/usr/local/

    scp –r /usr/local/activemq1/ 192.168.254.134:/usr/local/

    scp –r /usr/local/activemq2/ 192.168.254.133:/usr/local/

    scp –r /usr/local/activemq2/ 192.168.254.134:/usr/local/

    启动集群

    启动broker-a (3个节点)和 broker-b(3个节点)

    每台服务器执行以下命令:

    activemq1/bin/activemq start

    activemq2/bin/activemq start

    验证集群

    • 使用命令jps 或者 activemq status 查看服务是否运行

    • jps


      QQ截图20181206210508.png
    • activemq status


      QQ截图20181206211115.png
    • 使用ZooViewer工具登录ZooKeeper集群,查看ActiveMQ集群配置信息


      QQ截图20181206211442.png

    可以看到broker-a和broker-b集群的主节点是192.168.254.134

    客户端连接

    消息生产者和消费者的URL配置:

    failover:(tcp://zzh01:61616,tcp://zzh02:61616,tcp://zzh03:61616)

    相关文章

      网友评论

          本文标题:ActiveMQ学习-集群配置

          本文链接:https://www.haomeiwen.com/subject/wryocqtx.html