自建Redis迁移至云数据库Redis(含PegaDB)
本文主要介绍自建 Redis 实例和云数据库 Redis 实例之间的数据迁移。
前提条件
- 自建 Redis 数据库版本为 2.8x、3.x、4.x、5.x、6.x、7.x。
- 自建 Redis 数据库可正常运行
PSYNC
命令。 - 已创建存储空间大于自建 Redis 数据库占用存储空间的目标云数据库 Redis 实例。创建方式,请参见 创建 Redis 实例 或 创建 PegaDB 实例。
注意事项
- DTS 在执行全量数据迁移时将占用源库和目标库一定的资源,可能会导致数据库服务器负载上升。如果数据库业务量较大或服务器规格较低,可能会加重数据库压力,甚至导致数据库服务不可用。建议您在执行数据迁移前谨慎评估,在业务低峰期执行数据迁移。
- 若目标数据库内存不足,触发数据逐出时,由于云数据库 Redis 的默认数据逐出策略(maxmemory-policy)为 volatile-lru,会导致目标库与源库数据不一致的情况,但不会影响任务的正常运行。为避免该情况发生,建议将目标库的数据逐出策略设置为 noeviction,当目标库内存不足时,数据会写入失败,同时任务也会失败,但目标库不会因为数据逐出而丢失数据。
- 如果源库中的某些 Key 使用了过期(expire)策略,由于可能存在 Key 已过期但未被及时删除的情况,所以在目标库中查看到的 Key 数量(例如通过 info 命令查看)会比源库的 Key 数量少。
- 对于通过 EVAL 或 EVALSHA 调用的 Lua 脚本,在增量数据迁移时,由于目标端在执行脚本时不会明确返回执行结果,所以 DTS 无法确认该类型脚本是否执行成功。
- 对于 List 列表,由于 DTS 在调用
psync
传输数据时,不会对目标端已有的数据执行Flush
操作,所以可能出现重复的数据。 - 迁移期间,如自建 Redis 发生扩缩容(如增加或者减少分片)、规格变配(如扩大内存),则您需重新配置任务。且为保障数据一致性,在重新配置任务前,建议先清空已迁移至目标 Redis 的数据。
- 迁移期间,如自建 Redis 连接地址变化,您需重新配置任务。
- 对于迁移失败的任务,DTS 会触发自动恢复。当您需要将业务切换至目标实例时,请务必先结束或释放该任务,避免该任务被自动恢复后,导致源端数据覆盖目标实例的数据。
-
源库单机版 Redis 迁移到目标库集群版 Redis 的操作限制:由于集群 cluster 只允许单个命令操作单个 slot,若在源库执行多 Key 操作时,Key 不在同一个 slot 或涉及多个 slot,则会出现报错
CROSSSLOT Keys in request don't hash to the same slot
建议在 DTS 迁移过程中仅执行单 Key 操作,以免导致链路中断。
- 若目标实例的架构类型为集群版且某一个分片达到了内存上限,或目标实例的存储空间不足时,DTS 任务会因内存溢出(Out of Memory)而失败。
- 为保障迁移质量,DTS 会在源库中插入一个名称为 DTS_REDIS_TIMESTAMP_HEARTBEAT 的 Key 用于记录更新时间点,如果源库为集群架构,DTS 会在各个 shard 上均插入该 Key。迁移过程中会过滤该 Key,迁移任务结束,该 Key 就会过期。
- 如果源库为只读实例或者 DTS 账号没有写(SETEX)权限,上报的延迟可能不准确。
- 若源实例已开启透明数据加密 TDE 功能,则暂不支持通过 DTS 迁移数据。
- 若您需要迁移增量数据,则任务使用的源端账号必须具备
PSYNC
权限。
迁移类型说明
-
全量迁移
DTS 将自建 Redis 数据库迁移对象的存量数据,全部迁移到百度智能云 Redis 实例中。
-
增量迁移
在全量迁移的基础上,DTS 将自建 Redis 数据库的增量更新数据到百度智能云 Redis 实例中。通过增量迁移可以实现在应用不停服的情况下,平滑地完成 Redis 数据库的迁移上云。
说明
DTS 默认支持同步源端原生 Redis 的所有命令。
准备工作(增量数据迁移)
为保障增量数据迁移任务的正常执行,建议关闭复制输出缓冲区的限制。本文以 Linux 操作系统的服务器为例进行演示。
-
使用 redis-cli 工具连接自建 Redis 数据库。
说明
安装原生 Redis 即可使用 redis-cli,详情请参见 Redis 社区版官网。
redis-cli -h <host> -p <port> -a <password>
说明
:自建 Redis 数据库的访问地址,本机可使用 127.0.0.1。 :自建 Redis 数据库的服务端口,默认为 6379。 :自建 Redis 数据库的访问密码。
-
执行下述命令,关闭复制输出缓冲区的限制。
config set client-output-buffer-limit 'slave 0 0 0'
操作步骤
- 登录 DTS 控制台。
-
点击 创建数据传输任务 进入 DTS 创建任务页面,详情参见 购买流程。
注意:
当源端数据类型为 Redis 集群版时,分片数量需与集群 shard 数量保持一致,以保证传输性能。如集群 shard 数为 5,则该处值为 5。
- 创建任务成功后自动返回任务列表页面,选择新创建的任务,点击 更多操作—>配置任务。
-
在配置任务页面,配置源库及目标库信息,本文以 公网 接入方式为例介绍配置流程。
配置流程 类别 配置 说明 任务基本属性 任务名称 DTS 会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。 源端连接设置 IP/端口 填入源端 Redis 数据库的访问 IP 与端口(需开放至公网),各分片之间 IP/端口以英文分号分隔,同一分片不同节点的多个地址以英文逗号分隔。 密码 填入该 Redis 数据库密码(未设置可不填)。 目标端连接设置 实例 ID 选择目云数据库 Redis 实例 ID。 -
配置完成后,点击页面下方的 授权白名单进入下一步。
如果您主动为云数据库 Redis 关联了自定义的 VPC 安全组规则,则需要您手动添加对应地区 DTS 服务的 IP 地址,以允许来自 DTS 服务器的访问,操作步骤请参见 为您的 VPC 安全组添加 DTS 网段的放行规则。
警告:
DTS 自动添加或您手动添加 DTS 服务的 IP 地址段可能会存在安全风险,一旦使用本产品代表您已理解和确认其中可能存在的安全风险,并且需要您做好基本的安全防护,包括但不限于加强账号密码强度防范、限制各网段开放的端口号、内部各 API 使用鉴权方式通信、定期检查并限制不需要的网段等等。
-
配置任务对象映射。
配置 说明 迁移类型 根据需求及各引擎对迁移类型的支持情况,选择迁移类型。 同步点失效的处理策略 增量迁移阶段,若任务的同步点在源端 Redis 中已失效,DTS 支持选择不同的处理策略。 - 同步点失效时直接报任务失败:用户可以自行清空目标端实例数据后,重新执行全量+增量迁移,适用于对数据一致性要求更高的业务场景;
- 同步点失效时自动重新开始全量和增量迁移:DTS 在感知到同步点失效后,不清空目标端实例数据,直接重新开始执行全量+增量迁移。这一策略可能会导致目标端实例中数据多于源端实例,适用于对传输链路稳定性要求更高的业务场景;
限制传输速度 根据实际情况,选择是否对全量迁移和增量同步任务进行更细粒度的限流策略设置(设置 每秒迁移的行数 和 每秒迁移的数据量),以缓解目标库压力。详情参见:迁移限速。 传输对象 Redis 数据库仅支持传输对象为整个实例。 -
上述配置完成后,点击页面下方的 保存并预检查。
说明
- 在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。
- 如果预检查失败,请查看失败检查项的提示,并根据提示修复后重新进行预检查。
-
如果预检查产生警告:
- 对于不可以忽略的检查项,请查看失败检查项的提示,并根据提示修复后重新进行预检查。
- 对于可以忽略无需修复的检查项,您可以点击 强制通过,在弹出的窗口中勾选风险确认信息并点击 确定,跳过告警检查项重新进行预检查。如果选择屏蔽告警检查项,可能会导致数据不一致等问题,给业务带来风险。
- 前置校验提示校验成功后,点击 立即开启任务。
- 迁移任务正式开始,您可以在任务列表页面查看具体进度。
后续操作(可选)
数据校验
详情参见 配置数据校验。
业务切换
详情参见 业务切换流程。