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 或命令行脚本从活动集群上的快照恢复缓存组 。
目前,此过程有几个限制,将在未来的版本中解决: