Restcomm 集群:节点列表在 sip-balancer 中为空

Restcomm cluster: nodes list is empty in sip-balancer

我正在尝试创建 restcomm 集群:sip-balancer + 一些 restcomm 实例。但是我无法连接 restcomm 节点和 sip-loadbalancer。

我使用了本教程 - http://docs.telestax.com/sip-servlets-clustering-high-availability/ 但是没有得到任何结果。

看来应该是 2 步

  1. 更改 path-name 中的属性 standalone/configuration/standalone-sip.xml
  2. 添加org.mobicents.ha.javax.sip.BALANCERSstandalone/configuration/mss-sip-stack.properties

据我所知,节点和负载均衡器使用 rmi 作为通道。我看到(我使用 netstat)服务器侦听端口 2000 并且节点与它建立连接。

但是当我尝试从 sip 客户端使用负载平衡器时 returns "error 500 - no available nodes"。 我还使用了远程调试 - 节点列表为空。

我错过了什么吗?

p.s。我在同一台机器上使用了 docker restromm 实例和 sip-loadbalancer。

谢谢,

所以我找到了我的问题。

根据 restcomm 节点上的日志文件 - 它无法通过 RMI 连接到平衡器。

连接错误很奇怪 - Connection refused to host: 127.0.0.1 有时 Connection refused to host: 127.0.1.1

昨天我厌倦了指定 java.rmi.server.hostname 但它对我没有帮助

今天我为平衡器创建了小型 RMI 客户端,它在我的本地机器上工作(平衡器也托管在它上面)。但是这个应用程序确实可以在虚拟机上运行。所以我在代码中添加了更多日志并发现:

  1. app 可以远程查找
  2. 这个been的远程端点是127.0.0.1,但应该是远程机器的ip地址

之后,我为我的 sip-balancer 指定了 externalHostpublic-ip,并使用 127.0.1.1

获得了 bean 端点地址

所以发现了问题 - ubuntu 使用此 "local" IP 地址作为您的 "machine name"。 您可以在 /etc/hosts 中找到它。

sip-balancer(java 应用程序) 获取它作为服务端点的 ip 地址

我的修复是 - /etc/hosts 中的 change 127.0.1.1 to 127.0.0.1。之后 sip-balancer 为远程对象提供你机器的真实 IP 地址。

结论:我的问题 - 错误的操作系统:)

常见解决方案:开发者应检查地址类型,不要使用环回地址。