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