Apache Ignite(五):Ignite的集群部署
Ignite具有非常先進的集群能力,本文針對和集群有關的技術點做一個簡短的介紹,然后針對實際應用的可能部署形式做了說明和對比,從中我們可以發現,Ignite平臺在部署的靈活性上,具有很大的優勢。\
1.相關概念
\1.1.節點平等
\Ignite沒有master節點或者server節點,也沒有worker節點或者client節點,按照Ignite的觀點所有節點都是平等的。但是開發者可以將節點配置成master,worker或者client以及data節點。\
1.2.發現機制
\Ignite節點之間會自動感知,集群可擴展性強,不需要重啟集群,簡單地啟動新加入的節點然后他們就會自動地加入集群。這是通過一個發現機制實現的,他使節點可以彼此發現對方,Ignite默認使用TcpDiscoverySpi通過TCP/IP協議來作為節點發現的實現,也可以配置成基于多播的或者基于靜態IP的,這些方式適用于不同的場景。\
1.3.部署模式
\Ignite可以獨立運行,也可以在集群內運行,也可以將幾個jar包嵌入應用內部以嵌入式的模式運行,也可以運行在Docker容器以及Mesos和Yarn等環境中,可以在物理機中運行,也可以在虛擬機中運行,這個廣泛的適應性是他的一個很大的優勢。\
1.4.配置方式
\Ignite的大部分配置選項,都同時支持通過基于Spring的XML配置方式以及通過Java代碼的編程方式進行配置,這個也是個重要的優點。\
1.5.客戶端和服務端
\Ignite中各個節點是平等的,但是可以根據需要將節點配置成客戶端或者服務端,服務端節點參與緩存,計算,流式處理等等,而原生的客戶端節點提供了遠程連接服務端的能力。Ignite原生客戶端可以使用完整的Ignite API,包括近緩存,事務,計算,流,服務等等。
所有的Ignite節點默認都是以服務端模式啟動的,客戶端模式需要顯式地啟用,如下:
2.創建集群
\一個Ignite節點可以從命令行啟動,可以用默認的配置也可以傳遞一個配置文件。可以啟動很多的節點然后他們會自動地發現對方。
要啟動一個基于默認配置的網格節點,打開命令行然后切換到IGNITE_HOME(安裝文件夾),然后輸入如下命令:
然后會看到大體如下的輸出:
1.[02:49:12] Ignite node started OK (id=ab5d18a6)\2.[02:49:12] Topology snapshot [ver=1, nodes=1, CPUs=8, heap=1.0GB]\在嵌入式模式中,通過如下的代碼同樣可以啟動一個節點:
Ignite ignite = Ignition.start();\3.集群組
\從設計上講,所有集群節點都是平等的,所以沒有必要以一個特定的順序啟動任何節點,或者給他們賦予特定的規則。然而,Ignite可以因為一些應用的特殊需求而創建集群節點的邏輯組,比如,可能希望只在遠程節點上部署一個服務,或者給部分worker節點賦予一個叫做worker的規則來做作業的執行。比如,下面這個例子只把作業廣播到遠程節點(除了本地節點):
final Ignite ignite = Ignition.ignite();\IgniteCluster cluster = ignite.cluster();\IgniteCompute compute = ignite.compute(cluster.forRemotes());\compute.broadcast(() -\u0026gt; System.out.println(\"節點Id: \" + ignite.cluster().localNode().id()));\Ignite內置了很多預定義的集群組,同時還支持集群組的自定義。可以基于一些謂詞定義動態集群組,這個集群組只會包含符合該謂詞的節點。下面這個例子,一個集群組只會包括CPU利用率小于50%的節點,注意這個組里面的節點會隨著CPU負載的變化而改變:
IgniteCluster cluster = ignite.cluster();\ClusterGroup readyNodes = cluster.forPredicate((node) -\u0026gt; node.metrics().getCurrentCpuLoad() \u0026lt; 0.5);\4.集群配置
\Ignite中,通過DiscoverySpi節點可以彼此發現對方,可以配置成基于多播的或者基于靜態IP的。Ignite提供了TcpDiscoverySpi作為DiscoverySpi的默認實現,它使用TCP/IP來作為節點發現的實現。
對于多播被禁用的情況,TcpDiscoveryVmIpFinder會使用預配置的IP地址列表,只需要提供至少一個遠程節點的IP地址即可,但是為了保證冗余一個比較好的做法是提供2-3個網格節點的IP地址。如果建立了與任何一個已提供的IP地址的連接,Ignite就會自動地發現其他的所有節點。
也可以同時使用基于多播和靜態IP的發現,這種情況下,除了通過多播接受地址以外,TcpDiscoveryMulticastIpFinder也可以使用預配置的靜態IP地址列表。
下面的例子,顯示的是如何通過預定義的IP地址列表建立集群:
總結
以上是生活随笔為你收集整理的Apache Ignite(五):Ignite的集群部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scala 中的函数式编程基础(一)
- 下一篇: 什么叫活着!