使用TCPIP在多节点docker环境中进行Hazelcast

问题描述 投票:5回答:3

我目前正在努力解决以下问题:

我有一个Java EE应用程序,它应该能够在集群中运行(实际上是这样)。对于节点之间的数据交换,我使用Hazelcast 3.3.3。由于我们的客户害怕UDP,我们使用TCP。因此,我为每个节点配置3个hazelcast参数:要使用的网络接口,端口和群集成员。在现实生活中(不是码头环境)一切正常。现在我想将我的Java EE服务器放入docker容器(每个节点一个),并通过Hazelcast链接它们。

我做的是:

在运行docker容器的主机上,我创建了几个虚拟网络接口(172.21.0.X)。对于每个docker容器,我提供了网络映射,如-p 172.21.0.X:5190:5190(5190是我用于Hazelcast的端口)

在我的容器内的Java EE应用程序中,我配置了hazelcast来监听接口172.21.0.X,端口5190成员172.21.0.X:5190,......现在的问题是:docker将分配一个内部IP号到每个投币器。事先我无法确定哪个IP号码码头会分配。它绝对不是我想要使用的IP(172.21.0.X)。 Hazelcast启动并告诉我:找不到匹配的界面。当然不是。 Hazelcast将检查docker容器的IP接口,类似于172.4.XX.这不符合我给hazelcast的配置(使用172.21.X.X)。

到目前为止,似乎无法指定docker容器的内部IP号。我可以从正在运行的容器中查询它,但由于我需要在启动容器之前完成Java EE服务器的配置,所以为时已晚。

有什么提示吗?是否可以使用TCPIP运行Hazelcast?

docker hazelcast tcp-ip
3个回答
5
投票

这个帖子和Nick Scavelli的回答是我认为你正在寻找的。

https://groups.google.com/forum/#!msg/vertx/MvKcz_aTaWM/QM6CfllX9HQJ


4
投票

这个帖子提供了一个答案和一个例子:https://groups.google.com/d/msg/orient-database/ehfKcInWZXs/wxs8xLUOGB8J

基本上你在hazelcast文件中使用了hazelcast变量,即

<property name="hazelcast.local.localAddress">${hazelcast.ip}</property>

然后,当您运行包含的docker时,添加:

-e IP=`ip route | awk '/default/ { print  $9 }'`

这在docker容器中设置了一个环境变量。然后在那里你做这样的事情:

CMD ["java", "-Dhazelcast.ip=${IP}", ...

因此它采用了docker env变量,并将其作为定义粉碎成java,然后在运行时将其删除并替换为其配置文件。


0
投票

我想让@ gremwell的答案保持最新,因为现在它不太正确。物业hazelcast.local.localAddress不再有效。相反,应该将此代码段放在hazelcast.xml中

   <network>
        <public-address>${hazelcast.ip}:${hazelcast.port}</public-address>
        <port auto-increment="false" port-count="100">${hazelcast.port}</port>
        ...
   </network>

然后在启动docker容器时传递params(我使用官方hazelcast图像并使用-v标志使用我的配置挂载文件夹)

sudo docker run -p 5701:5701 -e JAVA_OPTS="-Dhazelcast.config=/etc/conf/hazelcast.xml -Dhazelcast.ip=`ip route get 8.8.8.8 | awk '{print $NF; exit}'` -Dhazelcast.port=5701" -v /data/docker/hazelcast:/etc/conf -ti hazelcast/hazelcast

命令-Dhazelcast.ip=ip route get 8.8.8.8 | awk '{print $NF; exit}'接受主机ip并将其作为hazelcast.ip变量传递到配置文件中。内部端口和docker端口映射应该在3个地方类似5701。下一个容器运行5702,依此类推。

希望这可以帮助。

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