Openfire Hazelcast插件提供了在一個叢集上運作多個備援Openfire伺服器的支援。通過把Openfire運作為一個叢集,可以把終端的連接配接配置設定到多台Openfire伺服器上,同時還提供了伺服器的故障轉移。Hazelcast個插件是Openfire原叢集插件的替代,它使用了開源的Hazelcast資料分布架構來代替昂貴的專有第三方産品。目前Hazelcast版本是3.5.1。
XMPP協定的設計與郵箱相似,每個Openfire的安裝支援單個的XMPP域,且伺服器到伺服器(Server to Server,S2S)協定在XMPP規範中描述為把多個XMPP域連接配接到一起,也就是聯邦(Federation)。聯邦代表了XMPP橫向擴充的有效方式,因為它允許一個XMPP使用者能夠安全地與其他聯邦域的任意使用者進行通信。這些聯邦可以是公共的或者是私有的。聯邦域可以在網際網路上交換XMPP節(Stanzas),甚至可以使用基于DNS的服務查找或是位址解析進行發現。
與之相反,叢集是單個XMPP域進行縱向擴充的技術,叢集内的誠意共享相同的配置。叢集中的每一個成員都允許任意使用者在域内進行連接配接、授權認證、交換節。所有叢集的伺服器都共享單個的資料庫,是以需要部署在同一個區域網路内,以保持網絡通信的低延遲。叢集的部署适合提供運作時的備援,而且能支援更大的使用者數量和更多的連接配接數。
對于比較大的Openfire部署,結合聯邦和叢集兩種技術能提供比較佳的效果。單個的XMPP域能夠支援數萬甚至數十萬的使用者,再結合聯邦部署,就能達到支援百萬級以上的使用者規模。
要建立Openfire叢集,至少要有2台Openfire伺服器,每一台都必須安裝Hazelcast插件。要按照Hazelcast,隻需簡單的把hazelcast.jar包放入Openfire的plugins子目錄。還可以在管理控制台的插件頁直接安裝此插件。
要注意,叢集内的每一台Openfire伺服器都必須配置為連接配接同一個外部資料庫。
預設情況下,Openfire在啟動并初始化程序期間,伺服器節點會彼此互相發現(通過彼此互相交換UDP廣播資料包)。要注意一點,如果區域網路不支援廣播通信,那麼可以使用一些初始化的配置選項。
每個Openfire伺服器部署了Hazelcast插件後,在管理控制台的叢集頁面上使用單選按鈕激活/啟用叢集。隻需要啟用一次叢集,此變更會自動通知到叢集的其它節點。在重新整理叢集頁面後就能看到所有的伺服器已經成功加入叢集了。
注意,Hazelcast和更早的叢集插件(如clustering.jar或enterprise.jar)是互斥的。也就是說,使用了Hazelcast插件,就不能使用早期的叢集插件。
在叢集運作後,你就需要某種形式的負載均衡來把使用者的通路配置設定到各個Openfire節點上。這裡有多個商業解決方案和開源解決方案。如果你使用HTTP/BOSH Openfire連接配接器來連接配接Openfire的話,那麼可以使用Apache HTTP Server來做負載均衡器(使用mod_proxy_balancer子產品)。一些流行的選項如F5 LTM(商業解決方案)和HAProxy(開源解決方案)都可以。
還有一個簡單的Round-robin DNS配置可以幫助配置設定XMPP連接配接到叢集中的uogeOpenfire伺服器節點。盡管流行的輕量級、低成本的方法提供了基本的可擴充性,但要注意這些方法是既沒有考慮到足夠滿足實際的負載均衡,又沒有提供高可用性的能力。
更新Hazelcast插件需要額外的一些步驟,而且叢集中的每個節點都需要安裝同一個插件版本,以避免各種錯誤和資料同步的問題。
這種更新方法很簡潔,但會發生短暫的服務中斷。
1)關閉叢集中所有的Openfire服務
2)對叢集中的第一台Openfire伺服器,執行以下步驟:
a. 移除plugins目錄下現有的Hazelcast插件hazelcast.jar;
b. 移除plugins目錄下現有的hazelcast子目錄;
c. 複制最新的hazelcast.jar檔案到plugins目錄;
d. 重新開機Openfire伺服器,實作插件的解壓和安裝。
3)對剩餘的每一個Openfire伺服器重複以上工作。
這種方法在更新期間也不影響Openfire的服務。
1. 關閉叢集中的Openfire伺服器,隻保留一台還運作。
2. 登入這台Openfire伺服器的管理控制台,在插件頁面移除現有的Hazelcast插件。
3. 上傳最新的Hazelcast插件,并完成安裝。
4. 使用“離線”步驟更新并啟動剩餘的伺服器。
注意:如果你隻能通路Openfire的控制台,那麼可以使用本方法。但是要注意,在更新過程中,使用者可能彼此無法互相通信。
1)在Openfire管理控制台的叢集頁面,讓叢集停用(Disable),這會對叢集的所有成員都關閉叢集。
2)對于每一台Openfire,更新其Hazelcast插件。
3)當所有Openfire伺服器的Hazelcast插件都更新完畢後,在管理控制台的叢集頁面啟用(Enable),它會激活叢集中的所有Openfire成員。
Hazelcast有數個配置選項可作為Openfire的系統屬性。
1、hazelcast.startup.delay.seconds (5)
運作Hazelcast插件的等待時間(秒)。這可以讓Openfire在初始化叢集的緩存時部署其他插件。
2、hazelcast.startup.retry.count (1)
叢集首次啟動失敗後重複啟動的次數。
3、hazelcast.startup.retry.seconds (10)
相鄰兩次啟動的間隔時間。(秒)
4、hazelcast.max.execution.seconds (30)
在叢集成員間執行同步任務時的最大等待時間。
5、hazelcast.config.xml.filename (hazelcast-cache-config.xml)
Hazelcast插件配置檔案的名字,便于安裝自定義的緩存配置檔案。
6、hazelcast.config.xml.directory ({OPENFIRE_HOME}/conf)
可以添加到插件類路徑下的目錄,便于加載自定義的Hazelcast配置檔案。
7、hazelcast.config.jmx.enabled (false)
為Hazelcast叢集啟用JMX功能。
Hazelcast插件使用了XML配置建立器來初始化叢集。預設情況下,叢集的成員間會嘗試通過廣播下面的位置實作彼此互相發現。
IP位址: 224.2.2.3
端口:54327
Hazelcast對于延遲是非常敏感的,它或許會導緻一個長期運作的GC周期,尤其是在使用預設的JVM配置時。在大多數情況下,優先激活并行的垃圾收集器(CMS)或者是使用新的G1垃圾收集器來使得阻塞最小化。
另外,Openfire叢集的運作特點在很大程度上取決于用戶端的數量、連接配接的類型、以及部署的XMPP服務類型。但是要注意,許多在堆(Heap)上配置設定的對象是短活動期的,增加年輕代的空間或許會對性能産生積極的影響。
比如,下面提供一個适合3個節點的伺服器叢集(4核CPU),支援大約5萬個活動使用者:
版權