Ignite Apache:NAT 背后的节点发现和通信

问题描述 投票:0回答:2

我正在运行一个由多个 Ignite 节点组成的集群。每个节点作为 Docker 容器在单独的服务器上运行。 在

IgniteConfiguration
中,我将localhost设置为非环回地址(这是docker设置的容器IP地址)+每个节点都放置在NAT后面,所以我还定义了
AddressResolver
(只是为了在NAT<-->docker_container之间进行映射)。

每个节点都以类似的消息开头,例如

>>> VM name: 62@ignite01
>>> Ignite instance name: ignite-node-1
>>> Local node [ID=FEDF34FE-2AD7-4A92-BDF2-BEERF36AC79, order=28, clientMode=false]
>>> Local node addresses: [ignite01/192.168.1.18]

这里

ignite01
是etc/hosts中的别名,
192.168.1.XX
是docker容器地址。

例如,当节点发现彼此时,我可以看到

NODE_JOINED
消息

[evt=NODE_JOINED, node=TcpDiscoveryNode [id=b283asde-7c68-6789-96cb-152bdaf0aadb, addrs=ArrayList [192.168.1.16], sockAddrs=HashSet [ignite02/10.10.1.5:47500, /192.168.1.16:47500],

这意味着节点将使用两个地址与远程节点通信:NAT(10.10.1.5)和内部容器地址(192.168.1.16,永远无法访问)。 因此,当节点无法通信时,我会出现启动延迟和长时间超时(因为两个地址都已尝试)

有什么方法可以在发现过程中删除无法访问的地址(通过某种方式配置

IgniteConfiguration
),以便节点仅使用 NAT 地址相互通信? 此时,我只找到了一种在发现过程开始时操作发现消息中的
sockAddrs
列表(在
TcpDiscoveryNode
类中)(通过java中的Reflection API)的方法。一切都很好,但我不确定这是否是安全的方法。

我多次尝试重新配置

IgniteConfiguration
,但我无法从发现消息中删除本地容器地址,同时使整个集群再次工作。

ignite nat
2个回答
0
投票

您应该设置专为这种情况设计的

localAddress
属性。

更多详细信息请参阅文档


0
投票

@Aleks_Rol,您可以分享您已覆盖的消息或代码片段吗?

© www.soinside.com 2019 - 2024. All rights reserved.