- 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>