Hazelcast 简明教程
Hazelcast - Setting up multi node instances
鉴于 Hazelcast 是一个分布式的 IMDG,并且通常在多台计算机上设置,因此它需要访问内部/外部网络。最重要的用例是在集群内发现 Hazelcast 节点。
Hazelcast 需要以下端口 -
-
1 个用于接收其他 Hazelcast 节点/客户端 Ping/数据的信息输入端口
-
n 个用于向集群的其他成员发送 Ping/数据的信息输出端口
此节点发现以几种方式发生 -
-
Multicast
-
TCP/IP
-
Amazon EC2 auto discovery
其中,我们将了解多播和 TCP/IP
Multicast
默认情况下启用多播连接机制。 https://en.wikipedia.org/wiki/Multicast 是一种通信形式,其中消息会发送到组中的所有节点。这是 Hazelcast 用于发现集群中其他成员的方式。早前我们已了解到,所有示例均使用多播来发现成员。
Example
现在,让我们明确启用它。在 hazelcast-multicast.xml 中添加以下内容:
<hazelcast
xsi:schemaLocation="http://www.hazelcast.com/schema/config
http://www.hazelcast.com/schema/config/hazelcast-config-3.12.12.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<network>
<join>
<multicast enabled="true" />
</join>
</network>
</hazelcast>
然后,让我们执行以下内容 -
java -Dhazelcast.config=hazelcast-multicast.xml -cp .\target\demo-0.0.1-
SNAPSHOT.jar com.example.demo.XMLConfigLoadExample
TCP/IP
由于陈述了多播的缺陷,因此 TCP/IP 成为首选的通信方式。在 TCP/IP 的情况下,一个成员只能连接到已知/列出的成员。
Example
我们让 TCP/IP 用于发现机制。在 hazelcast-tcp.xml 中添加以下内容:
<hazelcast
xsi:schemaLocation="http://www.hazelcast.com/schema/config
http://www.hazelcast.com/schema/config/hazelcast-config-3.12.12.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<network>
<join>
<multicast enabled="false" />
<tcp-ip enabled="true">
<members>localhost</members>
</tcp-ip>
</join>
</network>
</hazelcast>
然后,我们来执行以下命令 -
java -Dhazelcast.config=hazelcast-tcp.xml -cp .\target\demo-0.0.1-SNAPSHOT.jar
com.example.demo.XMLConfigLoadExample
Output
output 如下 -
INFO: [localhost]:5701 [dev] [3.12.12] Creating TcpIpJoiner
Jan 30, 2021 8:09:29 PM
com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl
上述输出显示 TCP/IP 连接器用于连接两个成员。
如果您在两个不同的 Shell 上执行以下命令 -
java '-Dhazelcast.config=hazelcast-tcp.xml' -cp .\target\demo-0.0.1-SNAPSHOT.jar
com.example.demo.MultiInstanceHazelcastExample
我们看到以下输出 -
Members {size:2, ver:2} [
Member [localhost]:5701 - 62eedeae-2701-4df0-843c-7c3655e16b0f
Member [localhost]:5702 - 859c1b46-06e6-495a-8565-7320f7738dd1 this
]
上述输出表示节点能够使用 TCP/IP 连接,且两者都使用本地主机作为 IP 地址。
请注意我们在 XML 配置文件中可以指定更多 IP 或机器名称(会通过 DNS 解析)。
<hazelcast
xsi:schemaLocation="http://www.hazelcast.com/schema/config
http://www.hazelcast.com/schema/config/hazelcast-config-3.12.12.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<network>
<join>
<multicast enabled="false" />
<tcp-ip enabled="true">
<members>machine1, machine2....</members>
</tcp-ip>
</join>
</network>
</hazelcast>