當一個應用被部署於生產環境,災備計划是非常重要的,以便從網絡故障,硬件故障,軟件故障或者電源故障中恢復。通過合理的配置ActiveMQ,可以解決上訴問題。最典型的配置方法是運行多個Broker,一旦某台機器或者某個broker失效,其他broker能夠頂上去。這種方式叫做Master/Slave,一個broker作為Master提供服務,而其他broker則作為slave等待master失效從而頂上。 目前activemq提供2種master/slave配置方式:
* Sharing nothing
broker擁有自己唯一的消息存儲
* Sharing storage
broker之間共享一個消息存儲設備,比如關系數據庫,共享文件系統等。但是一個時間段內只能有一個broker占據他們。
1. 不共享式Master/Slave
該模式下,Master與Slave擁有各自獨立的消息存儲設備。他是最簡單的提供高可用性的消息Broker。Slave需要額外的配置,而Master不需要。
所有的消息命令如消息、反饋、訂閱、事務等會被從master復制到slave,如圖所示,她發生在master收到這些消息之前。
slave啟動后會連接到master,所以master要先啟動起來。slave只有在master失效后才會建立通信連接以頂替master。
客戶端給master發送消息后,master會首先將他轉發到slave,等待slave反饋存儲完畢后,master才開始處理這個消息。
當master失效后,slave有2個選擇
關閉slave
管理員重新配置這個slave作為master,然后再配置一個slave作為替補,並將之前存儲的消息數據復制一份給slave,以同步。
開啟通信端口並初始化網絡連接
slave自動升級為master
缺點:
master只會把slave連接后的消息傳給他,而連接master之前的消息,不會被復制過去。不過你可以通過配置waitForSlave屬性來讓master一直等待slave啟動才開始工作。
master只允許一個slave,而slave不能再有slave
何時使用:
當master失效后,可接受服務器維護時間,以及管理手工部署新的master和slave
2. 共享存儲式Master/Slave
不共享式的Master Slave讓各個broker保持了相對獨立性,而共享式則是讓所有broker共享同一個存儲器,這個存儲器一定時間內只能被一個broker占有。相比非共享式,優點是一旦master失效,無需手工恢復,而且也不限制slave broker數量。
共享式目前分為2種,共享數據庫和共享文件系統。 值得一提的是,另外新的一種是基於zookeeper的,將會在5.9版中發布,詳情查看 http://www.cnblogs.com/dycg/p/3177450.html
基於數據庫的共享
原理是把消息命令都存儲在數據庫中,並且在數據庫中加鎖,一旦master失效后,slave獲得該鎖后繼續服務。
只要你擁有數據庫,並且不在意使用數據庫而造成的性能相對其他方式有所降低的話,可以考慮。
基於共享文件系統的方式
其實就是把數據庫換成了一個共享文件系統如SAN等。