ejabberd集群配置

本文档详细介绍了如何在三台主机上配置ejabberd集群,包括安装ejabberd、修改配置文件、复制magic cookie、启动新节点以及客户端登录等步骤,最终实现一个高可用的即时聊天服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中的一个,就可以构建很强大的即时聊天服务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值