Ejabberd安装及集群搭建

来源:互联网 发布:大数据研发工程师招聘 编辑:程序博客网 时间:2024/05/16 10:08

转自: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:安装和操作指南

原创粉丝点击