您好我一直在尝试设置ejabberd群集。 但是,在尝试从node2加入node1时,出现错误
在节点2上:
# ejabberdctl join_cluster ejabberd@<internal ip of node1>
Error: {no_ping,'ejabberd@<internal ip of node1>'}
我可以清楚地从node2 ping node1。
该节点都托管在AWS的同一区域中。 我已尝试允许节点1上的所有流量。 两者都有相同的.erlang.cookie。
不确定为什么我会继续犯这个错误。
# ejabberdctl status
The node 'ejabberd@<internal ip of node1>' is started with status: started
ejabberd 16.03.107 is running in that node
# netstat -lnptu
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 2190/epmd
tcp 0 0 0.0.0.0:5269 0.0.0.0:* LISTEN 2233/beam.smp
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 975/sshd
tcp 0 0 0.0.0.0:52189 0.0.0.0:* LISTEN 2233/beam.smp
tcp 0 0 0.0.0.0:5280 0.0.0.0:* LISTEN 2233/beam.smp
tcp 0 0 0.0.0.0:5222 0.0.0.0:* LISTEN 2233/beam.smp
tcp6 0 0 :::4369 :::* LISTEN 2190/epmd
tcp6 0 0 :::22 :::* LISTEN 975/sshd
节点1上的ejabberdctl.cfg:
ERLANG_NODE=ejabberd@<internal IP of node1>
节点1上的ejabberd.yml:
loglevel: 4
log_rotate_size: 10485760
log_rotate_date: ""
log_rotate_count: 1
log_rate_limit: 100
hosts:
- "<external ip of node1>"
listen:
-
port: 5222
module: ejabberd_c2s
max_stanza_size: 65536
shaper: c2s_shaper
access: c2s
-
port: 5269
module: ejabberd_s2s_in
-
port: 5280
module: ejabberd_http
request_handlers:
"/websocket": ejabberd_http_ws
web_admin: true
http_bind: true
captcha: true
auth_method: internal
shaper:
normal: 1000
fast: 50000
max_fsm_queue: 1000
acl:
local:
user_regexp: ""
loopback:
ip:
- "127.0.0.0/8"
access:
max_user_sessions:
all: 10
max_user_offline_messages:
admin: 5000
all: 100
local:
local: allow
c2s:
blocked: deny
all: allow
c2s_shaper:
admin: none
all: normal
s2s_shaper:
all: fast
announce:
admin: allow
configure:
admin: allow
muc_admin:
admin: allow
muc_create:
local: allow
muc:
all: allow
pubsub_createnode:
local: allow
register:
all: allow
trusted_network:
loopback: allow
language: "en"
modules:
mod_adhoc: {}
mod_announce: # recommends mod_adhoc
access: announce
mod_blocking: {} # requires mod_privacy
mod_caps: {}
mod_carboncopy: {}
mod_client_state: {}
mod_configure: {} # requires mod_adhoc
mod_disco: {}
mod_irc: {}
mod_http_bind: {}
mod_last: {}
mod_muc:
host: "conference.@HOST@"
access: muc
access_create: muc_create
access_persistent: muc_create
access_admin: muc_admin
mod_muc_admin: {}
mod_offline:
access_max_user_messages: max_user_offline_messages
mod_ping: {}
mod_privacy: {}
mod_private: {}
mod_pubsub:
access_createnode: pubsub_createnode
ignore_pep_from_offline: true
last_item_cache: false
plugins:
- "flat"
- "hometree"
- "pep" # pep requires mod_caps
mod_roster: {}
mod_shared_roster: {}
mod_stats: {}
mod_time: {}
mod_vcard:
search: false
mod_version: {}
allow_contrib_modules: true
答案 0 :(得分:2)
在EC2上设置Ejabberd群集时遇到了同样的问题。这里的解决方案供参考。
确保以下端口在内部/专用网络上打开
接下来在ejabberdctl.cfg文件中设置FIREWALL_WINDOW选项,如下所示。这将设置Erlang使用定义的端口范围而不是动态 用于节点通信的端口。 (参见ejabberdctl.cfg)
FIREWALL_WINDOW=4200-4210
为您使用Ejabberd节点的完整节点名称,例如:ejabberd@srv1.example.com
答案 1 :(得分:0)
您似乎在ejabberdctl.cfg中缺少配置,更改了ejabberdctl.cfg文件中的以下行 -
#INET_DIST_INTERFACE=127.0.0.1 to
INET_DIST_INTERFACE=104.10.120.122 (whatever your host public ip)
并打开erlang控制台并运行以下命令 -
net_adm:ping('ejabberd@ejabberd1'). # your node
如果它现在将返回pong,你可以在ejabberd节点之间进行集群。 运行以下命令使集群 - ejabberdctl join_cluster'ejabberd @ ejabberd1'
答案 2 :(得分:0)
拳头,@ Uday Sawant的方法是强制性的。
您还应该将每个节点信息添加到/ etc / hosts
例如,如果您的节点是
ejabberd@node1
ejabberd@node2
将它们设置为两个系统的主机文件。
对于操作系统,
添加受阻节点的主机名
vi /etc/hosts
...
node1 10.0.100.1
node2 10.0.100.2
用于erlang
vi $HOME/.hosts.erlang
'node1'.
'node2'.