天天看點

ActiveMQ的持久化與叢集

activemq存儲消息可以采用多種持久化方案,每種方案都有自己特有的叢集方案。

1. 檔案型持久化方案

檔案型持久化方案包含三種存儲方式:amq message store, kahadb,leveldb store。

amq message store是activemq 5預設的存儲。

kahadb是activemq5.4的預設存儲,是amq message store的繼任者。

leveldb store是也是基于檔案的持久化資料庫。

這3種持久化存儲方式由于都是基于檔案的,activemq broker叢集方式可以采用shared file system master slave方式,就是将資料檔案儲存在共享的檔案系統裡。broker master 和 broker slave共享資料檔案,master挂掉之後,slave可以直接接管master的工作。

2. 基于jdbc持久化方案

這種方案是将消息通過jdbc儲存在資料庫中,activemq的jdbc方案支援多種資料庫,apache derby,axion,db2,hsql,informix,maxdb,mysql,oracle,postgresql,sqlserver,sybase。

在jdbc持久化方案中,activemq broker叢集方式可以采用jdbc master slave方式。broker master和broker slave使用相同的資料庫,但在同一時刻,隻有master可以操作資料庫,當master挂掉之後,slave可以直接接管master的工作。

在上面描述的叢集方案中,broker已經是master-slave叢集了,但是共享的資料庫并不是叢集,仍然存在單點故障的風險。一般采用2中方式來去除單點:

采用支援叢集的資料庫,很多資料庫都支援叢集部署,比如mysql和oracle。

采用例如c-jdbc這樣的資料庫叢集中間件,将資料複制到多個獨立的資料庫中來避免單點。

3. replicated leveldb store

在第3種方案中,也用到了leveldb,但是它和我們之前提到的基于檔案的持久方案完全不同。

replicated leveldb store采用zookeeper從一組broker中選出一個master,master接受用戶端的連接配接,然後其他broker則是slave,他們連接配接到master,并且不接受用戶端的連接配接。所有的持久化操作都會複制(replicated)到連接配接的slave。

所有的消息都會等待一個法定人數(quorum)個slave更新完成。法定人數(quorum)表示2n+1。類似zookeeper中法定人數的概念。是以理論上,這種方案的資料可靠性類似于zookeeper。