2013-03-28 62 views
6

它是否將所有數據複製到每個節點,還是將數據片段存儲在每個節點上,然後在運行時從不同節點獲取每個需要的片段?或者這是如何工作的?Ejabberd如何管理用於集羣的數據庫?

如果使用MySQL而不是Mnesia,集羣是否仍能正常工作?

回答

3

Mnesia可以很容易地支持羣集,但它在交互式erl會話中確實支持require some tinkering。就確切機制而言,它全部由erlang和mnesia內置的集羣來處理,並且超出了我的專業知識。您可以告訴它在每個節點上存儲副本(副本),但它是一個細粒度的控件,需要根據您的需求進行調整,如this document的第一條評論所暗示的。不幸的是,我找不到有關碎片工作的任何信息,儘管我懷疑mnesia會緩存(在內存或光盤上,取決於配置)從其他節點檢索到的任何結構。

您可能需要一個look at this,因爲它解釋了SQL的注意事項 - 即使用它不會消除在ejabberd中使用Mnesia。看起來共享mysql主機將是一個選項,或者在mysql的集羣功能中使用主從複製配置也可能工作,因爲共享SQL服務器可以工作。

6

默認情況下,一切都會去mnesia和大部分的東西是複製。你也可以選擇mnesia表格是否轉到光盤或內存。基本上,您可以根據需要重新配置mnesia表格的位置,但通常表格會複製到內存中,以保持關閉。

集羣ejabberd通過跨越節點通過mnesia集羣完成也是事實,所以可能不值得努力擺脫它。

大多數mods(實現xeps)使用mnesia,但是他們有mysql等價物。它甚至更寬 - 它們具有以「_odbc」作爲後綴的SQL等價物。例如:mod_roster和mod_roster_odbc。總結一下,你可以用輕量級mnesia來處理配置和一些內存中的東西,並使用中央mysql來處理沉重的東西。 mysql的位置可以在ejabberd配置中配置。

+0

我的目標是創建最簡單的設置,通過添加更多節點,可以輕鬆地增長到任何需要的大小(10M * n活動次數..)。想到3件事。 (A)。隨着mnesia表大小限制本地內容表,而不是複製聽起來像一個更好的選擇乍一看只有mnesia設置。 (B) (B)。沒有將任何內容外化到MySQL,並嚴格依賴mnesia設置將是最簡單的設置。 (C)。一個非常大的部署需要一個集中的MySQL DB還是mnesia可以切斷它? – 2013-03-29 13:33:19

+1

我遇到的大多數eJabberd部署都是混合安裝,他們使用集中式mysql(它很容易複製,易於被系統的另一層訪問)。你的意思是mnesia表的大小限制?在內存表中沒有限制,並且在大多數情況下,出於性能原因您需要內存中的位置。 – user425720 2013-03-29 18:12:21