Erlang - Ejabberd join_cluster错误:{no_ping ...}

时间:2016-04-26 10:55:47

标签: amazon-web-services erlang ejabberd

您好我一直在尝试设置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

3 个答案:

答案 0 :(得分:2)

在EC2上设置Ejabberd群集时遇到了同样的问题。这里的解决方案供参考。

确保以下端口在内部/专用网络上打开

  • 5222 - xmpp客户端连接
  • 5280 - 门户网站
  • 4369 - EPMD
  • 5269 - S2S
  • 4200 - 4210节点通信
  • 还允许内部ping(icmp数据包)以防万一。

接下来在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

将它们设置为两个系统的主机文件。

  1. 对于操作系统,

    添加受阻节点的主机名

    vi /etc/hosts
    ...
    node1    10.0.100.1
    node2    10.0.100.2
    
  2. 用于erlang

    vi $HOME/.hosts.erlang
    'node1'.
    'node2'.
    

host file for ejabberd