如何使安装在 docker 中的 Hazelcast 节点在不同的 aws 实例上相互交互?
How to make Hazelcast nodes installed in docker on different aws instances interact with each other?
我有三台 aws 机器,我在上面设置了三个安装了 hazelcast-3.5.4 的 docker 容器(ubuntu)。aws 配置设置为我通常使用 Hazelcast 时所做的设置(没有 docker)。节点没有发现彼此。如何让他们互动或发现彼此?
Hazelcast.xml 文件如下所示:
<join>
<multicast enabled="false">
<multicast-group>224.2.2.3</multicast-group>
<multicast-port>54327</multicast-port>
</multicast>
<tcp-ip enabled="false">
<interface>127.0.0.1</interface>
<member-list>
<member>127.0.0.1</member>
</member-list>
</tcp-ip>
<aws enabled="true">
<access-key>Some_key</access-key>
<secret-key>Secret_key</secret-key>
<!--optional, default is us-east-1 -->
<region>us-east-1</region>
<!--optional, default is ec2.amazonaws.com. If set, region shouldn't be set as it will override this property -->
<host-header>ec2.amazonaws.com</host-header>
<!-- optional, only instances belonging to this group will be discovered, default will try all running instances -->
<!--security-group-name>hazelcast-sg</security-group-name-->
<tag-key>type</tag-key>
<tag-value>hz-nodes</tag-value>
</aws>
</join>
<public-address>private-ip-of-aws-node</public-address>
<properties>
<property name="hazelcast.local.localAddress">private-ip-of-aws-node</property>
</properties>
我还按照类似 post 某处的建议添加了另外两个条目,但似乎对我不起作用。
您需要使用 --net=host
选项 运行 您的 hazelcast docker 图像。我测试了由 hazelcast (https://hub.docker.com/r/hazelcast/hazelcast/) 发布的 docker 图像,版本为 3.5.4,在 aws ec2 上有两个实例。我的 Docker 版本是 Docker version 1.9.1, build a34a1d5
,我在 ec2 上使用的 ami 是 Ubuntu Server 14.04 LTS (HVM), SSD Volume Type - ami-fce3c696
,这是我的 hazelcast.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.5.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<group>
<name>dev</name>
<password>dev-pass</password>
</group>
<management-center enabled="false">http://localhost:8080/mancenter</management-center>
<network>
<port auto-increment="true" port-count="100">5701</port>
<outbound-ports>
<!--
Allowed port range when connecting to other nodes.
0 or * means use system provided port.
-->
<ports>0</ports>
</outbound-ports>
<join>
<multicast enabled="false">
<multicast-group>224.2.2.3</multicast-group>
<multicast-port>54327</multicast-port>
</multicast>
<tcp-ip enabled="false">
<interface>127.0.0.1</interface>
<member-list>
<member>127.0.0.1</member>
</member-list>
</tcp-ip>
<aws enabled="true">
<access-key>your-acces-key</access-key>
<secret-key>your-secret-key</secret-key>
</aws>
</join>
<public-address>private-ip-address-of-ec2-instance</public-address>
</network>
<properties>
<property name="hazelcast.local.localAddress">private-ip-address-of-ec2-instance</property>
</properties>
</hazelcast>
这是我的 docker 命令,用于带有自定义配置文件的 运行ning hazelcast 图像:
docker run --net=host -e JAVA_OPTS="-Dhazelcast.config=/configFolder/hazelcast.xml" -v ~/configFolder:/configFolder -ti hazelcast/hazelcast
如果 --net=host
选项不起作用,请确保在您的安全组配置中,hazelcast 使用的端口作为入站端口打开。您还可以启用调试以查看有关 ec2 发现发现的节点的更多详细信息。
请参阅 hazelcast ec2 发现部分下的 Debugging
部分:http://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#discovering-members-within-ec2-cloud
我有三台 aws 机器,我在上面设置了三个安装了 hazelcast-3.5.4 的 docker 容器(ubuntu)。aws 配置设置为我通常使用 Hazelcast 时所做的设置(没有 docker)。节点没有发现彼此。如何让他们互动或发现彼此?
Hazelcast.xml 文件如下所示:
<join>
<multicast enabled="false">
<multicast-group>224.2.2.3</multicast-group>
<multicast-port>54327</multicast-port>
</multicast>
<tcp-ip enabled="false">
<interface>127.0.0.1</interface>
<member-list>
<member>127.0.0.1</member>
</member-list>
</tcp-ip>
<aws enabled="true">
<access-key>Some_key</access-key>
<secret-key>Secret_key</secret-key>
<!--optional, default is us-east-1 -->
<region>us-east-1</region>
<!--optional, default is ec2.amazonaws.com. If set, region shouldn't be set as it will override this property -->
<host-header>ec2.amazonaws.com</host-header>
<!-- optional, only instances belonging to this group will be discovered, default will try all running instances -->
<!--security-group-name>hazelcast-sg</security-group-name-->
<tag-key>type</tag-key>
<tag-value>hz-nodes</tag-value>
</aws>
</join>
<public-address>private-ip-of-aws-node</public-address>
<properties>
<property name="hazelcast.local.localAddress">private-ip-of-aws-node</property>
</properties>
我还按照类似 post 某处的建议添加了另外两个条目,但似乎对我不起作用。
您需要使用 --net=host
选项 运行 您的 hazelcast docker 图像。我测试了由 hazelcast (https://hub.docker.com/r/hazelcast/hazelcast/) 发布的 docker 图像,版本为 3.5.4,在 aws ec2 上有两个实例。我的 Docker 版本是 Docker version 1.9.1, build a34a1d5
,我在 ec2 上使用的 ami 是 Ubuntu Server 14.04 LTS (HVM), SSD Volume Type - ami-fce3c696
,这是我的 hazelcast.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.5.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<group>
<name>dev</name>
<password>dev-pass</password>
</group>
<management-center enabled="false">http://localhost:8080/mancenter</management-center>
<network>
<port auto-increment="true" port-count="100">5701</port>
<outbound-ports>
<!--
Allowed port range when connecting to other nodes.
0 or * means use system provided port.
-->
<ports>0</ports>
</outbound-ports>
<join>
<multicast enabled="false">
<multicast-group>224.2.2.3</multicast-group>
<multicast-port>54327</multicast-port>
</multicast>
<tcp-ip enabled="false">
<interface>127.0.0.1</interface>
<member-list>
<member>127.0.0.1</member>
</member-list>
</tcp-ip>
<aws enabled="true">
<access-key>your-acces-key</access-key>
<secret-key>your-secret-key</secret-key>
</aws>
</join>
<public-address>private-ip-address-of-ec2-instance</public-address>
</network>
<properties>
<property name="hazelcast.local.localAddress">private-ip-address-of-ec2-instance</property>
</properties>
</hazelcast>
这是我的 docker 命令,用于带有自定义配置文件的 运行ning hazelcast 图像:
docker run --net=host -e JAVA_OPTS="-Dhazelcast.config=/configFolder/hazelcast.xml" -v ~/configFolder:/configFolder -ti hazelcast/hazelcast
如果 --net=host
选项不起作用,请确保在您的安全组配置中,hazelcast 使用的端口作为入站端口打开。您还可以启用调试以查看有关 ec2 发现发现的节点的更多详细信息。
请参阅 hazelcast ec2 发现部分下的 Debugging
部分:http://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#discovering-members-within-ec2-cloud