1.准备工作
准备了三台主机,两台运行fedora 21,另外一台运行ubuntu 14.04。ejabberd采用版本15.04。详细情况如下:
hostname | user | IP | OS |
---|---|---|---|
im1 | ejabberd | 10.206.24.191 | Fedora 21 Workstation |
im2 | ejabberd | 10.206.25.219 | Ubuntu 14.04 Desktop |
im3 | ejabberd | 10.206.24.102 | Fedara 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
图中节点的名字与文中的节点名字不一样。我试验的时候三个主机的名字分别是:ejabberd,zzdcweb和workstation。
13.客户端登陆
已经注册的用户可以在这三个节点中的任意一个上面登录,使用spark测试发现不论主机项设为三个节点的IP中的任意一个均可以登录。
这样三台主机构成一个集群,服务于同一个xmpp域名im.test.com。如果具有DNS服务,那么当client请求im.test.com的时候,DNS能够随机或者按照系统的负载返回三个IP中的一个,就可以构建很强大的即时聊天服务。