通过示例了解Apache Ignite Baseline拓扑
點(diǎn)燃基準(zhǔn)拓?fù)浠駼LT表示群集中的一組服務(wù)器節(jié)點(diǎn),這些服務(wù)器節(jié)點(diǎn)將數(shù)據(jù)持久存儲(chǔ)在磁盤上。
其中,N1-2和N5服務(wù)器節(jié)點(diǎn)是具有本機(jī)持久性的Ignite集群的成員,這些集群使數(shù)據(jù)能夠持久存儲(chǔ)在磁盤上。 N3-4和N6服務(wù)器節(jié)點(diǎn)是Ignite群集的成員,但不是基準(zhǔn)拓?fù)涞囊徊糠帧?
基線拓?fù)渲械墓?jié)點(diǎn)是常規(guī)服務(wù)器節(jié)點(diǎn),該節(jié)點(diǎn)將數(shù)據(jù)存儲(chǔ)在內(nèi)存和磁盤中,并且還參與計(jì)算任務(wù)。 Ignite群集可以具有不屬于基準(zhǔn)拓?fù)涞囊徊糠值牟煌?jié)點(diǎn),例如:
- 未使用的服務(wù)器節(jié)點(diǎn)點(diǎn)燃本地持久性以將數(shù)據(jù)持久存儲(chǔ)在磁盤上。 通常,它們將數(shù)據(jù)存儲(chǔ)在內(nèi)存中或?qū)?shù)據(jù)持久保存到第三方數(shù)據(jù)庫(kù)或NoSQL。 在以上等式中,節(jié)點(diǎn)N3或N4可能是其中之一。
- 未存儲(chǔ)的客戶端節(jié)點(diǎn)共享數(shù)據(jù)。
為了更好地理解基線拓?fù)涓拍?#xff0c;讓我們從頭開(kāi)始,嘗試?yán)斫馄淠繕?biāo)以及它可以幫助我們解決什么問(wèn)題。
像Ignite這樣的數(shù)據(jù)庫(kù)旨在支持大量數(shù)據(jù)存儲(chǔ)和處理。 Ignite數(shù)據(jù)庫(kù)具有高度可伸縮性和容錯(cuò)能力。 Ignite的這種高可伸縮性功能給數(shù)據(jù)庫(kù)管理員帶來(lái)了一些挑戰(zhàn),例如:如何管理集群? 如何正確添加/刪除節(jié)點(diǎn),或者添加/刪除節(jié)點(diǎn)后如何重新平衡數(shù)據(jù)? 因?yàn)榫哂卸鄠€(gè)節(jié)點(diǎn)的Ignite群集會(huì)顯著增加數(shù)據(jù)基礎(chǔ)結(jié)構(gòu)的復(fù)雜性。 讓我們以Apache Ignite為例。
點(diǎn)燃內(nèi)存模式集群的概念非常簡(jiǎn)單。 群集中沒(méi)有主節(jié)點(diǎn)或?qū)S霉?jié)點(diǎn),并且每個(gè)節(jié)點(diǎn)都相等。 每個(gè)節(jié)點(diǎn)存儲(chǔ)分區(qū)的子集,并且可以參與分布式計(jì)算或部署任何服務(wù)。 發(fā)生任何節(jié)點(diǎn)故障時(shí),其他節(jié)點(diǎn)將服務(wù)于用戶請(qǐng)求,并且故障節(jié)點(diǎn)的數(shù)據(jù)將不再可用。 Ignite群集管理操作非常相似,如下所示:
- 要運(yùn)行集群,請(qǐng)啟動(dòng)所有節(jié)點(diǎn)。
- 要擴(kuò)展群集拓?fù)?#xff0c;請(qǐng)?zhí)砑右恍┕?jié)點(diǎn)。
- 要減少群集拓?fù)?#xff0c;請(qǐng)刪除一些節(jié)點(diǎn)。
本文的某些部分摘自《 Apache Ignite》一書 。 如果您感興趣,請(qǐng)查看本書的其余部分,以獲取更多有用的信息。
數(shù)據(jù)自動(dòng)在節(jié)點(diǎn)之間重新分配。 根據(jù)緩存的備份副本配置,數(shù)據(jù)分區(qū)從一個(gè)節(jié)點(diǎn)移動(dòng)到另一個(gè)節(jié)點(diǎn)。
在持久性模式下,即使重新啟動(dòng)后,節(jié)點(diǎn)仍保持其狀態(tài)。 在任何讀取操作期間,將從磁盤讀取數(shù)據(jù)并恢復(fù)節(jié)點(diǎn)狀態(tài)。 因此,與內(nèi)存模式不同,以持久性模式重新啟動(dòng)節(jié)點(diǎn)不需要將數(shù)據(jù)從一個(gè)節(jié)點(diǎn)重新分發(fā)到另一個(gè)節(jié)點(diǎn)。 節(jié)點(diǎn)故障期間的數(shù)據(jù)將從磁盤恢復(fù)。 該策略不僅為防止節(jié)點(diǎn)故障期間移動(dòng)大量數(shù)據(jù)提供了機(jī)會(huì),而且還減少了重啟后整個(gè)集群的啟動(dòng)時(shí)間。 因此,我們需要以某種方式區(qū)分這些可以在重啟后保存其狀態(tài)的節(jié)點(diǎn)。 換句話說(shuō),Ignite基線拓?fù)涮峁┝舜斯δ堋?
簡(jiǎn)而言之,Ignite基線拓?fù)涫且雅渲糜糜谠诖疟P上存儲(chǔ)持久性數(shù)據(jù)的節(jié)點(diǎn)的集合。 基準(zhǔn)拓?fù)涓櫷負(fù)涓牡臍v史記錄,并在恢復(fù)過(guò)程中防止群集中的數(shù)據(jù)差異。 讓我們繼續(xù)基線拓?fù)涞哪繕?biāo):
- 如果要重新引導(dǎo)節(jié)點(diǎn),請(qǐng)避免冗余數(shù)據(jù)的重新平衡。
- 群集重新啟動(dòng)后,一旦基線拓?fù)涞乃泄?jié)點(diǎn)都加入后,將自動(dòng)激活群集。
- 避免出現(xiàn)腦裂情況下的數(shù)據(jù)不一致。
Apache Ignite提供了一個(gè)命令行(CLI)工具,可用于監(jiān)視和管理集群基準(zhǔn)拓?fù)洹?在本文中,我們將回顧使用Ignite持久性時(shí)使用此工具進(jìn)行基準(zhǔn)拓?fù)涔芾淼膸追N常見(jiàn)方案。
可以在Apache Ignite分發(fā)目錄的/ bin文件夾下找到./control.sh命令行腳本。 該腳本(工具)的主要目標(biāo)是激活/停用和管理代表基線拓?fù)涞囊唤M節(jié)點(diǎn)。 但是,此工具是一種多功能工具,可以有效地用于監(jiān)視緩存狀態(tài)或檢測(cè)整個(gè)集群中可能發(fā)生的任何事務(wù)鎖定。
準(zhǔn)備沙箱。 如前所述,運(yùn)行該工具的腳本位于{Ignite_home} / bin文件夾中,名為control.sh。 有用于Unix(control.sh)和Windows(control.bat)的腳本版本。 出于演示目的,我將使用以下配置:
| 操作系統(tǒng) | MacOS,您可以選擇使用Windows或Linux操作系統(tǒng)。 |
| 點(diǎn)燃版本 | 2.6.0或以上。 |
| Ignite節(jié)點(diǎn)數(shù) | 單個(gè)主機(jī)中的3個(gè)節(jié)點(diǎn)。 |
| 虛擬機(jī) | 1.8 |
| TCP發(fā)現(xiàn) | 多播 |
步驟1 。 我們將在持久模式下的單個(gè)主機(jī)上運(yùn)行三個(gè)Ignite節(jié)點(diǎn)。 默認(rèn)情況下,Ignite在IGNITR_HOME文件夾下創(chuàng)建一個(gè)WORK目錄,用于存儲(chǔ)WAL存檔和日志文件。 下載Ignite發(fā)行版并將其解壓縮到操作系統(tǒng)上的3個(gè)不同目錄中,例如/usr/ignite/2.6.0-s1、/usr/ignite/2.6.0-s2、/usr/ignite/2.6.0-s3 。 您應(yīng)該具有類似的文件夾層次結(jié)構(gòu),如圖4所示。
請(qǐng)注意,這是在單個(gè)主機(jī)上運(yùn)行具有持久性啟用功能的幾個(gè)節(jié)點(diǎn)而無(wú)需任何額外配置的最簡(jiǎn)單方法。 但是,可以將Ignite配置為允許您運(yùn)行具有不同WAL存檔文件夾的幾個(gè)Ignite節(jié)點(diǎn)。
第二步 。 為了啟用持久性存儲(chǔ),我們通過(guò)Spring使用Ignite數(shù)據(jù)存儲(chǔ)配置。 創(chuàng)建一個(gè)名稱為ignite-book-baseline.xml的XML文件,并在其中復(fù)制以下內(nèi)容。
<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>將文件保存在文件系統(tǒng)中的某個(gè)位置。
第三步 。 從我們的第一個(gè)Ignite節(jié)點(diǎn)開(kāi)始,我們將一次啟動(dòng)一個(gè)Ignite服務(wù)器節(jié)點(diǎn)。 打開(kāi)終端,然后將IGNITE_HOME目錄更改為您為Ignite節(jié)點(diǎn)1取消存檔Ignite分發(fā)的文件夾。
export IGNITE_HOME=PATH_TO_THE_IGNITE_NODE_ONE/ignite/2.6.0-s1現(xiàn)在,使用以下命令啟動(dòng)第一個(gè)Ignite節(jié)點(diǎn):
ignite.sh /PATH_TO_THE_SPRING_CONFIG_FILE/ignite/ignite-book-baseline.xml您在控制臺(tái)上的輸出應(yīng)類似于以下內(nèi)容:
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]檢查控制臺(tái)上顯示的日志,日志消息確認(rèn)我們的第一臺(tái)Ignite服務(wù)器已啟動(dòng)并正在運(yùn)行,并且已啟用持久性模式。 現(xiàn)在,對(duì)第二個(gè)Ignite節(jié)點(diǎn)再次執(zhí)行相同的操作。
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此時(shí),您可以看到2nd Ignite節(jié)點(diǎn)以持久性模式啟動(dòng)并加入了集群。 您應(yīng)該在終端中看到非常相似的消息,如下所示。
[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還警告說(shuō)該集群尚未激活,您必須使用control.sh腳本激活該集群。 讓我們激活集群并創(chuàng)建一些表來(lái)存儲(chǔ)數(shù)據(jù)。
第四步 。 在激活集群之前,讓我們考慮一下control.sh工具的特定功能。 control.sh腳本當(dāng)前支持以下命令:
| -啟用 | 該命令將集群切換為活動(dòng)狀態(tài)。 在這種情況下,如果群集中不存在基準(zhǔn)拓?fù)?#xff0c;則將在群集激活期間創(chuàng)建新的基準(zhǔn)。 新的基準(zhǔn)拓?fù)鋵和負(fù)渲械乃幸堰B接節(jié)點(diǎn)。 |
| –停用 | 停用集群。 在這種狀態(tài)下,功能有限。 |
| -州 | 打印當(dāng)前集群狀態(tài)。 |
| –基準(zhǔn) | 此命令旨在管理基準(zhǔn)拓?fù)洹?當(dāng)不帶任何參數(shù)使用此命令時(shí),它將打印當(dāng)前集群基準(zhǔn)拓?fù)湫畔ⅰ?以下參數(shù)可與此命令一起使用:添加,刪除,設(shè)置和版本。 |
要調(diào)用特定命令,請(qǐng)使用以下模式:
UNIX/LINUX/MacOS $IGNITE_HOME/bin/control.sh現(xiàn)在,激活集群。 運(yùn)行以下命令:
$IGNITE_HOME/bin/control.sh如果命令成功,您應(yīng)該在控制臺(tái)中看到以下消息。
Control utility [ver. 2.6.0#20180710-sha1:669feacc] 2018 Copyright(C) Apache Software Foundation User: shamim -------------------------------------------------------------------------------- Cluster activated此時(shí),您還可以使用–state命令檢查當(dāng)前集群狀態(tài)。 –state命令應(yīng)返回一條消息,說(shuō)明集群已激活。
步驟5 。 現(xiàn)在,創(chuàng)建一個(gè)表并填充一些數(shù)據(jù)。 我們使用SQLLINE工具連接到集群。 運(yùn)行以下命令以啟動(dòng)SQLLINE工具:
sqlline.sh --color=true --verbose=true -u jdbc:ignite:thin://127.0.0.1/創(chuàng)建一個(gè)名為EMP的表,然后向該表中插入1000行。 使用以下DDL腳本創(chuàng)建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";接下來(lái),使用GitHub存儲(chǔ)庫(kù)中的EMP_001.sql腳本在表中插入1000個(gè)條目。
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個(gè)條目插入EMP表或EMPcache。 使用visor CLI工具查看整個(gè)集群中緩存的大小。 在IgniteVisor控制臺(tái)中運(yùn)行命令cache -a。 該命令應(yīng)返回以下輸出,如圖5所示。
查看名為SIZE的列。 該列闡明了每個(gè)節(jié)點(diǎn)中存儲(chǔ)的條目數(shù)。 在我們的例子中,我們的一個(gè)節(jié)點(diǎn)包含504個(gè)條目,另一個(gè)節(jié)點(diǎn)包含496個(gè)條目到EMPcache緩存中。
步驟6 。 到目前為止,我們僅啟動(dòng)了2個(gè)Ignite節(jié)點(diǎn),并在集群中創(chuàng)建了基線拓?fù)洹?讓我們啟動(dòng)另一個(gè)Ignite節(jié)點(diǎn)。 對(duì)第3個(gè)Ignite節(jié)點(diǎn)再次執(zhí)行相同的操作。
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控制臺(tái)上的日志應(yīng)確認(rèn)您已成功在持久性模式下啟動(dòng)節(jié)點(diǎn)。 此外,您應(yīng)該在控制臺(tái)上收到一條警告,即本地節(jié)點(diǎn)不包括在基準(zhǔn)拓?fù)渲?#xff0c;并且不會(huì)用于持久數(shù)據(jù)存儲(chǔ)。 現(xiàn)在我們可以使用–baseline命令了。 讓我們運(yùn)行不帶任何參數(shù)的命令,如下所示:
$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上面的基線信息顯示了群集狀態(tài),拓?fù)浒姹?#xff0c;具有一致ID的節(jié)點(diǎn)(屬于基線拓?fù)涞墓?jié)點(diǎn))以及不屬于基線拓?fù)涞墓?jié)點(diǎn)。 在這里,基線節(jié)點(diǎn)數(shù)為2,基線由我們的第1個(gè)和第2個(gè)Ignite節(jié)點(diǎn)組成。
有時(shí)可能會(huì)發(fā)生在第一次集群激活期間未創(chuàng)建基準(zhǔn)拓?fù)涞那闆r。 在這種情況下,–baseline命令將返回“找不到基線節(jié)點(diǎn)”之類的消息。 在這種情況下,請(qǐng)停止第3個(gè)節(jié)點(diǎn),并等待幾秒鐘。 然后使用數(shù)字集群拓?fù)浒姹臼謩?dòng)設(shè)置基線拓?fù)?#xff0c;如下所示:
control.sh --baseline version topologyVersion在上面的命令中,用實(shí)際的拓?fù)浒姹咎鎿QtopologyVersion。 您可以在任何Ignite節(jié)點(diǎn)控制臺(tái)中找到拓?fù)浒姹?#xff0c;如下所示:
Topology snapshot [ver=6, servers=3, clients=0, CPUs=8, offheap=9.6GB, heap=3.0GB]從控制臺(tái)中選擇最新的拓?fù)淇煺瞻姹尽?
在此階段,第3個(gè)Ignite節(jié)點(diǎn)不是基線拓?fù)涞囊徊糠帧?該節(jié)點(diǎn)將不用于持久數(shù)據(jù)存儲(chǔ)。 這意味著,如果我們將創(chuàng)建任何新表并將數(shù)據(jù)插入其中,則該節(jié)點(diǎn)將不會(huì)為該新表存儲(chǔ)任何數(shù)據(jù)。 讓我們驗(yàn)證一下這個(gè)概念。
步驟7 。 使用以下DDL腳本創(chuàng)建一個(gè)新表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個(gè)部門。 DEPT.SQL腳本可從GitHub存儲(chǔ)庫(kù)中獲得 。
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現(xiàn)在,在遮陽(yáng)板控制臺(tái)中運(yùn)行命令cache -a,應(yīng)打印類似圖6所示的輸出。
上圖確認(rèn)了第三個(gè)節(jié)點(diǎn)不包含任何持久性數(shù)據(jù)。 但是,不是基線拓?fù)湟徊糠值墓?jié)點(diǎn)可以參與任何內(nèi)存計(jì)算。
步驟8 。 接下來(lái),讓我們將新的空節(jié)點(diǎn)添加到基準(zhǔn)拓?fù)渲幸员4娉志眯詳?shù)據(jù)。 調(diào)用命令–baseline add
將新節(jié)點(diǎn)添加到現(xiàn)有基準(zhǔn)中。
control.sh --baseline add 3c2ad09d-c835-4f4b-b47a-43912d04d30e在以上命令中,將一致的ID 3c2ad09d-c835-4f4b-b47a-43912d04d30e替換為您的第三個(gè)Ignite節(jié)點(diǎn)的一致ID。 完成–baseline add命令后,將顯示一條消息,確認(rèn)新的基線拓?fù)浒?個(gè)節(jié)點(diǎn)。
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個(gè)節(jié)點(diǎn)形成新的基準(zhǔn)拓?fù)浜?#xff0c;將立即進(jìn)行數(shù)據(jù)重新平衡。 新的空節(jié)點(diǎn)(在我們的示例中是第3個(gè)節(jié)點(diǎn))將從其他節(jié)點(diǎn)接收其部分?jǐn)?shù)據(jù)。 如果再次在Ignite Visor CLI中運(yùn)行cache -a命令,則可以確認(rèn)數(shù)據(jù)重新平衡。 圖7顯示了在基線拓?fù)渲刑砑拥谌齻€(gè)節(jié)點(diǎn)后數(shù)據(jù)重新平衡的結(jié)果。
現(xiàn)在,每個(gè)節(jié)點(diǎn)幾乎將條目的平均分配(約300個(gè)條目)分配給緩存EMPcache。 但是,如果基線拓?fù)涔?jié)點(diǎn)之一將重新啟動(dòng),將會(huì)發(fā)生什么? 讓我們停止一個(gè)節(jié)點(diǎn),然后嘗試向表EMP中插入一些數(shù)據(jù)。
步驟9 。 按下CRTL + X鍵停止第二個(gè)節(jié)點(diǎn)。 執(zhí)行不帶任何參數(shù)的–baseline命令以打印基線拓?fù)涞臓顟B(tài)。
control.sh --baseline上面的命令將顯示當(dāng)前基線拓?fù)錉顟B(tài),與下一條消息非常相似:
-------------------------------------------------------------------------------- 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預(yù)期脫機(jī)的節(jié)點(diǎn)之一。 現(xiàn)在,嘗試通過(guò)SQLLINE工具將一些數(shù)據(jù)插入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);您應(yīng)該注意到,一些inserts語(yǔ)句失敗,并帶有錯(cuò)誤,該錯(cuò)誤在下一個(gè)代碼段中顯示。
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)發(fā)生此錯(cuò)誤是因?yàn)槲覀儧](méi)有EMP表的備份副本。 應(yīng)該存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn)已停止,并且Ignite無(wú)法存儲(chǔ)數(shù)據(jù)。 為避免這種情況,請(qǐng)考慮使用一個(gè)備份的緩存/表。 如果一個(gè)節(jié)點(diǎn)發(fā)生故障,它將不會(huì)丟失任何數(shù)據(jù)。 目前,我們有幾種選擇:
- 盡快重新啟動(dòng)脫機(jī)節(jié)點(diǎn),以最小的停機(jī)時(shí)間來(lái)防止數(shù)據(jù)丟失。
- 從基準(zhǔn)拓?fù)渲袆h除脫機(jī)節(jié)點(diǎn)并重新平衡數(shù)據(jù)。
第十步 。 讓我們從基準(zhǔn)拓?fù)渲袆h除脫機(jī)節(jié)點(diǎn)。 執(zhí)行以下命令:
Caused by: class control.sh --baseline remove 1640f655-4065-438c-92ca-478b5df91def完成remove命令后,基線拓?fù)浒l(fā)生了變化,但停止的節(jié)點(diǎn)除外。 請(qǐng)注意,通過(guò)從基準(zhǔn)拓?fù)渲袆h除節(jié)點(diǎn),您確認(rèn)您將無(wú)法在重新啟動(dòng)該節(jié)點(diǎn)后使用該節(jié)點(diǎn)上存儲(chǔ)的數(shù)據(jù)。 此時(shí),在對(duì)集群進(jìn)行數(shù)據(jù)操作期間不會(huì)發(fā)生任何錯(cuò)誤。 您可以插入新條目或?qū)F(xiàn)有條目成功更新到緩存中。
請(qǐng)注意,要從基準(zhǔn)拓?fù)渲袆h除的節(jié)點(diǎn)應(yīng)從群集斷開(kāi),然后再?gòu)幕鶞?zhǔn)中刪除。 否則,將出現(xiàn)錯(cuò)誤“無(wú)法從基準(zhǔn)中刪除節(jié)點(diǎn)”,指定在從基準(zhǔn)中刪除之前必須停止的節(jié)點(diǎn)。
除拓?fù)涔芾硗?#xff0c;control.sh腳本還可用于監(jiān)視和控制群集狀態(tài),該狀態(tài)在Ignite站點(diǎn)中有詳細(xì)記錄。 因此,請(qǐng)參考Ignite文檔的控制腳本部分以獲取更多信息。
翻譯自: https://www.javacodegeeks.com/2018/12/apache-ignite-baseline-topology-examples.html
總結(jié)
以上是生活随笔為你收集整理的通过示例了解Apache Ignite Baseline拓扑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓rar解压工具(安卓 rar)
- 下一篇: linux中的进程(linux下的进程)