用于多个网络接口的 Hazelcast 编程 TCPIP 配置



我在我的软件中使用 hazelcast 3.3 在集群中缓存。我的代码基于以下示例Stackoverflow tcp hazelcast 示例。(更新2)现在我面临以下问题:我运行程序的主机具有各种网卡(=>多个IP号码)。我想使用不同的接口(IP号码)在同一台机器上启动程序的各种实例为此的 tcp 配置似乎是

network.getInterfaces().setEnabled(true).addInterface("<MY IP NUMBER>");

无论我在这里给出什么 IP,在操作系统端 hazelcast 始终绑定到 0.0.0.0(所有 IP)。这是想要的吗?我希望 hazelcast 只绑定到特定的 IP。hazelcast 是否自行执行数据包过滤,因此同时绑定到所有接口?这意味着我不能对各种正在运行的程序实例使用相同的端口号,因为绑定到 0.0.0.0 当然会无法启动第二个客户端(实际发生)

研究 Hazelcast

文档(网络) 可以肯定地说,Hazelcast 默认绑定到所有网络接口。要更改此设置,请保留此系统属性:hazelcast.socket.bind.any文档说:设置为 false,它只会绑定到指定的接口。我没有检查出来,但这听起来像是我问题的解决方案。

编辑:我现在尝试了,它奏效了。Hazelcast仅连接到给定的接口。

Windows上运行"ipconfig"(或在Linux上运行"ifconfig"等)以查看所有网络接口。您应该至少看到 127.0.0.1 和其他一些。如果计算机是多宿主的(有多个网卡连接到多个网络),请确保选择正确的网卡。

底线,将接口 IP 而不是您的 IP 放入:

network.getInterfaces().setEnabled(true).addInterface("<INTERFACE IP>");

对于 XML 配置,它将如下所示:

<network>
       ... snip...
    <join>
       ... snip... 
    </join>
       ... snip... 
    <interfaces enabled="true">
        <interface> <INTERFACE IP> </interface>
    </interfaces>
       ... snip... 
</network>

另外:小心将<接口>元素放在<网络>元素下。您也可以将<接口>元素放在元素中,但如果将其放在那里,则意味着其他内容:如果您将<接口>元素放在元素内,它将被视为<成员>标签的别名/同义词,这是完全不同的东西!因此,将其置于<网络下>否则它将不起作用!!

最新更新