linux下搭建activemq高可用集群及负载均衡

导读:本篇文章讲解 linux下搭建activemq高可用集群及负载均衡,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一. 简介

            activemq高可用集群只能系统的可用性,如果需要提高并发,则需要搭建负载均衡。

            实现负载,就是俩个高可用集群,每个集群的主节点来负载均衡。

            zookeeper集群的安装说明,请参照笔者的另一篇博客: linux下安装zookeeper集群

            activemq高可用集群的搭建说明,请参照笔者的另一篇博客:linux下搭建activemq高可用集群

二. 集群部署说明

2.1 节点信息

linux下搭建activemq高可用集群及负载均衡

2.2 安装activemq

           给三台服务器按照上面的顺序分别安装六台activemq. 

           activemq的安装说明,请参照笔者的另一篇博客: linux下安装activemq

           注:此时将mq安装在了/usr/local/env/activemq目录下,如下图:

           linux下搭建activemq高可用集群及负载均衡

三. 搭建高可用集群clusterA和clusterB

3.1 配置高可用clusterA

3.1.1 修改activemq.xml

1)  修改brokerName为“clusterA”

注: MqA1, MqA2, MqA3的均修改如下:

linux下搭建activemq高可用集群及负载均衡

2)  为persistenceAdapter添加replicatedLevelDB元素

MqA1:

     <persistenceAdapter>
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            
            <!-- activemq zookeeper high availiability -->
            <replicatedLevelDB
                directory="${activemq.data}/leveldb"
                replicas="3"
                bind="tcp://0.0.0.0:62624"
                zkAddress="182.61.53.64:2181,182.61.61.90:2181,182.61.32.229:2181"
                hostname="182.61.53.64"
                zkPath="/activemq/leveldb-stores"
            />              
            
        </persistenceAdapter>

MqA2:

        <persistenceAdapter>
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            
            <!-- activemq zookeeper high availiability -->
            <replicatedLevelDB
                directory="${activemq.data}/leveldb"
                replicas="3"
                bind="tcp://0.0.0.0:62625"
                zkAddress="182.61.53.64:2181,182.61.61.90:2181,182.61.32.229:2181"
                hostname="182.61.61.90"
                zkPath="/activemq/leveldb-stores"
            />              
            
        </persistenceAdapter>

MqA3:

        <persistenceAdapter>
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            
            <!-- activemq zookeeper high availiability -->
            <replicatedLevelDB
                directory="${activemq.data}/leveldb"
                replicas="3"
                bind="tcp://0.0.0.0:62626"
                zkAddress="182.61.53.64:2181,182.61.61.90:2181,182.61.32.229:2181"
                hostname="182.61.32.229"
                zkPath="/activemq/leveldb-stores"
            />              
            
        </persistenceAdapter>

3)  修改消息端口uri

MqA1:

linux下搭建activemq高可用集群及负载均衡

MqA2:

linux下搭建activemq高可用集群及负载均衡

MqA3:

linux下搭建activemq高可用集群及负载均衡

3.1.2 修改jetty.xml

1)  修改控制台访问端口

MqA1:

linux下搭建activemq高可用集群及负载均衡

MqA2:

linux下搭建activemq高可用集群及负载均衡

MqA3:

linux下搭建activemq高可用集群及负载均衡

3.1.3 测试clusterA集群高可用

测试代码请参照:linux下搭建activemq高可用集群 中的测试代码。

 

3.2 配置高可用clusterB

3.2.1 修改activemq.xml

1)  修改brokerName为“clusterB”

注: MqB1, MqB2, MqB3的均修改如下:

linux下搭建activemq高可用集群及负载均衡

2)  为persistenceAdapter添加replicatedLevelDB元素

MqB1:

        <persistenceAdapter>
        
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            
            <!-- activemq zookeeper high availiability -->
            <replicatedLevelDB
                directory="${activemq.data}/leveldb"
                replicas="3"
                bind="tcp://0.0.0.0:62627"
                zkAddress="182.61.53.64:2181,182.61.61.90:2181,182.61.32.229:2181"
                hostname="182.61.53.64"
                zkPath="/activemq/leveldb-stores"
            />              
            
        </persistenceAdapter>

MqB2:

        <persistenceAdapter>
        
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            
            <!-- activemq zookeeper high availiability -->
            <replicatedLevelDB
                directory="${activemq.data}/leveldb"
                replicas="3"
                bind="tcp://0.0.0.0:62628"
                zkAddress="182.61.53.64:2181,182.61.61.90:2181,182.61.32.229:2181"
                hostname="182.61.61.90"
                zkPath="/activemq/leveldb-stores"
            />              
            
        </persistenceAdapter>

MqB3:

        <persistenceAdapter>
            
            <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
            
            <!-- activemq zookeeper high availiability -->
            <replicatedLevelDB
                directory="${activemq.data}/leveldb"
                replicas="3"
                bind="tcp://0.0.0.0:62629"
                zkAddress="182.61.53.64:2181,182.61.61.90:2181,182.61.32.229:2181"
                hostname="182.61.32.229"
                zkPath="/activemq/leveldb-stores"
            />  
            
        </persistenceAdapter>

3)  修改消息端口uri

MqB1:

linux下搭建activemq高可用集群及负载均衡

 

MqB2:

linux下搭建activemq高可用集群及负载均衡

MqB3:

linux下搭建activemq高可用集群及负载均衡

3.2.2 修改jetty.xml

1)  修改控制台访问端口

MqB1:

linux下搭建activemq高可用集群及负载均衡

MqB2:

linux下搭建activemq高可用集群及负载均衡

MqB3:

linux下搭建activemq高可用集群及负载均衡

3.2.3 测试clusterB集群高可用

测试代码请参照:linux下搭建activemq高可用集群 中的测试代码。

 

四. 搭建负载均衡集群

注: 要让两个ActiveMQ集群能够实现负载均衡只需要在config目录下的activemq.xml中配置桥接网络转移地址,这样消费端就可以同时消费两个集群中消息队列的请求信息。networkConnectors元素要在persistenceAdapter元素之前。

4.1 在clusterA集群中配置clusterB集群的桥接地址

注: MqA1, MqA2, MqA3的均修改如下:

        <!-- loadbalance networkconnector to clusterB  -->
        <networkConnectors>
        	<networkConnector 
        		uri="static:(tcp://182.61.53.64:51517,tcp://182.61.61.90:51518,tcp://182.61.32.229:51519)"
        		duplex="false"
        	/>
        </networkConnectors>

 

4.2 在clusterB集群中配置clusterA集群的桥接地址

注: MqB1, MqB2, MqB3的均修改如下:

        <!-- loadbalance networkconnector to clusterB  -->
        <networkConnectors>
        	<networkConnector 
        		uri="static:(tcp://182.61.53.64:51514,tcp://182.61.61.90:51515,tcp://182.61.32.229:51516)"
        		duplex="false"
        	/>
        </networkConnectors>

4.3. 测试

4.3.1 启动mq

              分别启动MqA1,MqA2,MqA3,MqB1,MqB2,MqB3六台activemq

              此时,可以看到:MqA2(90:8165)  和 MqB1(64:8167) 为主节点

              linux下搭建activemq高可用集群及负载均衡

linux下搭建activemq高可用集群及负载均衡

4.3.2 代码测试

 测试代码请参照:linux下搭建activemq高可用集群 中的测试代码。

 1) 此时,要将所有的activemq连接信息都添加到配置文件中,如下:

linux下搭建activemq高可用集群及负载均衡    

2) 测试结果:  

发送100条MQ消息,有时候是clusterA主节点(http://182.61.61.90:8165)来发送,有时候是clusterB主节点(http://182.61.53.64:8167)来发送。

发了6次100条的,其中5次是http://182.61.61.90:8165发送的,1次是http://182.61.53.64:8167发送的。如下:

linux下搭建activemq高可用集群及负载均衡

 

linux下搭建activemq高可用集群及负载均衡

 

五. 总结

        之前一直以为是  我给一个队列发送1000条消息,mq负载均衡集群A的主节点会负载400条,集群B的主节点会负载剩下的600条。但是现在看来,同一个queue, mq负载均衡只会由一个集群的主节点来全部消费消息,负载主要体现在是由集群A的主节点来消费消息还是由集群B的主节点来消费消息。 唉,上周都配好了,一直感觉有问题,果然是思路的问题。

         猜测应该是 比方说 我发了10个队列,各自100条消息, mq负载均衡会给集群A的主节点5个队列,给集群B的主节点5个队列,这才是负载均衡,是针对队列/主题来的,一个队列/主题的所有消息只能由一台mq来消费。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/17790.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!