本文介绍 Tair 数据导入模式(Import-mode)的功能原理、使用场景、支持版本及使用方法。
背景信息
在使用DTS(数据传输服务)进行单向数据同步时,如果源端 Key 设置了过期时间(TTL),可能会出现源端和目的端数据不一致的情况。例如:
源端写入一个带过期时间的 Key1,并同步到目的端。
源端使用续期命令给 Key1 续期成功,但续期命令在同步过程中,Key1 已经在目的端被主动或被动过期删除了,导致续期命令在目的端续期失败。
最终同步两端数据不一致。
为解决该问题,Tair 提供了数据导入模式(Import-mode),与 Valkey 8 引入的同名功能保持一致。该功能在目的端实例上开启,开启后目的端实例将:
关闭主动过期(后台定时清理过期 Key)。
关闭读操作触发的被动过期(普通客户端可正常访问,但读不到已过期的数据)。
关闭内存数据逐出。
客户端通过 CLIENT IMPORT-SOURCE ON 声明自己是数据同步客户端后,其同步写入的数据将不受目的端过期时间影响,从而保证同步过程中的数据一致性。
使用场景
需要将数据从源端单向同步至目的端 Tair,且源端 Key 设置了过期时间时,建议在同步期间在目的端实例上开启 Import-mode。
支持版本
目的端实例需满足以下版本要求:
Tair(企业版)内存型云原生版,且小版本为 25.4.0.0 及以上。
代理集群架构实例还需 Proxy 小版本为 7.1.9 及以上。
使用方法
在控制台修改目的端实例的 import-mode 参数:
同步任务开始前:将
import-mode设置为yes,开启数据导入模式。同步任务结束后:将
import-mode设置为no,关闭数据导入模式。
DTS 在同步前会自动识别目的端实例上 import-mode 的开启情况,并自动执行 CLIENT IMPORT-SOURCE ON 声明同步客户端身份,无需额外操作。
风险与注意事项
Import-mode 是同步期间的临时开关,同步完成后请务必及时在目的端实例上关闭。长时间保持开启会导致过期数据持续堆积无法清理,内存水位升高后可能因内存限制导致写入失败。
Import-mode 开启期间,普通业务客户端仍可正常读写目的端实例,但其写操作仍会触发被动过期,该路径下的数据一致性不受 Import-mode 保护,请避免在同步期间对目的端进行写入操作。