1.6. state transfer
State transfer 是一个管理操作,可在站点之间同步数据。
例如,LON 脱机,NYC 开始处理客户端请求。当您重新上线时, LON 中的 Data Grid 集群与 NYC 中的集群没有相同的数据。
为确保数据在 LON 和 NYC 之间保持一致,您可以将状态从 NYC 推送到 LON。
- state transfer 是双向的。例如,您可以将状态从 NYC 推送到 LON 或从 LON 推送到 NYC。
- 将状态推送到离线站点会使它们重新上线。
状态传输只覆盖两个站点、原始站点和接收站点中存在的数据。Data Grid 不会删除数据。
例如,当 LON 和 NYC 离线时,"k2"存在于 LON 和 NYC 上。当您使 LON 重新上线时,该位置上仍然存在"k2"。如果您将状态从 NYC 推送到 LON,则传输不会影响 LON 上的"k2"。
为确保缓存的内容在状态传输后相同,请在推送状态前从接收站点的缓存中删除所有数据。
使用 clear ()
方法或 CLI 中的 clearcache
命令。
状态传输不会覆盖启动推送后发生的数据的更新。
例如,LON 和 NYC 中存在 "k1,v1"。LON 脱机,因此您将状态从 NYC 推送到 LON,这会使 LON 重新上线。在状态传输完成前,客户端将"k1,v2"放在 LON 上。
在这种情况下,来自 NYC 的状态传输不会覆盖 "k1,v2",因为启动推送后该修改发生。
自动状态传输
默认情况下,您必须使用 CLI 或 JMX 或 REST 手动执行跨站点状态传输操作。
但是,在使用异步备份策略时,Data Grid 可以自动执行跨站点状态传输操作。
当备份位置重新上线且网络连接稳定时,Data Grid 会在备份位置之间启动双向状态传输。例如,Data Grid 同时将状态从 LON 传输到 NYC 和 NYC 到 LON。
为了避免临时网络断开触发状态传输操作,备份位置必须满足两个条件才能离线。备份位置的状态必须脱机,并且不能包含在 JGroups RELAY2 的跨站点视图中。
缓存启动时也会触发自动状态传输。
在 LON 启动的场景中,在缓存启动后,它会向 NYC 发送通知。之后,NYC 启动一个单向状态转移到 LON。