gpt4 book ai didi

amazon-web-services - 使用 Docker 在 AWS 上的 Hazelcast 集群

转载 作者:行者123 更新时间:2023-12-02 19:07:42 25 4
gpt4 key购买 nike

您好我正在尝试通过 AWS 配置 hazelcast 集群。

我在 docker 容器中运行 hazelcast 并使用 --net=host 来使用主机网络配置。

当我查看榛树日志时,我看到了

[172.17.0.1]:5701 [herald] [3.8] Established socket connection between /[node2]:5701 and /[node1]:47357
04:24:22.595 [hz._hzInstance_1_herald.IO.thread-out-0] DEBUG c.h.n.t.SocketWriterInitializerImpl - [172.17.0.1]:5701 [herald] [3.8] Initializing SocketWriter WriteHandler with Cluster Protocol
04:24:22.595 [hz._hzInstance_1_herald.IO.thread-in-0] WARN c.h.nio.tcp.TcpIpConnectionManager - [172.17.0.1]:5701 [herald] [3.8] Wrong bind request from [172.17.0.1]:5701! This node is not requested endpoint: [node2]:5701
04:24:22.595 [hz._hzInstance_1_herald.IO.thread-in-0] INFO c.hazelcast.nio.tcp.TcpIpConnection - [172.17.0.1]:5701 [herald] [3.8] Connection[id=40, /[node2]:5701->/[node1]:47357, endpoint=null, alive=false, type=MEMBER] closed. Reason: Wrong bind request from [172.17.0.1]:5701! This node is not requested endpoint: [node2]:5701

我可以看到错误说绑定(bind)请求来自 172.17.0.1 到 node1,并且 node1 不接受这个请求。
        final Config config = new Config();
config.setGroupConfig(clientConfig().getGroupConfig());
final NetworkConfig networkConfig = new NetworkConfig();
final JoinConfig joinConfig = new JoinConfig();
final TcpIpConfig tcpIpConfig = new TcpIpConfig();
final MulticastConfig multicastConfig = new MulticastConfig();
multicastConfig.setEnabled(false);
final AwsConfig awsConfig = new AwsConfig();
awsConfig.setEnabled(true);
// awsConfig.setSecurityGroupName("xxxx");
awsConfig.setRegion("xxxx");
awsConfig.setIamRole("xxxx");
awsConfig.setTagKey("type");
awsConfig.setTagValue("xxxx");
awsConfig.setConnectionTimeoutSeconds(120);
joinConfig.setAwsConfig(awsConfig);
joinConfig.setMulticastConfig(multicastConfig);
joinConfig.setTcpIpConfig(tcpIpConfig);
networkConfig.setJoin(joinConfig);
final InterfacesConfig interfaceConfig = networkConfig.getInterfaces();
interfaceConfig.setEnabled(true).addInterface("172.29.238.71");
config.setNetworkConfig(networkConfig);

以上是配置 AWSConfig 的代码
请帮我解决这个问题。

谢谢

最佳答案

您正在经历 issue (#11795)在默认的 Hazelcast 绑定(bind)地址选择机制中。

有几种可用的解决方法:

解决方法 1:系统属性

您可以通过提供正确的 IP 地址作为 hazelcast.local.localAddress 来设置绑定(bind)地址。系统属性:

java -Dhazelcast.local.localAddress=[yourCorrectIpGoesHere]

或者

System.setProperty("hazelcast.local.localAddress", "[yourCorrectIpGoesHere]")

System properties 中阅读详细信息Hazelcast 引用手册的章节。

解决方法 2:Hazelcast 网络配置

Hazelcast 网络配置允许您指定可用于绑定(bind)服务器的 IP 地址。

hazelcast.xml 中的声明性:

<hazelcast>
...
<network>
...
<interfaces enabled="true">
<interface>10.3.16.*</interface>
<interface>10.3.10.4-18</interface>
<interface>192.168.1.3</interface>
</interfaces>
</network>
...
</hazelcast>

程序化:

Config config = new Config();
NetworkConfig network = config.getNetworkConfig();
InterfacesConfig interfaceConfig = network.getInterfaces();
interfaceConfig.setEnabled(true).addInterface("192.168.1.3");
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(config);

Interfaces 中阅读详细信息Hazelcast 引用手册的部分。

更新:
通过前面的步骤,您可以设置正确的绑定(bind)地址—— ip addr show 返回的本地地址。例如。然而,如果您在本地 IP 和公共(public) IP 不同的环境(云、docker)中运行 Hazelcast,可能还不够。

下一步:配置公共(public)地址

在集群节点在报告的另一个节点的本地地址下看不到彼此的环境中,此步骤是必要的。您必须设置公共(public)地址 - 它是节点能够访问的地址(可选地指定端口)。

networkConfig.setPublicAddress("172.29.238.71");

// or if a non-default Hazelcast port is used - e.g.9991
networkConfig.setPublicAddress("172.29.238.71:9991");

关于amazon-web-services - 使用 Docker 在 AWS 上的 Hazelcast 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47302340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com