1

我发现了很多文档较少的配置选项可供使用,但我似乎无法配置我的种子节点,使其既可以联系自己,也可以被其他节点联系。

目前,我已将其配置为:

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 [错误]:application-akka.actor.default-dispatcher-5 中的 akka.remote.EndpointWriter - 为非本地收件人 [Actor[ 丢弃消息 [class akka.actor.ActorSelectionMessage] akka.tcp://application@xx.xx.xxx.51:1551/]] 到达 [akka.tcp://application@xx.xx.xxx.51:1551] 入站地址是 [akka.tcp:/ /application@xxx.xx.xx.5:1551]

我的研究表明存在公共主机名配置来解决这个问题。也许不吧?我尝试了相反的方法,将主机名设置为公共 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 [警告]: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 [错误]:application-akka.actor.default-dispatcher-6 中的 akka.remote.EndpointWriter - 为非本地收件人 [Actor[ 丢弃消息 [class akka.actor.ActorSelectionMessage] akka.tcp://application@xxx.xx.xx.5:1551/]] 到达 [akka.tcp://application@xxx.xx.xx.5:1551] 入站地址是 [akka.tcp:/ /application@xx.xx.xxx.51:1551]

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

我也尝试同时使用public-hostnameand bind-hostname,但没有成功。

4

1 回答 1

2

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

于 2018-01-25T22:49:09.133 回答