ejabberd集群配置

1.准备工作

准备了三台主机,两台运行fedora 21,另外一台运行ubuntu 14.04。ejabberd采用版本15.04。详细情况如下:

hostnameuserIPOS
im1ejabberd10.206.24.191Fedora 21 Workstation
im2ejabberd10.206.25.219Ubuntu 14.04 Desktop
im3ejabberd10.206.24.102Fedara 21 Workstation

由于无法使用DNS服务,故必须进行本地域名解析,在三台主机的/etc/hosts文件中加入以下三行:

10.206.24.191          im1 
10.206.25.219          im2
10.206.24.102          im3

ejabberd将安装在相同的目录下:/home/ejabberd/Opt/ejabberd

2.在im1上配置、安装并启动ejabberd 15.04

配置./configure --enable-nif --enable-user=ejabberd --prefix=/home/ejabberd/Opt/ejabberd
安装:make && make install

3.修改配置文件

主要修改两处,xmpp域名和访问控制列表

hosts:
  - "im.test.com"
acl:
  admin:
    user:
      - "admin": "im.test.com"

4.在主机im1上启动ejabberd并注册100个用户

启动ejabberd:ejabberdctl --node ejabberd@im1 start
注册100个用户:

let i=1
while [ $i -lt 101 ];
do
     ejabberdctl --node ejabberd@im1 register $i im.test.com 123456;
     let i++
done

注册管理员(需要执行第三步):
ejabberdctl --node ejabberd@im1 register admin im.test.com 123456;

5.复制magic cookie到其余两个主机

将im1上ejabberd用户家目录下的.erlang.cookie文件复制到主机im2和主机im3的ejabberd用户的家目录下。

6.在主机im2上配置,安装ejabberd

配置:./configure --enable-nif --enable-user=ejabberd --prefix=/home/ejabberd/Opt/ejabberd
安装:make && make install

7.复制im1上的ejabberd配置文件到im2上

scp ejabberd@im1:/home/ejabberd/Opt/ejabberd/etc/ejabberd/ejabberd.yml ~/Opt/ejabberd/etc/ejabberd/ejabberd.yml

8.复制im1上的数据库到im2上

在im2上输入以下命令打开一个erlang shell :

erl  -sname ejabberd@im2 \
     -mnesia dir '"/home/ejabberd/Opt/ejabberd/var/lib/ejabberd"' \
    -mnesia extra_db_nodes     "['ejabberd@im1']" \
        -s mnesia

执行上面的命令将连通两个节点,接着在erlang shell中输入mnesia:info(),将可以看到远程节点ejabberd@im1上的数据表。根据需要在erlang shell中执行下面的命令复制一些im1上的表到im2.

mnesia:change_table_copy_type(schema, node(), disc_copies).
mnesia:add_table_copy(passwd, node(), disc_copies).
mnesia:add_table_copy(muc_room, node(), disc_copies).
mnesia:add_table_copy(muc_online_room, node(), ram_copies).

需要复制哪些表,视自己的需求而定。将表复制到本节点会加速读操作,但会减慢写操作(因为同时要写多个节点)。

9.执行init:stop()或者q()退出erlang shell

10.在im2上启动新节点

ejabberdctl  --node  ejabberd@im2   start

11.在主机im3上执行6-11步即可在主机im3上启动一个新的ejabberd节点并将其加入集群

12.观测集群中的节点

在浏览器中输入:im.test.com:5280/admin 即可登录到ejabberd的管理后台,查看运行中的节点以及已经注册的用户。在运行浏览器的机器仍然需要进行本地域名解析:在hosts文件中加入以下三行中的任一行:

im.test.com     10.206.24.191  
im.test.com     10.206.25.219  
im.test.com     10.206.24.102

虚拟主机im.test.com
运行中的3个节点
图中节点的名字与文中的节点名字不一样。我试验的时候三个主机的名字分别是:ejabberd,zzdcweb和workstation。

13.客户端登陆

已经注册的用户可以在这三个节点中的任意一个上面登录,使用spark测试发现不论主机项设为三个节点的IP中的任意一个均可以登录。
xmpp客户端登陆
这样三台主机构成一个集群,服务于同一个xmpp域名im.test.com。如果具有DNS服务,那么当client请求im.test.com的时候,DNS能够随机或者按照系统的负载返回三个IP中的一个,就可以构建很强大的即时聊天服务。


版权声明:本文为yifuyou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。