繁体   English   中英

使用Docker在AWS上进行Hazelcast集群

[英]Hazelcast cluster over AWS using Docker

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

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

当我查看hazelcast日志时,我看到了

[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

我可以看到错误,指出绑定请求是从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的代码,请帮助我解决此问题。

谢谢

您在默认的Hazelcast绑定地址选择机制中遇到问题(#11795)

有几种解决方法:

解决方法1:系统属性

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

java -Dhazelcast.local.localAddress=[yourCorrectIpGoesHere]

要么

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

在《 Hazelcast参考手册》的“ 系统属性”一章中阅读详细信息。

解决方法2:Hazelcast网络配置

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

hazelcast.xml声明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);

阅读《 Hazelcast参考手册》的“ 接口”部分中的详细信息。

更新:使用前面的步骤,您可以设置适当的绑定地址-例如,由ip addr show返回的本地ip addr show 但是,如果您在本地IP和公共IP不同的环境(云,泊坞窗)中运行Hazelcast,这可能是不够的。

下一步:配置公共地址

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

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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM