Ejabberd 集群
更新
- 2015-03-22 Ejabberd 15.03 新特性
ejabberdctl
新增join_cluster
命令添加一个节点到集群中
http://docs.ejabberd.im/admin/guide/#adding-a-node-in-a-cluster- 新增Websocket支持
http://docs.ejabberd.im/admin/guide/#websocket-support
安装Erlang 17.3 (Ubuntu 14.04)
配置工作流概要
- 修改两个服务器的HOSTNAME
- 修改两个服务器的
/etc/hosts
(内网)或DNS(外网) - 修改
/etc/ejabberd/ejabberd.yml
的hosts
- 设置虚拟主机名称
- 修改
/etc/ejabberd/ejabberdctl.cfg
- 修改
ERLANG_NODE
(节点名) - 修改
INET_DIST_INTERFACE
(节点地址)
- 修改
下载和编译
easy_cluster
1
wget https://github.com/chadillac/ejabberd-easy_cluster/raw/master/easy_cluster.erl mv easy_cluster.erl /lib/ejabberd/ebin cd /lib/ejabberd/ebin erlc easy_cluster.erl
使用
easy_cluster
启动ejabberd到live模式1
ejabberdctl live
执行
1 | easy_cluster:test_node('name@node') |
如何验证集群成功了
在ejabberdctl live
模式下执行查看`running db nodes`, 如果包含两个集群的节点列表. 那么集群就运行起来了.1
mnesia:info().
配置示例
将设有两台服务器
1 | master.chat-server.info slave.chat-server.info |
使用MySQL替代Mnesia
登陆MySQL
1 | mysql> mysql -uroot -proot --host=192.168.8.33 |
创建数据库
1 | create database ejabberd charset = utf8 |
导入表结构
1 | source /root/ejabberd/sql/mysql.sql |
Ejabberd的部分模块支持在MySQL存储数据, 比如mod_roster
, 需要在模块配置中设置db_type: odbc
并创建数据库表结构, 例如:
编辑/etc/ejabberd/ejabber.yml
,设置mod_roster
模块的db_type: odbc
1 | mod_roster: db_type: odbc |
修改
/etc/hosts
, 在两台服务器上分别增加如下记录:1
192.168.8.100 ejabberd@master.chat-server.info 192.168.8.200 ejabberd@slave.chat-server.info
两台服务器上分别设置HOSTNAME为
master.chat-server.info
, 和slave.chat-server.info
1
vi /etc/hostname
两台服务器分别配置/etc/ejabberd/ejabberdctl.cfg
:
- 修改节点名称
ERLANG_NODE
1 | # master ERLANG_NODE=ejabberd@master.chat-server.info # slave ERLANG_NODE=ejabberd@slave.chat-server.info |
- 分别设置
/etc/ejabberd/ejabberd.yml
中的hosts
1 | # master hosts: - "master.chat-server.info" # slave hosts: - "slave.chat-server.info" |
参考资料
- http://chad.ill.ac/post/35967173942/easy-ejabberd-clustering-guide-mnesia-mysql
- https://raymii.org/s/tutorials/Set_up_a_federated_XMPP_Chat_Network_with_ejabberd.html
- https://www.ejabberd.im/node/5669?q=node/5669
- http://cqwjfck.blog.chinaunix.net/uid-22312037-id-3509097.html
- http://chad.ill.ac/post/55193155663/easy-ejabberd-clustering-multi-master-fault-tolerant
- http://tdewolf.blogspot.com/2009/07/clustering-ejabberd-nodes-using-mnesia.html