- Hazelcast 教程
- Hazelcast - 首页
- Hazelcast - 简介
- Hazelcast - 设置
- Hazelcast - 第一个应用程序
- Hazelcast - 配置
- 设置多节点实例
- Hazelcast - 数据结构
- Hazelcast - 客户端
- Hazelcast - 序列化
- Hazelcast 高级
- Hazelcast - Spring 集成
- Hazelcast - 监控
- Map Reduce & 聚合
- Hazelcast - 集合监听器
- 常见陷阱 & 性能技巧
- Hazelcast 有用资源
- Hazelcast - 快速指南
- Hazelcast - 有用资源
- Hazelcast - 讨论
Hazelcast - 多节点实例设置
鉴于 Hazelcast 是一个分布式 IMDG,通常在多台机器上设置,它需要访问内部/外部网络。最重要的用例是在集群中发现 Hazelcast 节点。
Hazelcast 需要以下端口:
1 个入站端口用于接收来自其他 Hazelcast 节点/客户端的 ping/数据
n 个出站端口,用于向集群中的其他成员发送 ping/数据。
此节点发现以几种方式发生:
多播
TCP/IP
Amazon EC2 自动发现
其中,我们将重点介绍多播和 TCP/IP
多播
默认情况下启用多播加入机制。 https://en.wikipedia.org/wiki/Multicast 是一种通信形式,其中消息传输到组中的所有节点。这就是 Hazelcast 用于发现集群中其他成员的方式。我们之前看过的所有示例都使用多播来发现成员。
示例
现在让我们明确地打开它。将以下内容保存到 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
输出
在输出中,我们注意到来自 Hazelcast 的以下几行,这意味着有效地使用了多播连接器来发现成员。
Jan 30, 2021 5:26:15 PM com.hazelcast.instance.Node INFO: [localhost]:5701 [dev] [3.12.12] Creating MulticastJoiner
默认情况下,多播接受来自多播组中所有机器的通信。这可能是一个安全问题,因此通常在内部部署中,多播通信会被防火墙阻止。因此,虽然多播适用于开发工作,但在生产环境中,最好使用基于 TCP/IP 的发现。
TCP/IP
由于多播存在上述缺点,因此 TCP/IP 是首选的通信方式。在 TCP/IP 的情况下,成员只能连接到已知/列出的成员。
示例
让我们使用 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
输出
输出如下:
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 加入,并且两者都使用 localhost 作为 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>