ActiveMQ常見的高可用架構模式及使用LevelDB、ZooKeeper進行高可用消息架構

ActiveMQ進行高可用架構可以採用主從方式(Master-Slave)或負載均衡(集羣)方式。 


1. 主從模式

Master-Slave方式中,只能是Master提供服務,Slave是實時地備份Master的數據,以保證消息的可靠性。當Master失效時,Slave會自動升級爲Master,客戶端會自動連接到Slave上工作。主從模式,可以使用如下方式實現:


1.1. 基於共享文件(Shared File System Master Slave)

這種方式Slave的個數沒有限制,哪個ActiveMQ實例先獲取共享文件的鎖,那個實例就是Master,其它的ActiveMQ實例就是Slave,噹噹前的Master失效,其它的Slave就會去競爭共享文件鎖,誰競爭到了誰就是Master。此模式結構圖如下:


1.2. 基於數據庫(JDBC Master Slave)

JDBC Master Slave模式和Shared File Sysytem Master Slave模式的原理是一樣的,只是把共享文件系統換成了共享數據庫。


1.3. 基於zookeeper

此種模式通過zookeeper做爲服務選取器來選擇activemq作爲master,稍後會進行具體介紹。


2. Broker集羣模式

此種配置是一個消費者連接到多個broker集羣的中的一個broker,當該broker出問題時,消費者自動連接到其他一個正常的broker。消費者使用 failover:// 協議來連接broker。broker之間的通過靜態發現(static discovery)和動態發現(dynamic discovery)來維持彼此發現,下面來介紹靜態發現和動態發現的機制。


2.1. Static Discovery集羣

靜態發現通過配置固定的broker uri來發現彼此,配置語法如下:

static:(uri1,uri2,uri3,...)?options

例如:

static:(tcp://localhost:61616,tcp://remotehost:61617?trace=false,vm://localbroker)?initialReconnectDelay=100

2.2. Dynamic Discovery集羣

動態發現機制是在各個broker啓動時通過Fanout transport來發現彼此。在配置ActiveMQ實例時,不需要知道所有其它實例的URI地址,只需在所有實例的${ACTIVEMQ_HOME}/conf/activemq.xml文件中添加以下內容:

<networkConnectors>  

       <networkConnector uri="multicast://default" />  

</networkConnectors>

同時在<transportConnectors>節點中添加以下部分內容:

<transportConnectors>  

         <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" discoveryUri="multicast://default" />  

</transportConnectors>  


3. 網絡連接(Network Connectors)模式集羣

多個broker組成集羣,當其中一個broker的消費者出問題導致消息堆積無法消費掉時,通過ActiveMQ支持的Network of Broker方案可將該broker堆積的消息轉發到其他有消費者的broker。該方案主要有以下兩種配置方式:


3.1. 基於固定地址



3.1. 基於組播發現



4. 基於ZooKeeper的高可用詳解

整體的系統結構如下圖所示:


ActiveMQ提供了隊列、本地持久化的功能,ZooKeeper提供了主從選舉的功能,通過zookeeper選取activemq leader的形式實現當某個activemq節點出問題時,保證系統的可用性。


4.1. ZooKeeper部署

配置zoo.cfg文件,修改dataDir地址和集羣服務地址


在dataDir路徑下創建myid文件,注意與server.x中的x保持一致。


4.2. ActiveMQ配置


修改persistenceAdapter標籤,使用LevelDB,並配置與zookeeper連接信息,其中hostname爲本機地址。


4.3. 驗證測試

在瀏覽器地址欄分別輸入:

http://192.168.1.104:8161/admin/queues.jsp

http://192.168.1.106:8161/admin/queues.jsp

http://192.168.1.108:8161/admin/queues.jsp

因爲使用zookeeper做負載均衡,三臺只有一臺是master,其他兩臺處於等待狀態,所以只有其中一臺提供服務,但一旦這臺服務器宕機以後,會有另外一臺頂替上來,所以其他幾個ip地址是打不開的,只有一臺能打開。在客戶端使用的時候,使用 failover進行配置的,如下:

mq.broker.url=failover:(tcp://192.168.1.104:61616,tcp://192.168.1.106:61616,tcp://192.168.1.108:61616)?initialReconnectDelay=1000


關注微信公衆號,獲取更多內容



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章