我发现了很多文档较少的配置选项可供使用,但我似乎无法配置我的种子节点,使其既可以联系自己,也可以被其他节点联系。
目前,我已将其配置为:
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-hostname
and bind-hostname
,但没有成功。