[Ejabberd]安装及集群搭建

以前个人记录在chinaunix的部署记录

部署前沿

本次集群部署Ejabberd采用默认Mnesia数据库作为数据存储模式,暂不考虑MySQL替代默认数据库的情况。 
一个XMPP域是由一个或多个ejabberd节点伺服的. 这些节点可能运行在通过网络连接的不同的机器上. 它们都必须有能力连接到所有其他节点的4369端口, 并且必须有相同的 magic cookie (在所有节点上,文件 ~ejabberd/.erlang.cookie 必须是相同的 ). 这是必须的,因为所有节点交换关于已连接的用户, s2s连接, 已注册的服务, 等等…信息.

安装测试架构

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官网]

编译及安装

Code    View Copy Print
  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验证方法

启动与关闭

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。

Ejabberd Cluster

ejabberd添加帐户
ejabberdctl register admintest chaos 123456
•注:admintest是帐户名,chaos是虚拟机名,123456是帐户密码 编辑ejabberd.cfg文件配置ejabberd帐户权限
{acl, admin, {user, "admintest", "chaos"}}
重启ejabberd,配置生效 Web管理  ejabberd Web管理允许使用web浏览器管理大部分ejabberd.

Ejabberd Cluster 配置

现将chaos和gaia加入到一个集群中。前面已经完成了chaos的Ejabberd安装,并配置node名为:chaos 从chaos机器拷贝.erlang.cookie文件到gaia机器.默认cookie文件放置为:/usr/local/ejabberd/var/lib/ejabberd。或者你也可以增加‘-setcookie content_of_.erlang.cookie’选项到以下所有‘erl’ 命令. 在gaia机器上,在ejabberd工作目录中,以 ejabberd 守候进程用户运行以下命令:
Code    View Copy Print
  1. erl -sname ejabberd      
  2. -mnesia dir '"/var/lib/ejabberd/"'      
  3. -mnesia extra_db_nodes "['ejabberd@chaos ']"     
  4. -s mnesia      
  5.      
  6. mnesia:change_table_copy_type(schema, node(), disc_copies).    
注意:gaia机器的ejabberd不能启动,如果启动,执行上面的脚步会报错。最好是在执行这段指令之前可以删除gaia机器上面的数据库,也就是/usr/local/ejabberd/var/lib/ejabberd下面的所有文件,但是要保留cookie文件。删除之后后面才方便同步chaos的数据库,不然后面会报数据存在的错误。 现在在相同的‘erl’会话下运行以下命令:   以上指令是为该数据库建立本地磁盘存储. 现在你可以增加更多表的复制到这个节点 ,使用‘mnesia:add_table_copy’ 或 ‘mnesia:change_table_copy_type’如上 (只是把 ‘schema’ 替换成其他表名,并且 ‘disc_copies’可以被替换成‘ram_copies’ 或 ‘disc_only_copies’). 哪个表被复制,依赖于你的需要, 你可以从‘mnesia:info().’命令得到一些提示, 通过查看每个位于 ’first’的表的大小和缺省的存储类型. 复制一个表使得这个节点的这个表的查询更加快速. 写入, 另一方面, 将更慢. 而且当然如果复制之一的机器挂了, 其他复制将被使用. 运行‘init:stop().’ 或只是 ‘q().’ 退出 Erlang shell. 这可能要花些时间,如果 Mnesia 还没有从first传输和处理完所有数据. 现在在第二台机器上使用和第一台机器类似的配置运行 ejabberd: 你可能不需要重复‘acl’ 和 ‘access’ 选项,因为它们将从第一台机器获得; 并且 mod_irc 只应该在集群里的一台机器上激活. 你可以在其他机器上重复这些步骤来服务于这个域.

Ejabberd负载均衡配置

修改gaia、chaos机器ejabberd.ctf文件。在末尾添加:
{domain_balancing_component_number, "chaos", 2}.
修改日志级别为debug方便观察后台信息。 完成以上操作重启ejabberd服务。

参考资料

Ejabberd官方网站 Ejabberd2安装和操作指南

你可能感兴趣的:(erlang,cluster,XMPP,ejabberd,ejabberd)