先作一個簡單說明,我這個版本的ActiveMQ集羣部署並不嚴謹,對於大型企業可能並不適用,若有意見或者建議歡迎留言交流。apache
** _一言不合就直接上架構圖 _ **網絡
- 集羣採用兩臺機器,四個實例部署,每臺機器上各部署兩個實例,一臺爲master,另外一臺爲slave。
如此,便基本實現了簡單的集羣和HA.架構
** 注**:admin端口爲後臺管理頁面的端口,配置在jetty.xml中。負載均衡
** jetty.xml就涉及到後臺服務的端口修改,因此配置文件就很少作說明。**tcp
brokerA conf目錄下的activemq.xml配置修改性能
/修改brokerName/ <broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerA" dataDirectory="${activemq.data}"> /修改kahaDB路徑/ <persistenceAdapter> <kahaDB directory="/home/dev/activeMQ/kahaDB"/> </persistenceAdapter> /修改網絡橋接/ <networkConnectors> <networkConnector uri="static:(tcp://host2:61616,tcp://host2:61617)" duplex="true"/> </networkConnectors>測試
- brokerA-slave conf目錄下的activemq.xml配置修改 ``` /**修改brokerName**/ <broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerA-slave" dataDirectory="${activemq.data}"> /**修改kahaDB路徑**/ <persistenceAdapter> <kahaDB directory="/home/dev/activeMQ/kahaDB"/> </persistenceAdapter> /**修改網絡橋接**/ <networkConnectors> <networkConnector uri="static:(tcp://host2:61616,tcp://host2:61617)" duplex="true"/> </networkConnectors>
brokerB conf目錄下的activemq.xml配置修改code
/修改brokerName/ <broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerB" dataDirectory="${activemq.data}"> /修改kahaDB路徑/ <persistenceAdapter> <kahaDB directory="/home/dev/activeMQ/kahaDB"/> </persistenceAdapter> /修改網絡橋接/ <networkConnectors> <networkConnector uri="static:(tcp://host1:61616,tcp://host1:61617)" duplex="true"/> </networkConnectors>xml
- brokerB-slave conf目錄下的activemq.xml配置修改 ``` /**修改brokerName**/ <broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerB-slave" dataDirectory="${activemq.data}"> /**修改kahaDB路徑**/ <persistenceAdapter> <kahaDB directory="/home/dev/activeMQ/kahaDB"/> </persistenceAdapter> /**修改網絡橋接**/ <networkConnectors> <networkConnector uri="static:(tcp://host1:61616,tcp://host1:61617)" duplex="true"/> </networkConnectors>
固然,集羣和HA要經得起考驗,經過如下幾個用例對其進行測試: ###3.1. 測試集羣負載 ####3.1.1. 用例一blog
####3.1.2. 用例二
###3.2. 測試集羣HA ####3.2.1. 用例一
####3.2.1. 用例二
橋接方式的好處:
當ActiveMQ面對大量消息存儲和大量Client交互時,性能消耗將會達到單個broker極限,此時咱們須要對ActiveMQ進行水平擴展。ActiveMQ提供了「network」機制,能夠把多個broker實例「串聯」一塊兒,造成「Forward Bridge」模型(轉發橋)。這些Broker經過有向網絡(networkerConnector)連接在一塊兒,組成broker集羣,任何一個Borker均可以與Client數據交互,消息也將在Broker網絡中「流動」直到被消費,之因此「流動」,由於「producer」和「consumer」會與不一樣的broker創建連接,咱們認爲「轉發橋」架構模式是「較大」集羣數據的解決方案。
在master-slave模式中,消息將會在多個broker上備份,即集羣中每一個broker上消息都同樣,在故障轉移時不會發生消息丟失的問題(持久化消息)。「Forward Bridge」意味着消息能夠在broker間「轉發」直到消息被消費,在任意時刻一條消息只會被一個broker持有;Producer發送的消息,可能會通過多個Broker轉發最終纔會到達Consumer,若是其中某個Broker失效,那麼其上的消息將不可用(固然也能夠爲每一個節點採用M-S架構,以提升可用性),直到它再次加入集羣,所以「Forward Brige」模式並非ActiveMQ HA(高可用)方案,可是由於集羣中每一個Broker均可以獨立爲Client服務並且消息能夠動態的在網絡中遷移,因此「Forward Bridge」是解決海量消息的必備策略。
ref: