您好,登錄后才能下訂單哦!
本篇內容主要講解“apache Ignite的集群如何部署”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“apache Ignite的集群如何部署”吧!
Ignite具有非常先進的集群能力,本文針對和集群有關的技術點做一個簡短的介紹,然后針對實際應用的可能部署形式做了說明和對比,從中我們可以發現,Ignite平臺在部署的靈活性上,具有很大的優勢。
Ignite沒有master節點或者server節點,也沒有worker節點或者client節點,按照Ignite的觀點所有節點都是平等的。但是開發者可以將節點配置成master,worker或者client以及data節點。
Ignite節點之間會自動感知,集群可擴展性強,不需要重啟集群,簡單地啟動新加入的節點然后他們就會自動地加入集群。這是通過一個發現機制實現的,他使節點可以彼此發現對方,Ignite默認使用TcpDiscoverySpi
通過TCP/IP協議來作為節點發現的實現,也可以配置成基于多播的或者基于靜態IP的,這些方式適用于不同的場景。
Ignite可以獨立運行,也可以在集群內運行,也可以將幾個jar包嵌入應用內部以嵌入式的模式運行,也可以運行在Docker容器以及Mesos和Yarn等環境中,可以在物理機中運行,也可以在虛擬機中運行,這個廣泛的適應性是他的一個很大的優勢。
Ignite的大部分配置選項,都同時支持通過基于Spring的XML配置方式以及通過Java代碼的編程方式進行配置,這個也是個重要的優點。
Ignite中各個節點是平等的,但是可以根據需要將節點配置成客戶端或者服務端,服務端節點參與緩存,計算,流式處理等等,而原生的客戶端節點提供了遠程連接服務端的能力。Ignite原生客戶端可以使用完整的Ignite API,包括近緩存,事務,計算,流,服務等等。 所有的Ignite節點默認都是以服務端模式啟動的,客戶端模式需要顯式地啟用,如下:
<bean class="org.apache.ignite.configuration.IgniteConfiguration"> <property name="clientMode" value="true"/> </bean>
一個Ignite節點可以從命令行啟動,可以用默認的配置也可以傳遞一個配置文件。可以啟動很多的節點然后他們會自動地發現對方。 要啟動一個基于默認配置的網格節點,打開命令行然后切換到IGNITE_HOME(安裝文件夾),然后輸入如下命令:
$ bin/ignite.sh
然后會看到大體如下的輸出:
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();
從設計上講,所有集群節點都是平等的,所以沒有必要以一個特定的順序啟動任何節點,或者給他們賦予特定的規則。然而,Ignite可以因為一些應用的特殊需求而創建集群節點的邏輯組,比如,可能希望只在遠程節點上部署一個服務,或者給部分worker節點賦予一個叫做worker
的規則來做作業的執行。比如,下面這個例子只把作業廣播到遠程節點(除了本地節點):
final Ignite ignite = Ignition.ignite(); IgniteCluster cluster = ignite.cluster(); IgniteCompute compute = ignite.compute(cluster.forRemotes()); compute.broadcast(() -> System.out.println("節點Id: " + ignite.cluster().localNode().id()));
Ignite內置了很多預定義的集群組,同時還支持集群組的自定義。可以基于一些謂詞定義動態集群組,這個集群組只會包含符合該謂詞的節點。下面這個例子,一個集群組只會包括CPU利用率小于50%的節點,注意這個組里面的節點會隨著CPU負載的變化而改變:
IgniteCluster cluster = ignite.cluster(); ClusterGroup readyNodes = cluster.forPredicate((node) -> node.metrics().getCurrentCpuLoad() < 0.5);
Ignite中,通過DiscoverySpi
節點可以彼此發現對方,可以配置成基于多播的或者基于靜態IP的。Ignite提供了TcpDiscoverySpi
作為DiscoverySpi
的默認實現,它使用TCP/IP來作為節點發現的實現。
對于多播被禁用的情況,TcpDiscoveryVmIpFinder
會使用預配置的IP地址列表,只需要提供至少一個遠程節點的IP地址即可,但是為了保證冗余一個比較好的做法是提供2-3個網格節點的IP地址。如果建立了與任何一個已提供的IP地址的連接,Ignite就會自動地發現其他的所有節點。
也可以同時使用基于多播和靜態IP的發現,這種情況下,除了通過多播接受地址以外,TcpDiscoveryMulticastIpFinder
也可以使用預配置的靜態IP地址列表。 下面的例子,顯示的是如何通過預定義的IP地址列表建立集群:
TcpDiscoverySpi spi = new TcpDiscoverySpi(); TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder(); // 設置預定義IP地址,注意端口或者端口范圍是可選的。 ipFinder.setAddresses(Arrays.asList("1.2.3.4", "1.2.3.5:47500..47509")); spi.setIpFinder(ipFinder); IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setDiscoverySpi(spi); // 啟動集群 Ignition.start(cfg);
和計算等有關的代碼可能是任意自定義的類,在Ignite中, 遠程節點會自動感知這些類,不需要顯式地將任何jar文件部署或者移動到任何遠程節點上。這個行為是通過對等類加載(P2P類加載)實現的,他是Ignite中的一個特別的分布式類加載器,實現了節點間的字節碼交換。當對等類加載啟用時,不需要在集群內的每個節點上手工地部署代碼,也不需要每次在發生變化時重新部署。
可以通過如下方法啟用對等類加載;
<bean class="org.apache.ignite.configuration.IgniteConfiguration"> <property name="peerClassLoadingEnabled" value="true"/> </bean>
對于很多的云環境,通常有多播被禁用以及IP地址不固定的限制,對于這種情況,Ignite提供了發現的擴展機制解決了該問題,并且內置了對于常見的云服務(比如AWS)的支持,本文不贅述,開發者可以參照相關的文檔。
對于Docker、Mesos、Yarn等環境,Ignite同樣支持,本文不贅述,開發者可以參照相關的文檔。
Ignite的部署模式非常的靈活,在實際的場景中可以針對實際需要采用不同的部署方式,下面做簡單的總結和對比:
這種情況下,集群的部署完全獨立于應用,這個集群可以用于分布式計算,分布式緩存,分布式服務等,這時應用以客戶端模式接入集群進行相關的操作,大體是如下的部署模式:
優點
對已有的應用運行環境影響小,并且這個集群可以共享,為多個應用提供服務,對整個應用來說,額外增加了很多的計算和負載能力。
缺點
需要單獨的一組機器,相對成本要高些,如果緩存操作并發不高或者計算不飽和,存在資源利用率低的情況。整體架構也變得復雜,維護成本也要高些。
這種情況下,可以將必要的jar包嵌入已有應用的內部,利用Ignite的發現機制,自動建立集群,大體是如下的部署模式:
優點
無需額外增加機器,成本最低,Ignite可以和應用無縫集成,所有節點都為服務端節點,可以充分利用Ignite的豐富功能。這個模式可擴展性最好,簡單增加節點即可快速擴充整個系統的計算和負載能力。
缺點
Ignite占用了服務器的部分資源,對應用整體性能有影響,可能需要進行有針對性的優化,應用更新時,集群可能需要重啟,這時如果Ignite需要加載大量的數據,重啟的時間可能變長,甚至無法忍受。
這種情況下,將上述2種模式混合在一起,即同時增加機器部署獨立集群,同時又將Ignite嵌入應用內部以服務端模式運行,通過邏輯集群組進行資源的分配,整體上形成更大的集群,大體是如下的部署模式:
這種模式更為靈活,調優后能做到成本、功能、性能的平衡,綜合效果最佳。這時可以將緩存的數據通過集群組部署到應用外部的節點上,這樣可以避免頻繁的冷啟動導致緩存數據頻繁的長時間加載,對于計算,也能夠動態地充分利用所有計算節點的資源。
到此,相信大家對“apache Ignite的集群如何部署”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。