ActiveMQ集群Master-Slave + Broker Cluster模式
一、簡介
Master-Slave集群:
由至少3個節點組成,一個Master節點,其他為Slave節點。只有Master節點對外提供服務,Slave節點處於等待狀態。當主節點宕機後,從節點會推舉出一個節點出來成為新的Master節點,繼續提供服務。
優點是可以解決多服務熱備的高可用問題,缺點是無法解決負載均衡和分布式的問題。
Broker Cluster集群:
Broker-Cluster部署方式中,各個broker通過網絡互相連接,並共享queue。當broker-A上面指定的queue-A中接收到一個message處於pending狀態,而此時沒有consumer連接broker-A時。如果cluster中的
優點是可以解決負載均衡和分布式的問題。但不支持高可用。
所以,最完美的解決方案是將兩者結合起來。
二、準備工作
1、集群規劃:
Broker-a | |||||||
集群成員 | 端口 | ||||||
openwire | amqp | stomp | mqtt | ws | Admin Port | ||
192.168.2.86 | 61619 | 5675 | 61643 | 1886 | 61644 | 8191 |
Broker-b | |||||||
集群成員 | 端口 | ||||||
openwire | amqp | stomp | mqtt | ws | Admin Port | ||
192.168.2.86 | 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-cluster1的activemq.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&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp"uri="amqp://0.0.0.0:5675?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61643?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt"uri="mqtt://0.0.0.0:1886?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws"uri="ws://0.0.0.0:61644?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
修改activemq-cluster2的activemq.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&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp"uri="amqp://0.0.0.0:6675?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp"uri="stomp://0.0.0.0:61743?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnectorname="mqtt"uri="mqtt://0.0.0.0:2886?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws"uri="ws://0.0.0.0:61744?maximumConnections=1000&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-cluster1、activemq-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-b(3個節點)
每臺服務器執行以下命令:
activemq-cluster1/bin/activemq start
activemq-cluster2/bin/activemq start
查看日誌可以看到2個broker直接建立鏈接的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模式