在 Apache Ignite 中将数据从一个节点移动到同一集群中的另一个节点

Moving data from one node to other node in same cluster in Apache Ignite

在 8 个节点的基线集群中,分区模板中的数据没有备份。假设我在 SampleTable(@Cache) 的所有 8 个节点中平均有 28K 个条目。总数据 = 28K*8 = 224K 条目。

使用 "template=partitioned"

创建 TABLE SampleTable(....)

现在我想关闭一个节点,在关闭之前我想将数据从第 8 个节点移动到其他节点,因此大约 32K (32K*7=224K) 个条目到 7 个节点。我可以将数据从任何节点移动到其他节点吗?

如何在关闭该节点之前将所有数据从一个节点移动到其他节点(集群)?保持数据平衡并分布在其余 7 个节点中。

我使用 create 语句创建了 table (SampleTable),并使用 insert 语句插入了数据(使用 JDBC 连接)。

持久化已启用。

下面描述的方法只有在集群中配置了备份(> 0)时才有效。

要从基线拓扑中删除节点并在其余 7 个节点之间重新平衡数据,您可以使用 Cluster Activation Tool:

  1. 停止要从拓扑中删除的节点。

  2. 等到节点停止。消息 Ignite node stopped OK 应该出现在日志中。

  3. 检查节点是否离线:

$IGNITE_HOME/bin/control.sh --baseline

Cluster state: active
Current topology version: 8

Baseline nodes:
ConsistentID=<node1_id>, STATE=ONLINE
ConsistentID=<node2_id>, STATE=ONLINE
...
ConsistentID=<node8_id>, STATE=OFFLINE
--------------------------------------------------------------------------------
Number of baseline nodes: 8

Other nodes not found.
  1. 从基线拓扑中删除节点:

$IGNITE_HOME/bin/control.sh --baseline remove <node8_id>

我认为最直接的方法是使用备份。 总之,如果你需要避免数据丢失,使用备份(or/and持久化)是必须的。

作为简单的解决方法,您可以尝试以下步骤:

  1. 您可以使用 ScanQuery 扫描要关闭的节点上的本地数据,并将数据存储在数据库中。
  2. 之后,关闭节点并将其从基线中排除。
  3. 从数据库上传数据。