【发布时间】:2019-11-03 18:20:03
【问题描述】:
我正在尝试使用 ECS 运行服务器集群,它使用 hazelcast。我在网上搜索过,也问过亚马逊,但我找不到在这种情况下如何设置 hazelcast 的说明。有人可以分享吗?谢谢。
【问题讨论】:
标签: amazon-ec2 hazelcast
我正在尝试使用 ECS 运行服务器集群,它使用 hazelcast。我在网上搜索过,也问过亚马逊,但我找不到在这种情况下如何设置 hazelcast 的说明。有人可以分享吗?谢谢。
【问题讨论】:
标签: amazon-ec2 hazelcast
如果只有一个容器,这个解决方案效果很好;但是,运行多个容器是有问题的,因为 ECS docker 容器都具有相同的 IP 地址,因此当您尝试启动第二个容器时,该成员不是唯一的。有人发帖here 说明docker 需要与--net=host option 一起运行;但是,我认为您不能使用 ECS 任务定义明确地做到这一点。
【讨论】:
我只是在评估这种情况,因为我正在考虑将 Hazelcast 用于我们的 ECS 部署,所以我没有尝试过,但这是我发现的:
如果您只使用固定的hostPort,这似乎是可能的,因此显然每个主机只有一个容器是可能的。这样,它就应该像常规 EC2 部署一样工作。
对于 ECS,应该可以编写一个 custom discovery strategy 使用 network bindings from DescribeTasks API 方法来发现动态端口。
【讨论】:
这绝对是可能的,因为我目前在测试和生产系统中这样做。有几个技巧可以让它工作。首先,您的网络必须正确。将您选择的任何端口转发到容器中的端口 5701。接下来,获取位于 http://169.254.169.254/latest/meta-data/local-ipv4 的实例 IP 并将其设置在属性“hazelcast.local.localAddress”上。接下来,将属性“hazelcast.local.publicAddress”设置为此 IP 和您在步骤 1 中转发到 5701 的端口。例如,如果实例 IP 是 172.1.2.3,并且您在步骤 1 中转发端口 5702->5701,则将该属性设置为“172.1.2.3:5702”。为了更好的措施,还要在HazelcastConfig.getNetworkConfig().setPublicAddress(ipAndPort); 上设置这个 ip/port 对。最后的 strp 是通过在网络配置中设置适当的 AWS 值来确保 EC2 自动发现工作。我应该注意到这些设置目前正在与 Hazelcast 3.10.5 一起运行,3.12.3 正在测试中。
【讨论】: