ActiveMQ JDBC Master Slave
一. 簡介
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,至此驗證成功

參考資料:
