轉自: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.
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官網]
編譯及安裝- tar -zxvf ejabberd-2.1.8.tar.gz
- cd ejabberd-2.1.8
- ./configure --prefix=/usr/local/ejabeerd --enable-odbc
- make && make install
編譯參數:
- --enable-odbc or --enable-mssql
如果你想使用外部數據庫則需要這個選項.如果第一次沒有編譯進入,也可以后面動態編譯進軟件。
- --enable-full-xml
允許使用基於XML的優化. 例如它將使用 CDATA 來逃逸 XMPP 流中的字符串. 只有你確定你的XMPP客戶端有一個全兼容的XML分析器才使用這個選項.
- --enable-pam
允許PAM驗證方法
軟件目錄結構:
- /etc/ejabberd/
- 配置文件目錄:
- ejabberd.cfg
- ejabberd配置文件
- ejabberdctl.cfg
- 管理腳本配置文件
- inetrc
- 網絡DNS配置文件
- /lib/ejabberd/
- ebin/
- Erlang二進制文件(*.beam)
- include/
- Erlang頭文件(*.hrl)
- priv/
- 運行時需要的其他文件
- bin/
- 可執行程序
- lib/
- 二進制系統文件(*.so)
- msgs/
- 翻譯文件(*.msgs)
- /sbin/ejabberdctl
- 管理腳本
- /share/doc/ejabberd/
- ejabberd文檔
- /var/lib/ejabberd/
- Spool目錄:
- .erlang.cookie
- Erlang cookie文件
- acl.DCD, ...
- Mnesia數據庫spool文件(*.DCD, *.DCL, *.DAT)
- /var/log/ejabberd/
- 日志目錄:
- ejabberd.log
- ejabberd服務日志
- erlang.log
- Erlang/OTP系統日志
啟動與關閉:
- ejabberdctl start
- ejabberdctl status
- The node ejabberd@chaos is started with status: started
- ejabberd is running in that node
- ejabberdctl stop
- 注意:如果第一次安裝完成,就馬上啟動軟件,ejabberd會記錄你這次node信息進入數據庫,如果你在后面修改配置文件中的node信息,啟動會報錯。所以建議如果有意需要綁定系統hostname作為node名,請在第一次啟動前就完成修改,修改ejabberdctl.cfg文件中ERLANG_NODE變量,本次安裝修改成ERLANG_NODE=ejabberd@chaos。
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 守候進程用戶運行以下命令:
- erl -sname ejabberd \
- -mnesia dir '"/var/lib/ejabberd/"' \
- -mnesia extra_db_nodes "['ejabberd@chaos']" \
- -s mnesia
- 注意:gaia機器的ejabberd不能啟動,如果啟動,執行上面的腳步會報錯。最好是在執行這段指令之前可以刪除gaia機器上面的數據庫,也就是/usr/local/ejabberd/var/lib/ejabberd下面的所有文件,但是要保留cookie文件。刪除之后后面才方便同步chaos的數據庫,不然后面會報數據存在的錯誤。
3. 現在在相同的‘erl’會話下運行以下命令:
- 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文件。在末尾添加:
- {domain_balancing_component_number, "chaos", 2}.
2) 修改日志級別為debug方便觀察后台信息。
3) 完成以上操作重啟ejabberd服務。
參考資料