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

© . All rights reserved.