apache ignite_通过示例获取Apache Ignite Baseline拓扑
apache ignite
點燃基準拓撲或BLT代表群集中的一組服務器節點,這些服務器節點將數據持久存儲在磁盤上。
其中,N1-2和N5服務器節點是具有本機持久性的Ignite集群的成員,該集群使數據能夠持久存儲在磁盤上。 N3-4和N6服務器節點是Ignite群集的成員,但不是基準拓撲的一部分。
基線拓撲中的節點是常規服務器節點,該節點將數據存儲在內存和磁盤中,并且還參與計算任務。 Ignite群集可以具有不屬于基準拓撲的一部分的不同節點,例如:
- 未使用的服務器節點點燃本機持久性以將數據持久存儲在磁盤上。 通常,它們將數據存儲在內存中或將數據持久保存到第三方數據庫或NoSQL。 在以上等式中,節點N3或N4可能是其中之一。
- 未存儲的客戶端節點共享數據。
為了更好地理解基線拓撲概念,讓我們從頭開始,嘗試理解其目標以及它可以幫助我們解決什么問題。
像Ignite這樣的數據庫旨在支持大量數據存儲和處理。 Ignite數據庫具有高度可伸縮性和容錯能力。 Ignite的這種高可伸縮性功能給數據庫管理員帶來了一些挑戰,例如:如何管理集群? 如何正確添加/刪除節點,或者添加/刪除節點后如何重新平衡數據? 因為具有多個節點的Ignite群集會顯著增加數據基礎結構的復雜性。 讓我們以Apache Ignite為例。
點燃內存模式集群的概念非常簡單。 群集中沒有主節點或專用節點,并且每個節點都相等。 每個節點存儲分區的子集,并且可以參與分布式計算或部署任何服務。 如果任何節點發生故障,其他節點將服務于用戶請求,并且故障節點的數據將不再可用。 Ignite群集管理操作非常相似,如下所示:
- 要運行集群,請啟動所有節點。
- 要擴展群集拓撲,請添加一些節點。
- 要減少群集拓撲,請刪除一些節點。
本文的某些部分摘自《 Apache Ignite》一書 。 如果您感興趣,請查看本書的其余部分,以獲取更多有用的信息。
數據自動在節點之間重新分配。 根據緩存的備份副本配置,數據分區從一個節點移動到另一個節點。
在持久性模式下,即使重新啟動后,節點仍保持其狀態。 在任何讀取操作期間,都會從磁盤讀取數據并恢復節點狀態。 因此,與內存模式不同,以持久性模式重新啟動節點不需要將數據從一個節點重新分發到另一個節點。 節點故障期間的數據將從磁盤恢復。 該策略不僅為防止節點故障期間移動大量數據提供了機會,而且還減少了重啟后整個集群的啟動時間。 因此,我們需要以某種方式區分這些可以在重啟后保存其狀態的節點。 換句話說,Ignite基線拓撲提供了此功能。
簡而言之,Ignite基線拓撲是已配置用于在磁盤上存儲持久性數據的節點的集合。 基線拓撲跟蹤拓撲更改的歷史記錄,并在恢復過程中防止群集中的數據差異。 讓我們繼續基線拓撲的目標:
- 如果要重新引導節點,請避免冗余數據重新平衡。
- 群集重新啟動后,一旦基線拓撲的所有節點都加入,便自動激活群集。
- 避免出現腦裂情況下的數據不一致。
Apache Ignite提供了一個命令行(CLI)工具,可用于監視和管理集群基準拓撲。 在本文中,我們將回顧使用Ignite持久性時使用此工具進行基準拓撲管理的幾種常見方案。
可以在Apache Ignite發行目錄的/ bin文件夾下找到./control.sh命令行腳本。 該腳本(工具)的主要目標是激活/停用和管理代表基線拓撲的一組節點。 但是,此工具是一種多功能工具,可以主動用于監視緩存狀態或檢測整個集群中可能發生的任何事務鎖定。
準備沙箱。 如前所述,運行該工具的腳本位于{Ignite_home} / bin文件夾中,名為control.sh。 有用于Unix(control.sh)和Windows(control.bat)的腳本版本。 出于演示目的,我將使用以下配置:
| 操作系統 | MacOS,您可以選擇使用Windows或Linux操作系統。 |
| 點燃版本 | 2.6.0或更高版本。 |
| 點火節點數 | 單個主機中的3個節點。 |
| 虛擬機 | 1.8 |
| TCP發現 | 多播 |
步驟1 。 我們將在持久模式下的單個主機上運行三個Ignite節點。 默認情況下,Ignite在IGNITR_HOME文件夾下創建一個WORK目錄,用于存儲WAL存檔和日志文件。 下載Ignite發行版并將其解壓縮到操作系統上的3個不同目錄中,例如/usr/ignite/2.6.0-s1、/usr/ignite/2.6.0-s2、/usr/ignite/2.6.0-s3 。 您應該具有類似的文件夾層次結構,如圖4所示。
請注意,這是在單個主機上運行具有持久性啟用功能的幾個節點而無需任何額外配置的最簡單方法。 但是,可以將Ignite配置為允許您運行具有不同WAL存檔文件夾的幾個Ignite節點。
第二步 。 為了啟用持久性存儲,我們通過Spring使用Ignite數據存儲配置。 創建一個名稱為ignite-book-baseline.xml的XML文件,并在其中復制以下內容。
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemalocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg"><property name="cacheConfiguration"><list><bean class="org.apache.ignite.configuration.CacheConfiguration"><property name="name" value="TestCache"><property name="atomicityMode" value="ATOMIC"><property name="backups" value="1"></property></property></property></bean></list></property><!-- Enabling Apache Ignite Persistent Store. --><property name="dataStorageConfiguration"><bean class="org.apache.ignite.configuration.DataStorageConfiguration"><property name="defaultDataRegionConfiguration"><bean class="org.apache.ignite.configuration.DataRegionConfiguration"><property name="persistenceEnabled" value="true"><property name="metricsEnabled" value="true"></property></property></bean></property></bean></property><property name="discoverySpi"><bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"><property name="ipFinder"><bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder"><property name="addresses"><list><value>127.0.0.1:47500..47509</value></list></property></bean></property></bean></property></bean> </beans>將文件保存在文件系統中的某個位置。
第三步 。 從我們的第一個Ignite節點開始,我們將一次啟動每個Ignite服務器節點。 打開終端,然后將IGNITE_HOME目錄更改為您為Ignite節點1取消存檔Ignite分發的文件夾。
export IGNITE_HOME=PATH_TO_THE_IGNITE_NODE_ONE/ignite/2.6.0-s1現在,使用以下命令啟動第一個Ignite節點:
ignite.sh /PATH_TO_THE_SPRING_CONFIG_FILE/ignite/ignite-book-baseline.xml您在控制臺上的輸出應類似于以下內容:
ver. 2.6.0#20180710-sha1:669feacc 2018 Copyright(C) Apache Software Foundation Ignite documentation: http://ignite.apache.org Quiet mode. ^-- Logging to file '/usr/ignite/2.6.0-s1/work/log/ignite-f0ef6ecc.0.log' Topology snapshot [ver=1, servers=1, clients=0, CPUs=8, offheap=3.2GB, heap=1.\ ^-- Node [id=F0EF6ECC-D692-4862-9414-709039FE00CD, clusterState=INACTIVE] Data Regions Configured: ^-- default [initSize=256.0 MiB, maxSize=3.2 GiB, persistenceEnabled=true]檢查控制臺上顯示的日志,日志消息確認我們的第一臺Ignite服務器已啟動并正在運行,并且已啟用持久性模式。 現在,對第二個Ignite節點再次執行相同的操作。
export IGNITE_HOME=PATH_TO_THE_IGNITE_NODE_ONE/ignite/2.6.0-s2 ignite.sh /PATH_TO_THE_SPRING_CONFIG_FILE/ignite/ignite-book-baseline.xml此時,您可以看到2nd Ignite節點以持久性模式啟動并加入了集群。 您應該在終端中看到非常相似的消息,如下所示。
[16:13:35] >>> Ignite cluster is not active (limited functionality available). Use contro\ l.(sh|bat) script or IgniteCluster interface to activate. [16:13:35] Topology snapshot [ver=2, servers=2, clients=0, CPUs=8, offheap=6.4GB, heap=2.\ 0GB] [16:13:35] ^-- Node [id=6DB02F31-115C-41E4-BECC-FDB6980F8143, clusterState=INACTIVE] [16:13:35] Data Regions Configured: [16:13:35] ^-- default [initSize=256.0 MiB, maxSize=3.2 GiB, persistenceEnabled=true]Ignite還警告說該集群尚未激活,您必須使用control.sh腳本激活該集群。 讓我們激活集群并創建一些表來存儲數據。
第四步 。 在激活集群之前,讓我們考慮一下control.sh工具的特定功能。 control.sh腳本當前支持以下命令:
| -啟用 | 該命令將集群切換為活動狀態。 在這種情況下,如果集群中不存在基準拓撲,則將在集群激活期間創建新的基準。 新的基準拓撲將包括集群拓撲中的所有已連接節點。 |
| –停用 | 停用集群。 在這種狀態下,功能有限。 |
| -州 | 打印當前集群狀態。 |
| –基準 | 此命令旨在管理基準拓撲。 當不帶任何參數使用此命令時,它將打印當前集群基準拓撲信息。 以下參數可與此命令一起使用:添加,刪除,設置和版本。 |
要調用特定命令,請使用以下模式:
UNIX/LINUX/MacOS $IGNITE_HOME/bin/control.sh現在,激活集群。 運行以下命令:
$IGNITE_HOME/bin/control.sh如果命令成功,您應該在控制臺中看到以下消息。
Control utility [ver. 2.6.0#20180710-sha1:669feacc] 2018 Copyright(C) Apache Software Foundation User: shamim -------------------------------------------------------------------------------- Cluster activated此時,您還可以使用–state命令檢查當前集群狀態。 –state命令應返回一條消息,說明集群已激活。
步驟5 。 現在,創建一個表并填充一些數據。 我們使用SQLLINE工具連接到集群。 運行以下命令以啟動SQLLINE工具:
sqlline.sh --color=true --verbose=true -u jdbc:ignite:thin://127.0.0.1/創建一個名為EMP的表,然后向該表中插入1000行。 使用以下DDL腳本創建EMP表,如下所示:
CREATE TABLE IF NOT EXISTS EMP (empno LONG, ename VARCHAR, job VARCHAR, mgr INTEGER, hiredate DATE, sal LONG, comm LONG, deptno LONG, CONSTRAINT pk_emp PRIMARY KEY (empno) ) WITH "template=partitioned,CACHE_NAME=EMPcache";接下來,使用GitHub存儲庫中的EMP_001.sql腳本在表中插入1000個條目。
0: jdbc:ignite:thin://127.0.0.1/> !run /PATH_TO_THE_FILE/the-apache-ignite-book/chapters/\ chapter-10/baseline/EMP_001.sql上面的命令將1000個條目插入EMP表或EMPcache。 使用visor CLI工具查看整個集群中緩存的大小。 在IgniteVisor控制臺中運行命令cache -a。 該命令應返回以下輸出,如圖5所示。
查看名為SIZE的列。 該列闡明了每個節點中存儲的條目數。 在我們的例子中,我們的一個節點包含504個條目,另一個節點包含496個條目到EMPcache緩存中。
步驟6 。 到目前為止,我們僅啟動了2個Ignite節點,并在集群中創建了基線拓撲。 讓我們啟動另一個Ignite節點。 對第3個Ignite節點再次執行相同的操作。
export IGNITE_HOME=PATH_TO_THE_IGNITE_NODE_ONE/ignite/2.6.0-s3 ignite.sh /PATH_TO_THE_SPRING_CONFIG_FILE/ignite/ignite-book-baseline.xml控制臺上的日志應確認您已成功在持久性模式下啟動節點。 此外,您應該在控制臺上收到一條警告,即本地節點不包括在基準拓撲中,并且不會用于持久數據存儲。 現在我們可以使用–baseline命令了。 讓我們運行不帶任何參數的命令,如下所示:
$IGNITE_HOME/bin/control.sh --baseline輸出可能如下:
shamim:~ shamim$ control.sh --baseline Control utility [ver. 2.6.0#20180710-sha1:669feacc] 2018 Copyright(C) Apache Software Foundation User: shamim -------------------------------------------------------------------------------- Cluster state: active Current topology version: 6 Baseline nodes: ConsistentID=1640f655-4065-438c-92ca-478b5df91def, STATE=ONLINE ConsistentID=d8b04bc3-d175-443c-b53f-62512ff9152f, STATE=ONLINE -------------------------------------------------------------------------------- Number of baseline nodes: 2 Other nodes: ConsistentID=3c2ad09d-c835-4f4b-b47a-43912d04d30e Number of other nodes: 1上面的基線信息顯示了群集狀態,拓撲版本,具有一致ID的節點(屬于基線拓撲的節點)以及不屬于基線拓撲的節點。 在這里,基線節點數為2,基線由我們的第1個和第2個Ignite節點組成。
有時可能會發生在第一次集群激活期間未創建基線拓撲的情況。 在這種情況下,–baseline命令將返回“找不到基線節點”之類的消息。 在這種情況下,請停止第3個節點,并等待幾秒鐘。 然后,使用數字集群拓撲版本手動設置基線拓撲,如下所示:
control.sh --baseline version topologyVersion在上面的命令中,用實際的拓撲版本替換topologyVersion。 您可以在任何Ignite節點控制臺中找到拓撲版本,如下所示:
Topology snapshot [ver=6, servers=3, clients=0, CPUs=8, offheap=9.6GB, heap=3.0GB]從控制臺中選擇最新的拓撲快照版本。
在此階段,我們的第3個Ignite節點不是基線拓撲的一部分。 該節點將不用于持久數據存儲。 這意味著,如果我們將創建任何新表并將數據插入其中,則該節點將不會為該新表存儲任何數據。 讓我們驗證一下這個概念。
步驟7 。 使用以下DDL腳本創建一個新的表DEPT:
CREATE TABLE IF NOT EXISTS DEPT ( deptno LONG, dname VARCHAR, loc VARCHAR, CONSTRAINT pk_dept PRIMARY KEY (deptno) ) WITH "template=partitioned,CACHE_NAME=DEPTcache";另外,使用DEPT.SQL插入100個部門。 DEPT.SQL腳本可從GitHub存儲庫中獲得 。
0: jdbc:ignite:thin://127.0.0.1/> !run /PATH_TO_THE_FILE/github/the-apache-ignite-book/ch\ apters/chapter-10/baseline/DEPT.sql現在,在遮陽板控制臺中運行命令cache -a,應打印類似圖6所示的輸出。
上圖確認了第3個節點不包含任何持久性數據。 但是,不是基線拓撲一部分的節點可以參與任何內存計算。
步驟8 。 接下來,讓我們將新的空節點添加到基準拓撲中以保存持久性數據。 調用命令–baseline add
將新節點添加到現有基準中。
control.sh --baseline add 3c2ad09d-c835-4f4b-b47a-43912d04d30e在以上命令中,將一致的ID 3c2ad09d-c835-4f4b-b47a-43912d04d30e替換為您的第3個Ignite節點的一致ID。 完成–baseline add命令后,將顯示一條消息,確認新的基線拓撲包含3個節點。
Cluster state: active Current topology version: 10 Baseline nodes: ConsistentID=1640f655-4065-438c-92ca-478b5df91def, STATE=ONLINE ConsistentID=3c2ad09d-c835-4f4b-b47a-43912d04d30e, STATE=ONLINE ConsistentID=d8b04bc3-d175-443c-b53f-62512ff9152f, STATE=ONLINE -------------------------------------------------------------------------------- Number of baseline nodes: 3 Other nodes not found.從3個節點形成新的基準拓撲后,將立即進行數據重新平衡。 新的空節點(在我們的示例中是第3個節點)將從其他節點接收其部分數據。 如果再次在Ignite Visor CLI中運行cache -a命令,則可以確認數據重新平衡。 圖7顯示了在基線拓撲中添加第三個節點后數據重新平衡的結果。
現在,每個節點幾乎將條目的平均分配(約300個條目)存儲在緩存EMPcache中。 但是,如果重新啟動基線拓撲節點之一,將會發生什么? 讓我們停止一個節點,然后嘗試向表EMP中插入一些數據。
步驟9 。 按下CRTL + X鍵停止第二個節點。 執行不帶任何參數的命令–baseline以打印基線拓撲的狀態。
control.sh --baseline上面的命令將顯示當前基線拓撲狀態,與下一條消息非常相似:
-------------------------------------------------------------------------------- Cluster state: active Current topology version: 11 Baseline nodes: ConsistentID=1640f655-4065-438c-92ca-478b5df91def, STATE=OFFLINE ConsistentID=3c2ad09d-c835-4f4b-b47a-43912d04d30e, STATE=ONLINE ConsistentID=d8b04bc3-d175-443c-b53f-62512ff9152f, STATE=ONLINE -------------------------------------------------------------------------------- Number of baseline nodes: 3 Other nodes not found預期脫機的節點之一。 現在,嘗試通過SQLLINE工具將一些數據插入EMP表,如下所示:
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (2009, 'Sall\ ie', 'Sales Associate', 96, null, 3619, 34, 78); insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (2010, 'Cori\ ', 'Human Resources Manager', 65, null, 1291, 86, 57); insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (2011, 'Myrt\ le', 'VP Quality Control', 88, null, 5103, 21, 48); insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (2012, 'Ches\ ', 'Desktop Support Technician', 46, null, 6352, 29, 21);您應該注意到,一些inserts語句失敗,并帶有錯誤,這些錯誤在下一個代碼段中顯示。
Caused by: class org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundExceptio\ n: Failed to map keys for cache (all partition nodes left the grid). at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSing\ leUpdateFuture.mapSingleUpdate(GridNearAtomicSingleUpdateFuture.java:562)發生此錯誤是因為我們沒有EMP表的備份副本。 應該存儲數據的節點已停止,并且Ignite無法存儲數據。 為避免這種情況,請考慮使用一個備份的緩存/表。 如果一個節點發生故障,它將不會丟失任何數據。 目前,我們有幾種選擇:
- 盡快重啟離線節點,以最小的停機時間來防止數據丟失。
- 從基準拓撲中刪除脫機節點并重新平衡數據。
第十步 。 讓我們從基準拓撲中刪除脫機節點。 執行以下命令:
Caused by: class control.sh --baseline remove 1640f655-4065-438c-92ca-478b5df91def完成remove命令后,基線拓撲發生了變化,但停止的節點除外。 請注意,通過從基準拓撲中刪除節點,您確認您將無法在重新啟動該節點后使用該節點上存儲的數據。 此時,在對集群進行數據操作期間不會發生任何錯誤。 您可以成功插入新條目或將現有條目更新到緩存中。
請注意,要從基準拓撲中刪除的節點應從群集斷開,然后再從基準中刪除。 否則,將出現錯誤“無法從基準刪除節點”,該錯誤指定在從基準刪除之前必須停止的節點。
除了拓撲管理之外,control.sh腳本還可以用于監視和控制群集狀態,該狀態在Ignite站點中有詳細記錄。 因此,請參考Ignite文檔的控制腳本部分以獲取更多信息。
翻譯自: https://www.javacodegeeks.com/2018/12/apache-ignite-baseline-topology-examples.html
apache ignite
總結
以上是生活随笔為你收集整理的apache ignite_通过示例获取Apache Ignite Baseline拓扑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工信部:1-8 月我国软件业务收入 75
- 下一篇: 木天蓼怎么读 木天蓼读音和解释