一. 简介

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

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

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

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

二. 集群部署说明

2.1 节点信息

2.2 安装activemq

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

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

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

           

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

3.1 配置高可用clusterA

3.1.1 修改activemq.xml

1)  修改brokerName为“clusterA”

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

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:

MqA2:

MqA3:

3.1.2 修改jetty.xml

1)  修改控制台访问端口

MqA1:

MqA2:

MqA3:

3.1.3 测试clusterA集群高可用

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

 

3.2 配置高可用clusterB

3.2.1 修改activemq.xml

1)  修改brokerName为“clusterB”

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

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:

 

MqB2:

MqB3:

3.2.2 修改jetty.xml

1)  修改控制台访问端口

MqB1:

MqB2:

MqB3:

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) 为主节点

              

4.3.2 代码测试

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

 1) 此时,要将所有的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发送的。如下:

 

 

五. 总结

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

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

 

Logo

更多推荐