首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

ActiveMQ 高可用架構實戰(二):基於 ZooKeeper 的 Replicated LevelDB 方案搭建與性能測試

     編輯:Java 綜合教學

三大 HA 方案對比

ActiveMQ 官方提供三種 Master/Slave 方案:

方案共享存儲特點
Shared File SystemNFS/SAN簡單,但單點風險在文件系統
JDBC Database數據庫成熟穩定,性能受限於 DB
ZooKeeper + LevelDB本地 LevelDB + ZK 協調無單點、高性能、自動故障轉移

本機搭建 3 節點集群步驟

1. 準備 ZooKeeper 集群(3 節點)

分別啟動 3 個 ZK 實例,端口 2181/2182/2183,構成集群。確保 ZK 健康運行。

2. 配置第一個 ActiveMQ (activemq1)

修改 conf/activemq.xml,啟用 replicatedLevelDB:

<broker xmlns="https://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
  <persistenceAdapter>
    <replicatedLevelDB
      directory="activemq-data"
      replicas="3"
      bind="tcp://0.0.0.0:0"
      zkAddress="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"
      zkSessionTimeout="2s"
      zkPath="/activemq/leveldb-stores"
    />
  </persistenceAdapter>
  <transportConnectors>
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
    <!-- 其他協議連接器... -->
  </transportConnectors>
</broker>

3. 複製並修改端口生成 activemq2/3

複製 activemq1 目錄為 activemq2、activemq3,修改各自 transportConnectors 端口避免衝突(如 61617/61618、5673/5674 等)。

4. 啟動驗證

  1. 依次啟動 ZK1/2/3;
  2. 依次啟動 AMQ1/2/3(建議用 ./activemq.sh console 前台運行觀察日誌);
  3. 日誌顯示一個節點成為 Master,其餘為 Slave,ZK 節點下出現 /activemq/leveldb-stores 臨時節點。

故障轉移測試

手動殺掉 Master 進程,觀察剩餘兩節點日誌:幾秒內自動選出新 Master,客戶端連接自動切換(需配置 failover:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616))。

性能對比數據(本機測試)

模式吞吐量備註
單節點~8,000 msg/s無 HA 開銷
ZK + Replicated LevelDB~500 msg/s複製同步開銷大,網絡/磁盘 IO 為瓶頸

結論:HA 方案顯著提升可用性,但吞吐量下降約 16 倍。生產環境需根據業務對一致性與性能的權衡選型,或優化磁盤(SSD)、網絡(萬兆)、調整 sync 策略。

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved