AWS上的Akka种子节点会丢弃其所有邮件,因为它们与入站地址不匹配

时间:2018-01-25 19:44:02

标签: akka akka-cluster akka-remote-actor akka-remoting

我发现了许多较少记录的配置选项,但我似乎无法配置我的种子节点,以便它可以自己联系并与其他节点联系。

目前,我已将其配置为:

akka {
  cluster.multi-data-center.self-data-center = asia  
  remote.netty.tcp.hostname = "xxx.xx.xx.5"  
  remote.netty.tcp.public-hostname = "xx.xx.xxx.51"  
  cluster.seed-nodes = ["akka.tcp://application@xxx.xx.xx.5:1551"]  
  enforce-ip-family = false
  dns-use-ipv6 = false
}

在此配置中,节点可以作为种子节点连接到自身并自行运行,但尝试在public-hostname联系它的其他节点的消息将被删除:

  

2018-01-25 19:29:56,934 [错误]:app-akka.actor.default-dispatcher-5中的akka​​.remote.EndpointWriter   为非本地收件人[Actor [akka.tcp://application@xx.xx.xxx.51:1551 /]]删除消息[class akka.actor.ActorSelectionMessage]到达[akka.tcp:// application @ xx .xx.xxx.51:1551]入站地址为[akka.tcp://application@xxx.xx.xx.5:1551]

我的研究表明public-hostname configuration exists to solve this problem。也许不吧?我尝试了相反的做法,将主机名设置为公共IP,并将bind-hostname配置为IP,使种子节点能够连接到自身:

akka {
  cluster.multi-data-center.self-data-center = asia  
  remote.netty.tcp.hostname = "xx.xx.xxx.51"  
  remote.netty.tcp.bind-hostname = "xxx.xx.xx.5"  
  cluster.seed-nodes = ["akka.tcp://application@xxx.xx.xx.5:1551"]  
  enforce-ip-family = false
  dns-use-ipv6 = false
}

然后我在相反的方向遇到同样的悖论:

  

2018-01-25 19:39:08,207 [WARN]:application-akka.actor.default-dispatcher-4中的akka​​.cluster.JoinSeedNodeProcess -   在[3]次尝试后无法加入种子节点,将再次尝试。种子节点= [akka.tcp://application@xxx.xx.xx.5:1551]

     

2018-01-25 19:38:48,168 [错误]:app-akka.actor.default-dispatcher-6中的akka​​.remote.EndpointWriter   为非本地收件人[Actor [akka.tcp://application@xxx.xx.xx.5:1551 /]]删除消息[class akka.actor.ActorSelectionMessage]到达[akka.tcp:// application @ xxx .xx.xx.5:1551]入站地址为[akka.tcp://application@xx.xx.xxx.51:1551]

种子节点现在无法连接到自身,因为xx.xx.xxx.51已作为入站地址接管。

我还试图同时使用public-hostnamebind-hostname,但没有成功。

1 个答案:

答案 0 :(得分:2)

我能够通过使用外部.51地址作为所有节点(包括种子本身)的配置种子以及akka.remote来使我的种子绑定到自身并可供其他节点使用。 netty.tcp.hostname为种子。我还将内部.5地址设置为种子上的bind-hostname。不需要公共主机名。