引入消息中間件后如何保證其高可用?
基于zookeeper和LevelDB搭建ActiveMQ集群。集群僅提供主備方式的高可用集群功能,避免單點故障
。
http://activemq.apache.org/masterslave
LevelDB,5.6版本之后推出了LecelDB的持久化引擎,它使用了自定義的索引代替常用的BTree索引,其持久化性能高于KahaDB,雖然默認(rèn)的持久化方式還是KahaDB,但是LevelDB可能會是趨勢。
在5.9版本還提供了基于LevelDB和Zookeeper的數(shù)據(jù)復(fù)制方式,作為Master-Slave方式的首選數(shù)據(jù)復(fù)制方案。
Zookeeper+LevelDB的Master-Slave
從ActiveMQ5.9開始,ActiveMQ的集群實現(xiàn)方式取消了傳統(tǒng)的Masster-Slave方式。增加了基于Zookeeper+LevelDB的Master-Slave實現(xiàn)方式,從5.9版本后也是官網(wǎng)的推薦。
基于Zookeeper和LevelDB搭建ActiveMQ集群,集群僅提供主備方式的高可用集群功能,避免單點故障。
官網(wǎng):http://activemq.apache.org/replicated-leveldb-store
Replicated LevelDB Store使用Apache ZooKeeper從一組配置為復(fù)制LevelDB存儲的代理節(jié)點中選擇一個master。然后將所有從LevelDB存儲與主機(jī)同步,通過從主機(jī)復(fù)制所有更新來保持它們的最新狀態(tài)。
Replicated LevelDB Store使用與LevelDB存儲相同的數(shù)據(jù)文件,因此您可以隨時在已復(fù)制和未復(fù)制之間切換代理配置。
官網(wǎng)集群原理圖
節(jié)點仲裁是什么
ActiveMQ節(jié)點仲裁是指在ActiveMQ集群中,當(dāng)某個節(jié)點失效時,其他節(jié)點需要通過選舉產(chǎn)生一個新的主節(jié)點來保證集群的正常運(yùn)行。集群中仲裁節(jié)點的作用
節(jié)點仲裁的作用是確保集群中只有一個主節(jié)點,避免出現(xiàn)多個主節(jié)點導(dǎo)致消息重復(fù)消費(fèi)或消息丟失等問題。節(jié)點仲裁通常是通過ZooKeeper來實現(xiàn)的,ZooKeeper會監(jiān)控ActiveMQ集群中各個節(jié)點的狀態(tài),并在節(jié)點失效時進(jìn)行選舉產(chǎn)生新的主節(jié)點。
說明:
使用Zookeeper集群注冊所有的ActiveMQ Broker但`只有其中一個Broker可以提供服務(wù),它將被視為Master,其他的Broker處于待機(jī)狀態(tài)被視為Slave。
如果Master因故障而不能提供服務(wù),Zookeeper會從Slave中選舉出一個Broker充當(dāng)Master。Slave連接Master并同步他們的存儲狀態(tài),Slave不接受客戶端連接。所有的存儲操作都將被復(fù)制到連接至Maste的Slaves。
如果Master宕機(jī)得到了最新更新的Slave會變成Master。故障節(jié)點在恢復(fù)后會重新加入到集群中并連接Master進(jìn)入Slave模式。
所有需要同步的消息操作都將等待存儲狀態(tài)被復(fù)制到其他法定節(jié)點的操作完成才能完成。
所以,如給你配置了replicas=3,name法定大小是(3/2)+1 = 2。Master將會存儲更新然后等待(2-1)=1個Slave存儲和更新完成,才匯報success,至于為什么是2-1,陽哥的zookeeper講解過自行復(fù)習(xí)。
有一個node要作為觀察者存在。當(dāng)一個新的Master被選中,你需要至少保障一個法定node在線以能夠找到擁有最新狀態(tài)的node,這個node才可以成為新的Master。
因此,推薦運(yùn)行至少3個replica nodes以防止一個node失敗后服務(wù)中斷。文章來源:http://www.zghlxwxcb.cn/news/detail-744691.html
部署規(guī)劃和步驟
警告
LevelDB已經(jīng)被官方廢棄,不再受到支持。這是因為LevelDB的維護(hù)者已經(jīng)不再維護(hù)該項目,而且LevelDB在某些情況下可能會出現(xiàn)數(shù)據(jù)損壞的問題。因此,官方建議使用更穩(wěn)定的存儲引擎,例如JDBC或KahaDB。但是我們還要學(xué)習(xí)文章來源地址http://www.zghlxwxcb.cn/news/detail-744691.html
到了這里,關(guān)于ActiveMq學(xué)習(xí)⑨__基于zookeeper和LevelDB搭建ActiveMQ集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!