ActiveMQ高可用+负载均衡+测试

来源:互联网 发布:手机小说码字软件 编辑:程序博客网 时间:2024/06/07 00:26


前言:接着上一篇译文(http://blog.csdn.net/ljj1338/article/details/77231194),没有看过第一篇ActiveMQ高可用环境搭建的,可以去先看看第一篇,下面对ActiveMQ的负载均衡配置做一个说明

1.为了让各位更加深入了解,我们再重复搭建一个ActiveMQ伪集群,过程和真实情况下的三个独立ip的集群搭建方式一模一样,如下:

ActiveMQ 高可用集群安装、配置(伪集群)

 

(ZooKeeper +LevelDB)

1、ActiveMQ 集群部署规划:

 

环境:CentOS 6.6 x64JDK7

 

版本:ActiveMQ 5.11.1

 

ZooKeeper 集群环境:192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183

 

ZooKeeper集群部署请参考《高可用架构篇--01节--ZooKeeper集群的安装、配置、高可用测试》

 

主机

集群端口

消息端口

管控台端口

节点安装目录

 

 

 

 

 

192.168.1.101

63631

53531

8361

/home/wusc/activemq/node-01

 

 

 

 

 

192.168.1.101

63632

53532

8362

/home/wusc/activemq/node-02

 

 

 

 

 

192.168.1.101

63633

53533

8363

/home/wusc/activemq/node-03

 

 

 

 

 

 

2、防火墙打开对应的端口

 

## mq cluster

 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8361 -jACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8362 -j ACCEPT -AINPUT -m state --state NEW -m tcp -p tcp --dport 8363 -j ACCEPT -A INPUT -mstate --state NEW -m tcp -p tcp --dport 53531 -j ACCEPT -A INPUT -m state--state NEW -m tcp -p tcp --dport 53532 -j ACCEPT -A INPUT -m state --state NEW-m tcp -p tcp --dport 53533 -j ACCEPT -A INPUT -m state --state NEW -m tcp -ptcp --dport 63631 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport63632 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 63633 -jACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 63631 -j ACCEPT

 

 

3、分别在三台主机中创建/home/wusc/activemq目录

 

$ mkdir /home/wusc/activemq

 

上传 apache-activemq-5.11.1-bin.tar.gz /home/wusc/activemq目录

 

 

4、解压并按节点命名

 

$ cd /home/wusc/activemq

 

$ tar -xvfapache-activemq-5.11.1-bin.tar.gz

 

$ mvapache-activemq-5.11.1 node-0X     #(X代表节点号 1、2、3,下同)

 

 

5、修改管理控制台端口(默认为 8161)可在 conf/jetty.xml 中修改,如下:

 

Node-01 管控台端口:

 

<beanid="jettyPort"class="org.apache.activemq.web.WebConsolePort"init-method="start"> <!-- the default port number for the webconsole -->

 

<property name="host"value="0.0.0.0"/>

 

<property name="port" value="8361"/>

 

</bean>

 

Node-02 管控台端口:

 

<bean id="jettyPort"class="org.apache.activemq.web.WebConsolePort"init-method="start">

<!-- the default port number for the web console --><property name="host" value="0.0.0.0"/> <propertyname="port" value="8362"/>

 

</bean>

 

Node-03 管控台端口:

 

<beanid="jettyPort"class="org.apache.activemq.web.WebConsolePort"init-method="start"> <!-- the default port number for the webconsole -->

 

<property name="host"value="0.0.0.0"/>

 

<property name="port" value="8363"/>

 

</bean>

 

 

6、集群配置:

 

在 3 个 ActiveMQ 节点中配置 conf/activemq.xml中的持久化适配器。修改其中 bind、zkAddress、 hostname 和 zkPath。注意:每个ActiveMQBrokerName必须相同,否则不能加入集群。 Node-01 中的持久化配置:

 

<brokerxmlns="http://activemq.apache.org/schema/core" brokerName="DubboEdu2"dataDirectory="${activemq.data}"> <persistenceAdapter>

 

<!-- kahaDB directory="${activemq.data}/kahadb"/-->

 

<replicatedLevelDB

 

directory="${activemq.data}/leveldb"

 

replicas="3"

 

bind="tcp://0.0.0.0:63631"

 

zkAddress="192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183"

 

hostname="edu-mq-01"

 

zkPath="/activemq2/leveldb-stores"

 

/>

 

</persistenceAdapter>

 

</broker>

 

Node-02 中的持久化配置:

 

<brokerxmlns="http://activemq.apache.org/schema/core" brokerName="DubboEdu2"dataDirectory="${activemq.data}"> <persistenceAdapter>

 

<!-- kahaDB directory="${activemq.data}/kahadb"/-->

 

<replicatedLevelDB

 

directory="${activemq.data}/leveldb"

 

replicas="3"

 

bind="tcp://0.0.0.0:63632"

 

zkAddress="192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183"

 

hostname="edu-mq-01"

 

zkPath="/activemq2/leveldb-stores"

 

/>

 

</persistenceAdapter>

 

</broker>

 

Node-03 中的持久化配置:

<brokerxmlns="http://activemq.apache.org/schema/core" brokerName="DubboEdu2"dataDirectory="${activemq.data}">

<persistenceAdapter>

 

<!-- kahaDB directory="${activemq.data}/kahadb"/-->

 

<replicatedLevelDB

 

directory="${activemq.data}/leveldb"

 

replicas="3"

 

bind="tcp://0.0.0.0:63633"

 

zkAddress="192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183"

 

hostname="edu-mq-01"

 

zkPath="/activemq2/leveldb-stores"

 

/>

 

</persistenceAdapter>

 

</broker>

 

 

修改各节点的消息端口(注意,避免端口冲突):

 

Node-01 中的消息端口配置:

 

<transportConnectors>

 

<!-- DOS protection, limit concurrent connections to 1000and frame size to 100MB -->

 

<transportConnector name="openwire"uri="tcp://0.0.0.0:53531?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>

 

Node-02 中的消息端口配置:

 

<transportConnectors>

 

<!-- DOS protection, limit concurrent connections to 1000and frame size to 100MB -->

 

<transportConnector name="openwire"uri="tcp://0.0.0.0:53532?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>

 

Node-03 中的消息端口配置:

 

<transportConnectors>

 

<!-- DOS protection, limit concurrent connections to 1000and frame size to 100MB -->

 

<transportConnector name="openwire"uri="tcp://0.0.0.0:53533?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>

 

 

7、按顺序启动 3 个 ActiveMQ 节点:

 

$ /home/wusc/activemq/node-01/bin/activemqstart

$ /home/wusc/activemq/node-02/bin/activemqstart

$ /home/wusc/activemq/node-03/bin/activemqstart

 

 

8、集群的节点状态分析:

 

集群启动后对 ZooKeeper 数据的抓图,可以看到 ActiveMQ 的有 3 个节点,分别是 00000000000,00000000001,00000000002

 

以下第一张图展现了00000000000 的值,可以看到 elected 的值是不为空,说明这个节点是 Master,其他两个节点是 Slave。

 

 

9、集群可用性测试(配置和测试代码,请看视频):

 

ActiveMQ 的客户端只能访问 Master的 Broker,其他处于 Slave 的Broker 不能访问。所以客户端连

 

接 Broker 应该使用 failover 协议。

 

failover:(tcp://192.168.1.101:53531,tcp://192.168.1.101:53532,tcp://192.168.1.101:53533)?ran

 

domize=false

 

 

10、集群高可用测试:

 

当一个 ActiveMQ 节点挂掉,或者一个ZooKeeper 节点挂掉,ActiveMQ 服务依然正常运转。如果仅剩一个 ActiveMQ 节点,因为不能选举 Master,ActiveMQ 不能正常运转;同样的,如果ZooKeeper仅剩一个节点活动,不管ActiveMQ 各节点是否存活,ActiveMQ 也不能正常提供服务

 

 

11、设置开机启动:

 

# vi /etc/rc.local

 

su - wusc -c '/home/wusc/activemq/node-01/bin/activemq start' su- wusc -c '/home/wusc/activemq/node-02/bin/activemq start' su - wusc -c'/home/wusc/activemq/node-03/bin/activemq start'

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

声明:在每一个集群的节点中都要在activemq.xml文件中配置转移地址,且如下内容配置在<persistenceAdapter>节点之前

集群 1 链接集群 2:

 

<networkConnectors>

 

<networkConnector

 

uri="static:(tcp://192.168.1.101:53531,tcp://192.168.1.101:53532,tcp://192.168.1.101:53533)"

 

duplex="false"/>

 

</networkConnectors>

 

 

集群 2 链接集群 1:

 

<networkConnectors>

 

<networkConnector

 

uri="static:(tcp://192.168.1.81:51511,tcp://192.168.1.82:51512,tcp://192.168.1.83:51513)"

 

duplex="false"/>

 

</networkConnectors>

具体测试高可用代码下载链接:http://download.csdn.net/download/ljj1338/9936999

下一篇:我们继续翻译redis高可用集群环境的搭建过程




 




 


   


原创粉丝点击