Ignite實戰( 二 )

2.4.1 配置1.快照目錄默認情況下 , 快照的一部分存儲在各個 Ignite 節點的工作目錄中,并使用 Ignite Persistence 保存數據、索引、WAL 和其他文件的相同存儲介質 。由于快照可以消耗與持久性文件已經占用的空間一樣多的空間 , 并且可以通過與 Ignite Persistence 例程共享磁盤 I/O 來影響應用程序的性能 , 因此建議將快照和持久性文件存儲在不同的媒體上 。
2.快照執行池默認情況下 , 快照線程池大小的值為4 。減少快照創建過程中涉及的線程數會增加拍攝快照的總時間 。但是 , 這會將磁盤負載保持在合理的范圍內 。
2.4.2 創建快照Ignite 提供了幾個用于創建快照的 API 。
1.使用控制腳本Ignite 提供了支持以下列出的與快照相關的命令的控制腳本:
# Create a cluster snapshot named "snapshot_09062021" in the background:control.(sh|bat) --snapshot create snapshot_09062021# Create a cluster snapshot named "snapshot_09062021" and wait for the entire operation to complete:control.(sh|bat) --snapshot create snapshot_09062021 --sync# Create a cluster snapshot named "snapshot_09062021" in the "/tmp/ignite/snapshots" folder (the full path to the snapshot files will be /tmp/ignite/snapshots/snapshot_09062021):control.(sh|bat) --snapshot create snapshot_09062021 -dest /tmp/ignite/snapshots# Cancel a running snapshot named "snapshot_09062021":control.(sh|bat) --snapshot cancel snapshot_09062021# Kill a running snapshot named "snapshot_09062021":control.(sh|bat) --kill SNAPSHOT snapshot_090620212.使用JMX使用該SnapshotMXBean接口通過 JMX 執行特定于快照的過程:
方法描述createSnapshot(String snpName)創建快照cancelSnapshot(String snpName)
取消節點上的快照已啟動其創建3.使用Java API此外,還可以在 Java 中以編程方式創建快照:
CacheConfiguration<Integer, String> ccfg = new CacheConfiguration<>("snapshot-cache");try (IgniteCache<Integer, String> cache = ignite.getOrCreateCache(ccfg)) {cache.put(1, "Maxim");// Start snapshot operation.ignite.snapshot().createSnapshot("snapshot_02092020").get();}finally {ignite.destroyCache(ccfg.getName());}2.4.3 檢查快照一致性通常所有集群節點都運行在不同的機器上 , 并且快照數據分布在整個集群中 。每個節點都存儲自己的快照段 , 因此在某些情況下,可能需要在從快照恢復之前檢查快照的數據完整性和整個集群的數據一致性 。
對于這種情況 , Apache Ignite 提供了內置的快照一致性檢查命令 , 使您能夠驗證內部數據一致性 , 計算數據分區哈希和頁面校驗和,并在發現問題時打印結果 。check 命令還將主分區的哈希值與相應的備份分區進行比較,并報告任何差異 。
2.4.4 從快照恢復快照可以在停止的集群上手動恢復,也可以在活動的集群上自動恢復 。下面描述了這兩個過程,但是,最好只使用控制腳本中的恢復命令 。
1.手動快照恢復過程快照結構類似于 Ignite Native Persistence 的布局,因此對于手動快照還原,您必須僅在具有相同節點的相同集群consistentId和拍攝快照的相同拓撲上執行快照還原 。如果您需要在不同的集群或不同的集群拓撲上恢復快照 , 請使用 自動快照恢復過程 。
一般來說 , 停止集群,然后用快照中的數據替換持久化數據和其他文件,然后重新啟動節點 。
詳細過程如下所示:

  • 停止要恢復的集群
  • 從檢查點$IGNITE_HOME/work/cp目錄中刪除所有文件
  • 在每個節點上執行以下操作:
    • {nodeId}從目錄中刪除與 相關的文件$IGNITE_HOME/work/db/binary_meta 。
    • {nodeId}從目錄中刪除與 相關的文件$IGNITE_HOME/work/db/marshaller 。
    • {nodeId}刪除與您的目錄下相關的文件和子目錄$IGNITE_HOME/work/db 。db/{node_id}如果目錄不在 Ignite 目錄下,請單獨清理該目錄work 。
    • 將屬于具有{node_id}快照的節點的文件復制到$IGNITE_HOME/work/目錄中 。如果該db/{node_id}目錄不在 Ignitework目錄下,那么您需要將數據文件復制到那里 。
  • 重啟集群
2.自動快照恢復過程自動恢復過程允許用戶使用 Java API 或命令行腳本從活動集群上的快照恢復緩存組 。
目前,此過程有幾個限制,將在未來的版本中解決: