从 Redis 迁移

通过复制及受控暂停写入,将独立 Redis 数据集迁移到独立 Lavik 实例。

规划迁移

使用全新的独立 Lavik 目标实例,并确保磁盘和内存容量充足。连接源端可能替换目标数据。不要使用 Meta 管理或 --cluster-enabled 目标:beta.1 在此模式下拒绝 Redis 复制。备份源数据,并在生产切换之前演练完整迁移。

beta.1 导入 RDB 版本 1–11,逻辑数据库范围为 0–15。较新的 Redis 版本或不支持的编码可能阻止全量同步。自描述的 Module 2 及 Function 库记录可能在警告后被跳过;较早或未知格式可能被拒绝。请单独盘点,并仅重建 Lavik 支持的功能。不支持的增量命令会停止复制。核对命令、脚本、TTL、ACL 需求及客户端设置。使用带长度的全量同步流:通过正常配置流程,在每个 Redis 源端配置 repl-diskless-sync no。与源端负责人协调此变更,并预留 RDB 磁盘空间和 fork 开销。

检查命令及客户端兼容性 →

连接 Redis 源端

命令示例用于可信私有网络、无认证的演练环境。将 LAVIK_HOST、LAVIK_PORT、REDIS_HOST、REDIS_PORT 设置为实际地址。Lavik 必须能直接访问 Redis;localhost 指 Lavik 自己的主机或容器。连接已启用认证的源端之前,先配置上游凭据和 TLS;不要把密码放在复制的终端命令中,也不要公开暴露无认证实例。

attach-redis.sh

Linux · bash
# Run from a trusted host with redis-cli; use a fresh standalone Lavik target.
# These variables must identify your private-network endpoints.
redis-cli -h "$LAVIK_HOST" -p "$LAVIK_PORT" REPLICAOF "$REDIS_HOST" "$REDIS_PORT"
redis-cli -h "$LAVIK_HOST" -p "$LAVIK_PORT" INFO replication

查看 INFO replication 及 Lavik 日志,直到 master_link_status 为 up 且 master_sync_in_progress 为 0,并进行实际读取。进程重启会请求新的 FULLRESYNC;beta.1 不会持久化 Redis 复制偏移量。不要把生产流量路由到仍在同步的目标。

追平与切换

OK 只确认角色变更,不表示复制完成。保持连接,直到初始同步完成且正常读取可用。暂停所有源端写入,包括定时任务。暂停写入后,记录每个源端的复制偏移量,识别 Lavik 副本连接,并确认其 ACK 达到所记录的位点。复制 PING 和过期流量可能继续推进偏移量。核对代表性值、数据类型、键数量和 TTL。集群的每个主节点都需独立检查。不要在 LOADING 期间脱离:不完整的加载可能被丢弃。流失败或缺少任何数据类型时,继续以源端为准,解决问题后再切换。

detach.sh

Linux · bash
# Only after source writers are paused and all source streams are caught up.
# Never detach a target that is still LOADING or incompletely synchronized.
redis-cli -h "$LAVIK_HOST" -p "$LAVIK_PORT" REPLICAOF NO ONE
redis-cli -h "$LAVIK_HOST" -p "$LAVIK_PORT" ROLE
# Runtime attachment turns Tomb Raider off. Re-enable its cleanup schedule.
redis-cli -h "$LAVIK_HOST" -p "$LAVIK_PORT" TOMBRAIDER INTERVAL 1000

ROLE 返回 master 后,将应用切换到 Lavik 地址,并在 Lavik 恢复写入。全面恢复流量之前,先运行少量应用读写检查。保持 Redis 禁写。只有在 Lavik 尚未接收新写入之前,回滚才只是路由切换;之后若要返回 Redis,必须先对账或重放新增写入。REPLICAOF 不是双向迁移,也不保证零数据丢失。