ActiveMQ

ActiveMQ JDBC Master Slave

楊凱傑 2020/02/20 11:29:04
137

一. 簡介

ActiveMQ Master/Slave集群可以提高ActiveMQ的高可用性,如果其中一台Broker出現故障不可用時,另一台Broker可以迅速代替其成為Master角色。Master/Slave集群不支持負載均衡,僅能解決單點故障。

ActiveMQ 提供了三種集群配置方式:

(1)Shared File System master/slaves:   需要一個共享文件系統,如果文件系統掛了就不能用了

(2)JDBC Store master/slaves:   需要資料庫,性能最低,資料可靠性最高

(3)Replicated LevelDB Store:  性能最高,需要使用zookeeper集群做master選舉,配置較為麻煩,需有至少3台來做集群

接下來我們介紹其中一的方式的配置:    JDBC Store master/slaves

二. 步驟

關於activemq的安裝步驟本文就不詳述了,主要針對如何配置JDBC Master/Slave來做介紹: 

activemq版本: 5.15.9

DB: PostgreSQL 9.6

(1)首先先在server先在server上裝了兩台activemq,這邊安裝路徑為  /opt/activemq/apache-activemq-5.15.9,/opt/activemq/apache-activemq_02-5.15.9

(2)下載需要用到的jar檔

postgresql-42.2.5.jar: https://mvnrepository.com/artifact/org.postgresql/postgresql/42.2.5 (db driver)

druid-1.1.10.jar: https://mvnrepository.com/artifact/com.alibaba/druid/1.1.10(db connection pool)

將jar檔放到 /opt/activemq/apache-activemq-5.15.9/lib/optional/   /opt/activemq/apache-activemq_02-5.15.9/lib/optional/路徑下面 

(3)為了安全,通常我們不會將DB密碼的明碼直接寫在設定檔上,所以這邊先將db密碼加密(密碼用123456當範例)

加密完後新建一個jdbc.properties檔案到兩台的/opt/activemq/apache-activemq-5.15.9/conf 路徑下面

內容寫上publickey和password

publickey=MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEA0BgImheM+FFq73EKfGh55JI/xqCu1MZVKWYbyC97llj4YxejSuy0T0+dLtupWVyVULi392PHebMKIhggVkqZCwIDANOSR6Tf14yB9N3d6B7Y7OpGDna2/QZC3+uynNgaxgpFe/Aq7O7mciL0Z+dmJIlncjOpcVytoI68JAiEA8wScoWRVPZBvQC48oqqlcOQPGVT7tVghkYE+0fNiER8CIQDbNdFETBBfQ+ZwU2vtQy3SWsCselQIgd5+ZikhdPUTPvoQEDP57GarpU8rlbErJm1pHlgl8CHkCIQDChaNJ4+WzY+GdU6m2RaLn+BfpLriFCzgKEJIHBhV9cQIhALmF2AgcYCQtMpWhIBl+k/AvJwCaoAV2MQ/W4+G8OhBo
password=QqFhVQIkS39iRfzyqK4t9ZyYNzIdHtJmlDO9UaWASaGRVaYBx2Eaka48bUopEAa+5ujPo8HCDrxDvdXLV9PJQw==

 

(4)接下來配置/opt/activemq/apache-activemq-5.15.9/conf 下面的activemq.xml

加入讀取jdbc.properties的設定:

datasoucre設定: 這邊的passwod跟publickey會去讀取jdbc.properties中的值

persistenceAdapter配置: 這邊指定dataSource讀取前面配置的postgres-ds,然後第一次啟動前先不要將createTablesOnStartup設為false,等啟動後他自動創建完table之後再改成false

 

啟動Broker後,會創建activemq_acks、activemq_lock和activemq_msgs三個table。

1.activemq_acks:用於存放訂閱關係。如果是持久化Topic,訂閱者和服務器的訂閱關係在這個表保存。

2.activemq_lock:在集群環境中才有用,只有一個Broker可以獲得消息,稱為Master Broker,其他的只能作為備份等待Master Broker不可用,才可能成為下一個Master Broker。這個表用於記錄哪個Broker是當前的Master Broker。

3.activemq_msgs:用於存放訊息,Queue和Topic都存放在這個表中。

(5)這樣就設定完成了,接著啟動第一台mq並觀察log發現:第一台啟動時獲得了鎖,並且成為master

再來啟動第二台: 發現他想要獲得鎖來成為master,但是鎖被第一台佔用了,所以他只能等待

再來我們關掉第一台後再來看第二台的log變化: 發現到他搶到了第一台釋放的鎖並升級成了master,至此驗證成功

 

參考資料:

https://activemq.apache.org/masterslave

https://www.jianshu.com/p/7aab56c4a014

楊凱傑