1. 程式人生 > >ActiveMQ集群Master-Slave + Broker Cluster模式

ActiveMQ集群Master-Slave + Broker Cluster模式

網絡 解決方案 message

一、簡介

Master-Slave集群:

由至少3個節點組成,一個Master節點,其他為Slave節點。只有Master節點對外提供服務,Slave節點處於等待狀態。當主節點宕機後,從節點會推舉出一個節點出來成為新的Master節點,繼續提供服務。

優點是可以解決多服務熱備的高可用問題,缺點是無法解決負載均衡和分布式的問題。

Broker Cluster集群:

Broker-Cluster部署方式中,各個broker通過網絡互相連接,並共享queue。當broker-A上面指定的queue-A中接收到一個message處於pending狀態,而此時沒有consumer連接broker-A時。如果cluster中的

broker-B上面有一個consumer在消費queue-A的消息,那麽broker-B會先通過內部網絡獲取到broker-A上面的message,並通知自己的consumer來消費。

優點是可以解決負載均衡和分布式的問題。但不支持高可用。

所以,最完美的解決方案是將兩者結合起來。

二、準備工作

1、集群規劃:

Broker-a



集群成員

端口


openwire

amqp

stomp

mqtt

ws

Admin Port


192.168.2.86
192.168.2.87
192.168.2.88

61619

5675

61643

1886

61644

8191


Broker-b



集群成員

端口


openwire

amqp

stomp

mqtt

ws

Admin Port


192.168.2.86
192.168.2.87
192.168.2.88

61719

6675

61743

2886

61744

8291



2、下載MQ安裝包:

http://archive.apache.org/dist/activemq/5.14.4/apache-activemq-5.14.4-bin.tar.gz

3、安裝JDK

yum –y install java-1.7.0-openjdk*

三、集群安裝

3.1、配置Master-Slave

192.168.2.86上操作

解壓安裝包

tar –zxf apache-activemq-5.14.4-bin.tar.gz

mv apache-activemq-5.14.4 activemq-cluster1 #broker-a集群

cp –r activemq-cluster1 activemq-cluster2 #broker-b集群

Master-Slave基於Zookeeper

修改activemq-cluster1activemq.xml文件

vi activemq-cluster1/conf/activemq.xml

broker-a的配置:

<brokerxmlns="http://activemq.apache.org/schema/core"brokerName="broker-a" schedulerSupport="true"dataDirectory="${activemq.data}">

<persistenceAdapter>

<replicatedLevelDB

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

replicas="3"

bind="tcp://0.0.0.0:0"

zkAddress="192.168.2.93:2281,192.168.2.93:2381,192.168.2.93:2481"

zkPassword=""

hostname="192.168.2.86"

sync="local_disk"

zkPath="/activemq/leveldb-stores"

/>

</persistenceAdapter>

<transportConnectors>

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

<transportConnector name="openwire" uri="tcp://0.0.0.0:61619?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="amqp"uri="amqp://0.0.0.0:5675?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="stomp" uri="stomp://0.0.0.0:61643?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="mqtt"uri="mqtt://0.0.0.0:1886?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="ws"uri="ws://0.0.0.0:61644?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

</transportConnectors>

修改activemq-cluster2activemq.xml文件

vi activemq-cluster2/conf/activemq.xml

broker-b的配置:

<brokerxmlns="http://activemq.apache.org/schema/core"brokerName="broker-b" schedulerSupport="true"dataDirectory="${activemq.data}">


<persistenceAdapter>

<replicatedLevelDB

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

replicas="3"

bind="tcp://0.0.0.0:0"

zkAddress="192.168.2.93:2281,192.168.2.93:2381,192.168.2.93:2481"

zkPassword=""

hostname="192.168.2.86"

sync="local_disk"

zkPath="/activemq/leveldb-stores2"

/>

</persistenceAdapter>

<transportConnectors>

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

<transportConnector name="openwire"uri="tcp://0.0.0.0:61719?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="amqp"uri="amqp://0.0.0.0:6675?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="stomp"uri="stomp://0.0.0.0:61743?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnectorname="mqtt"uri="mqtt://0.0.0.0:2886?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

<transportConnector name="ws"uri="ws://0.0.0.0:61744?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

</transportConnectors>

brokerName一致才會認為是同一個Master-Slavecluster,且至少有3個才會成功,否則無法選主,導致沒有broker可以提供服務。

3.2、配置Broker Cluster

broker-a配置文件加入以下內容:

<networkConnectors>

<networkConnectoruri="masterslave:(tcp://192.168.2.86:61719,tcp://192.168.2.87:61719,tcp://192.168.2.88:61719)"/>

</networkConnectors>


broker-b配置文件加入以下內容:

<networkConnectors>

<networkConnectoruri="masterslave:(tcp://192.168.2.86:61619,tcp://192.168.2.87:61619,tcp://192.168.2.88:61619)"/>

</networkConnectors>

然後把activemq-cluster1activemq-cluster2目錄分別拷貝到192.168.2.87,192.168.2.88

scp –r activemq-cluster1/ 192.168.2.87:~/

scp –r activemq-cluster1/ 192.168.2.88:~/

scp –r activemq-cluster2/ 192.168.2.87:~/

scp –r activemq-cluster2/ 192.168.2.88:~/

3.3、啟動集群

啟動broker-a 3個節點)和 broker-b3個節點)

每臺服務器執行以下命令:

activemq-cluster1/bin/activemq start

activemq-cluster2/bin/activemq start

查看日誌可以看到2broker直接建立鏈接的log

Broker-a

INFO | Successfully connected to tcp://192.168.2.87:61719

INFO | Network connection between vm://broker-a#0 andtcp://192.168.2.87:61719 (broker-b) has been established.


技術分享

Broker-b

Network connection between vm://broker-b#6and tcp://192.168.2.88:61619 (broker-a) has been established. |


技術分享



本文出自 “12666522” 博客,請務必保留此出處http://12676522.blog.51cto.com/12666522/1922537

ActiveMQ集群Master-Slave + Broker Cluster模式