Ejabberd安裝及集群搭建


轉自:http://blog.chinaunix.net/uid-8092042-id-2385071.html

Ejabberd簡介

Ejabberd是基於Jabber/XMPP協議的即時通訊服務器,由GPLv2授權(免費和開放源碼),采用Erlang/OTP開發。它的特點是,跨平台,容錯,集群和模塊化。

Ejabberd目前是可擴展性最好的一種Jabber/XMPP服務器,支持分布多個服務器,並且具有容錯處理,單台服務器失效不影響整個cluster運作。

關鍵功能
  • 跨平台的: ejabberd可以運行在Microsoft Windows和Unix派生系統,例如Linux, FreeBSD和NetBSD.
  • 分布式的: 你可以在一個集群的機器上運行ejabberd,並且所有的機器都服務於同一個或一些Jabbe域. 當你需要更大容量的時候,你可以簡單地增加一個廉價節點到你的集群里. 因此, 你不需要買一個昂貴的高端機器來支持上萬個並發用戶.
  • 容錯: 你可以布署一個ejabberd集群,這樣一個正常運行的服務的所有必需信息將被復制到所有節點. 這意味着如果其中一個節點崩潰了, 其他節點將無中斷的繼續運行. 另外, 也可以‘不停機’增加或更換節點.
  • 易於管理: ejabberd建立於開源的Erlang. 所以你不需要安裝外部服數據庫, 外部web服務器, 除此以外因為每個東西都已經包含在里面, 並且處於開箱可用狀態. 其他管理上的好處包括:
  • 詳盡的文檔.
  • 便捷的安裝程序,包括在Linux, Mac OS X, 以及Windows系統下.
  • Web管理.
  • 共享名冊組.
  • 命令行管理工具.
  • 可外部集成的驗證機制.
  • 發送匿名消息的能力.
  • 國際化: ejabberd領導國際化. 非常適合全球化. 相關功能包括:
  • 翻譯成25種語言.
  • 支持IDNA.
  • 開放標准: ejabberd是的一個完全支持XMPP標准的開源Jabber服務器.
  • 完全兼容XMPP.
  • 基於XML的協議.
  • 支持的協議很多.

額外功能

Ejabberd廣泛支持的其他先進特性:

  • 模塊化
  • 只裝在你想要的模塊.
  • 在你自己的自定義模塊擴展ejabberd.
  • 安全性
  • 支持c2s和s2s連接的SASL和STARTTLS.
  • 支持s2s連接的STARTTLS和Dialback.
  • 可通過HTTPS安全訪問的Web管理.
  • 數據庫
  • 快速布署的內部數據庫(Mnesia).
  • 原生的MySQL支持.
  • 原生的PostgreSQL支持.
  • 支持ODBC數據存儲.
  • 支持Microsoft SQL Server.
  • 驗證
  • 內部驗證.
  • PAM, LDAP 和 ODBC.
  • 外部驗證腳本.
  • 其他
  • 支持虛擬主機.
  • XML流壓縮 (XEP-0138).
  • 統計 (XEP-0039).
  • 支持IPv6的c2s和s2s連接.
  • 支持集群和HTML日志的多用戶聊天模塊.
  • 基於用戶vCards的用戶目錄.
  • 支持基於PubSub的個人事件的發行-訂閱組件.
  • 支持web客戶端: HTTP輪詢和HTTP綁定(BOSH)服務.
  • IRC網關.
  • 組件支持: 安裝特定網關之后和外部網絡的接口,如 AIM, ICQ 和 MSN.
安裝Install Ejabberd 搭建環境

OS:

  • Ubuntu 11.04 ( 64bit )

Soft:

  • Ejabberd-2.1.8
安裝測試架構
  • Server01: 10.120.10.37 ( hostname:chaos )
  • Server02: 10.120.10.39 ( hostname:gaia )
下載軟件

本次安裝下載源碼包,編譯安裝,你也可以下載簡易ProcessOne發布的二進制安裝包。

軟件下載地址: [Ejabberd官網]

編譯及安裝
  1. tar -zxvf ejabberd-2.1.8.tar.gz
  2. cd ejabberd-2.1.8
  3. ./configure --prefix=/usr/local/ejabeerd --enable-odbc
  4. make && make install

編譯參數:

  • --enable-odbc or --enable-mssql

如果你想使用外部數據庫則需要這個選項.如果第一次沒有編譯進入,也可以后面動態編譯進軟件。

  • --enable-full-xml

允許使用基於XML的優化. 例如它將使用 CDATA 來逃逸 XMPP 流中的字符串. 只有你確定你的XMPP客戶端有一個全兼容的XML分析器才使用這個選項.

  • --enable-pam

允許PAM驗證方法

軟件目錄結構:

  1. /etc/ejabberd/
  2. 配置文件目錄:
  3. ejabberd.cfg
  4. ejabberd配置文件
  5. ejabberdctl.cfg
  6. 管理腳本配置文件
  7. inetrc
  8. 網絡DNS配置文件
  9. /lib/ejabberd/
  10. ebin/
  11. Erlang二進制文件(*.beam)
  12. include/
  13. Erlang頭文件(*.hrl)
  14. priv/
  15. 運行時需要的其他文件
  16. bin/
  17. 可執行程序
  18. lib/
  19. 二進制系統文件(*.so)
  20. msgs/
  21. 翻譯文件(*.msgs)
  22. /sbin/ejabberdctl
  23. 管理腳本
  24. /share/doc/ejabberd/
  25. ejabberd文檔
  26. /var/lib/ejabberd/
  27. Spool目錄:
  28. .erlang.cookie
  29. Erlang cookie文件
  30. acl.DCD, ...
  31. Mnesia數據庫spool文件(*.DCD, *.DCL, *.DAT)
  32. /var/log/ejabberd/
  33. 日志目錄:
  34. ejabberd.log
  35. ejabberd服務日志
  36. erlang.log
  37. Erlang/OTP系統日志

啟動與關閉:

  1. ejabberdctl start
  2. ejabberdctl status
  3. The node ejabberd@chaos is started with status: started
  4. ejabberd is running in that node

  5. ejabberdctl stop
  • 注意:如果第一次安裝完成,就馬上啟動軟件,ejabberd會記錄你這次node信息進入數據庫,如果你在后面修改配置文件中的node信息,啟動會報錯。所以建議如果有意需要綁定系統hostname作為node名,請在第一次啟動前就完成修改,修改ejabberdctl.cfg文件中ERLANG_NODE變量,本次安裝修改成ERLANG_NODE=ejabberd@chaos。
Ejabeerd集群  

新增XMPP管理帳戶

1. 使用ejabberd添加帳戶

ejabberdctl register admintest chaos 123456
  • 注:admintest是帳戶名,chaos是虛擬機名,123456是帳戶密碼

2. 編輯ejabberd.cfg文件配置ejabberd帳戶權限

{acl, admin, {user, "admintest", "chaos"}}

3. 重啟ejabberd,配置生效

Web管理

ejabberd Web管理允許使用web瀏覽器管理大部分ejabberd.

Ejabberd集群配置

現將chaos和gaia加入到一個集群中。前面已經完成了chaos的Ejabberd安裝,並配置node名為:chaos

1. 從chaos機器拷貝.erlang.cookie文件到gaia機器.默認cookie文件放置為:/usr/local/ejabberd/var/lib/ejabberd。或者你也可以增加‘-setcookie content_of_.erlang.cookie’選項到以下所有‘erl’ 命令.

2. 在gaia機器上,在ejabberd工作目錄中,以 ejabberd 守候進程用戶運行以下命令:

  1. erl -sname ejabberd \
  2. -mnesia dir '"/var/lib/ejabberd/"' \
  3. -mnesia extra_db_nodes "['ejabberd@chaos']" \
  4. -s mnesia
  • 注意:gaia機器的ejabberd不能啟動,如果啟動,執行上面的腳步會報錯。最好是在執行這段指令之前可以刪除gaia機器上面的數據庫,也就是/usr/local/ejabberd/var/lib/ejabberd下面的所有文件,但是要保留cookie文件。刪除之后后面才方便同步chaos的數據庫,不然后面會報數據存在的錯誤。

3. 現在在相同的‘erl’會話下運行以下命令:

  1. mnesia:change_table_copy_type(schema, node(), disc_copies).

以上指令是為該數據庫建立本地磁盤存儲.

4. 現在你可以增加更多表的復制到這個節點 ,使用‘mnesia:add_table_copy’ 或 ‘mnesia:change_table_copy_type’如上 (只是把 ‘schema’ 替換成其他表名,並且 ‘disc_copies’可以被替換成‘ram_copies’ 或 ‘disc_only_copies’).

哪個表被復制,依賴於你的需要, 你可以從‘mnesia:info().’命令得到一些提示, 通過查看每個位於 ’first’的表的大小和缺省的存儲類型.

復制一個表使得這個節點的這個表的查詢更加快速. 寫入, 另一方面, 將更慢. 而且當然如果復制之一的機器掛了, 其他復制將被使用.

5. 運行‘init:stop().’ 或只是 ‘q().’ 退出 Erlang shell. 這可能要花些時間,如果 Mnesia 還沒有從first傳輸和處理完所有數據.

6. 現在在第二台機器上使用和第一台機器類似的配置運行 ejabberd: 你可能不需要重復‘acl’ 和 ‘access’ 選項,因為它們將從第一台機器獲得; 並且 mod_irc 只應該在集群里的一台機器上激活.

你可以在其他機器上重復這些步驟來服務於這個域.

Ejabberd負載均衡配置

1) 修改gaia、chaos機器ejabberd.ctf文件。在末尾添加:

  1. {domain_balancing_component_number, "chaos", 2}.

2) 修改日志級別為debug方便觀察后台信息。

3) 完成以上操作重啟ejabberd服務。

參考資料

Ejabberd官方網站

Ejabberd2:安裝和操作指南


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM