分布式缓存服务
数据迁移指南
文档版本 01
发布日期 2021-12-20
版权所有 © 华为技术有限公司 2021。 保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。
商标声明
和其他华为商标均为华为技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。
目 录
1 概述...1
2 迁移流程介绍... 3
3 迁移方案概览... 8
4 自建 Redis 迁移至 DCS... 12
4.1 使用在线迁移自建 Redis... 12
4.2 使用备份文件迁移自建 Redis...15
4.3 使用 Redis-cli 迁移自建 Redis(AOF 文件)... 18
4.4 使用 Redis-cli 迁移自建 Redis(RDB 文件)...19
4.5 使用 Redis-port 迁移自建 Redis(RDB 文件)...21
4.6 使用 Redis-cli 和 Redis-port 工具迁移自建 Codis 集群... 23
4.7 使用 Redis-Shake 工具迁移自建 Redis Cluster 集群...25
5 DCS 实例间迁移... 30
5.1 使用在线迁移 Redis 实例... 30
5.2 使用备份文件迁移不同 Region/Redis 版本的实例...33
6 其他云厂商 Redis 服务迁移至 DCS... 37
6.1 使用在线迁移其他云厂商 Redis... 37
6.2 使用备份文件迁移其他云厂商 Redis...40
6.3 使用 Rump 在线迁移...43
6.4 使用 Redis-cli 和 Redis-port 工具迁移其他云厂商 Codis 集群... 44
6.5 使用 Redis-Shake 工具迁移其他云厂商 Redis Cluster 集群...46
7 DCS 实例迁移下云... 49
8 迁移常见问题...50
8.1 Memcached 如何迁移?... 50
8.2 DCS 缓存实例对 Redis 版本有什么要求?... 50
8.3 不同类型的操作系统间进行数据传递和操作,需要注意什么?... 50
8.4 源 Redis 使用了多 DB,能否迁移数据到集群实例?... 51
8.5 只想迁移部分数据时应该怎么处理?... 51
8.6 源 Redis 迁移到集群实例中有哪些限制和注意事项?... 51
8.7 在线迁移需要注意哪些?... 52
8.8 在线迁移能否做到完全不中断业务?... 52
数据迁移指南 目 录
8.9 是否支持 Memcached 和 Redis 之间实例数据的迁移?...52 8.10 在线迁移实例源端报“Disconnectiing timeout slave”和“overcoming of output buffer limits”... 53
数据迁移指南 目 录
1 概述
本指南主要为用户提供Redis实例的迁移方案建议与操作指导。关于Memcached的迁 移说明,见Memcached如何迁移?。
由于用户对Redis的使用环境和场景各有差异,具体的迁移方案需要用户根据实际需求 完善与细化。迁移耗时也与数据量大小、源Redis部署出处、网络带宽等相关,具体耗 时需要在演练过程中记录与评估。
DCS缓存实例当前支持Redis 3.0、Redis 4.0、Redis 5.0和企业版Redis 6.0版本,在迁 移时需要分析业务系统使用到的缓存相关命令(附:DCS命令兼容性说明参考),在 演练阶段对命令逐一验证。如需技术支持,可联系人工客服,获取专家指导。
须知
● 当前数据迁移功能为公测免费,开始收费时间会另行通知。
● 数据迁移是一项重要且严肃的工作,准确性与时效性要求非常高,且与具体业务和 操作环境相关。
● 本文提供的案例仅供参考,实际迁移应考虑具体的业务场景和需求,请勿直接套 用。
● 本文提供的迁移操作,部分命令中包含了实例密码,这会导致密码记录到操作系统 中,请注意保护密码不被泄露,并及时清除历史操作记录。
● DCS Redis 3.0已下线,暂停售卖,建议使用Redis 4.0/5.0。
表1-1 DCS 支持的迁移能力
迁移类型 源端 目标端:DCS服务
单机/主备 Proxy集群 Cluster集群 备份文件
导入
OBS桶:AOF文件 说明华为云Redis
4.0/5.0和其他开启 RDB压缩的AOF文 件都不支持导入。
√ √ ×
数据迁移指南 1 概述
OBS桶:RDB文件 √ √ √ 在线迁移 DCS Redis:单机/
主备
√ √ √
DCS Redis:Proxy 集群
说明Redis 3.0 proxy不 支持作为源端迁 移,4.0/5.0 proxy 支持作为源端迁 移。
√ √ √
DCS Redis:
Cluster集群 √ √ √
自建Redis:单机/
主备
√ √ √
自建Redis:Proxy 集群
√ √ √
自建Redis:
Cluster集群 √ √ √
其他云Redis服
务:单机/主备 × × ×
其他云Redis服
务:Proxy集群 × × ×
其他云Redis服
务:Cluster集群 × × ×
说明
● DCS Redis,指的是分布式缓存服务的Redis。
● 自建Redis,指的是在云上、其他云厂商、本地数据中心自行搭建Redis。
● 其他云Redis服务,指的是其他云厂商的Redis服务。
● √表示支持,×表示不支持。
数据迁移指南 1 概述
2 迁移流程介绍
图2-1 迁移流程示意图
评估
获取当前待迁移的缓存数据信息(可参考缓存数据信息记录以下信息),包括:
● 实例数量
● 各实例配置的数据库数量
● 各数据库的key数量
● 业务用到的数据库
● 各实例数据占用空间
● Redis版本
● Redis实例配置(单机/主备/集群)
● 业务与各实例的连接关系
根据获取到的信息规划DCS缓存实例,包括:
● 申请缓存实例数量
● 各缓存实例的规格、类型(单机/主备/集群)
● 缓存实例与业务所属网络规划(VPC/子网/安全组)
数据迁移指南 2 迁移流程介绍
说明
redis-cli -h ${redis_address} -p ${port}
● 查看数据分布情况,确认有数据的数据库编号以及各自的key数量。
info keyspace
查看各DB存储的key数量,并记录下来,供迁移验证对比。
● 查看数据占用空间,确认用于中转的ECS可用磁盘空间是否足够,实例规格与剩余可用内存 是否足够。
info memory
参考used_memory_human的值。
准备
当完成迁移评估后,需要准备以下内容:
1. 移动存储介质
用于在网络不通(自建数据中心场景)的情况下以复制方式传输数据。
2. 网络资源
为弹性云服务器申请弹性IP、按照业务规划创建虚拟私有云与子网,设置安全组 规则。
建议为弹性IP申请临时性高规格带宽,提升传输效率。
3. 服务器资源
申请弹性云服务器,承载Redis客户端。用于导出或导入缓存数据。
弹性云服务器的规格建议不低于8C16G。
4. DCS缓存实例
按照迁移规划申请缓存实例,如果实例数量超过用户默认配额,请提工单或者联 系客服支持。
5. 相关工具安装
包括SSH工具、FTP工具、Redis迁移工具等。
6. 信息收集
信息收集包括参与人员联系方式,服务器地址、登录信息,缓存实例信息与数据 库信息等。
7. 整体迁移方案
制定总体迁移计划,包括人员安排、演练方案、迁移方案、验证方案、业务切换 方案、回退方案。
每一份方案需要有细化到可执行的操作步骤,以及可标记任务结束的里程碑。
演练
演练的目的主要有以下:
1. 验证迁移工具与过程的可行。
2. 发掘迁移过程中遇到的问题,并作出有效的改进。
3. 评估迁移耗时。
4. 优化迁移步骤,验证部分工作并行的可行性,提高迁移效率。
数据迁移指南 2 迁移流程介绍
备份
在迁移前,需要先行备份,包括但不限于缓存数据、Redis配置文件,用于应急。
迁移
在完成一到两轮的迁移演练,并根据演练过程中发现的问题进行优化后,正式开始数 据迁移。
迁移过程应该细化到每一步可执行的步骤,有明确的开始与结束确认动作。
数据验证
缓存数据的验证可以包括以下几方面:
● 各数据库的key分布是否与原来或者迁移预期一致
● 关键key的检查
● key的过期时间检查
● 实例是否能够正常备份和恢复
业务切换
1. 当缓存数据完成迁移,且验证无误后,业务可以正式切换缓存数据的连接,恢复 对外。
2. 如果涉及到缓存数据库编号的变化,业务还需修改编号的选择配置。
3. 如果业务整体由数据中心或其他云厂商迁移到华为云,业务和缓存数据的迁移可 并行。
业务验证
业务切换后建议验证内容包含以下:
1. 业务应用与DCS缓存实例的连通。
2. 通过业务操作对缓存数据的增删改查。
3. 如果条件满足,进行压测,确认性能满足业务峰值压力。
回退
当遇到演练中没有及时发现的问题,导致数据迁移后无法供业务使用,且短期无法解 决,则涉及到业务回退。
由于源Redis数据仍然存在,因此只需业务完成回退,重新接入源Redis实例即可。
在完成回退后,可继续从演练甚至准备阶段重新开始,解决问题。
迁移信息收集表
评估和准备阶段收集的信息填写参考下表:
数据迁移指南 2 迁移流程介绍
表2-1 迁移信息收集
迁移源 信息项 说明
源Redis
(列出所有 待迁移的实 例)
源Redis实例的IP
地址 -
Redis访问密码
(如有) -
总数据量大小 info memory命令查询得到,参考 used_memory_human的值。
用于评估迁移方案、DCS缓存实例规格、ECS可用 磁盘空间等是否满足,以及预估迁移耗时(业务 中断时间)。
不为空的数据库 编号
info keyspace命令查询得到。
用于确认迁移是否涉及多数据库,非AOF文件方 式迁移,部分开源工具可能须逐库处理导出和导 入。
DCS缓存实例中,单机和主备实例支持0-255共 256个数据库,集群只提供一个数据库。
各数据库的key数 量
用于迁移后进行数据完整性验证。
数据类型 CDM迁移服务当前支持Hash和String两种数据格 式,如果源数据含有list、set之类数据,请采用第 三方迁移工具。
华为云ECS
(弹性云服 务器)
如果待迁移 实例较多,
可准备多台 ECS并行迁 移
弹性IP地址 选择与DCS缓存实例网络互通的弹性云服务器进 行数据导入,确保导入过程网络稳定。
带宽建议选取高配,提升数据传输效率。
系统登录用户/密
码 -
CPU/内存 部分迁移工具支持多线程并行导入,使用高规格 ECS,能提升导入速度。
可用磁盘空间 ECS需要预留足够的可用磁盘空间,存储压缩文件 以及解压后的缓存数据文件。
注:为提高数据传输效率,对于较大的数据文 件,建议压缩后再传输到弹性云服务器。
DCS缓存实 例
(根据源Redis实例 数与数据量 情况选择合 适的规格与 实例数)
实例连接地址 - 实例连接端口 - 实例访问密码 -
实例类型 -
实例规格/可用内 存
-
数据迁移指南 2 迁移流程介绍
迁移源 信息项 说明
网络配置 VPC 提前规划VPC,确保应用服务、DCS缓存实例等处 于相同VPC中。
子网 -
安全组或白名单 由于Redis 3.0和Redis 4.0/5.0/企业版Redis 6.0实 例部署模式不一样,控制访问方式也不一样,需 要制定相应的安全组或白名单规则,确保网络连 通。具体请根据目标Redis实例参考配置安全组或 者配置白名单
... ... 其他配置信息。
数据迁移指南 2 迁移流程介绍
3 迁移方案概览
迁移工具
表3-1 Redis 迁移工具对比 工具/命令/服
务
特点 说明
DCS控制台界
面一键式迁移 操作简单,同时支持在线 迁移和离线迁移(备份文 件导入)两种方式,其中 在线迁移支持增量数据迁 移。
● 离线迁移,适用于源Redis和目标 Redis网络不连通、源Redis不支持 SYNC/PSYNC命令的场景。需要将 数据备份文件导入到OBS,DCS从 OBS桶中读取数据,将数据迁移到 华为云Redis中。
● 在线迁移,涉及到SYNC/PSYNC命 令,适用于源Redis放通了SYNC/
PSYNC命令的场景。支持将源 Redis中的数据全量迁移或增量迁 移到目标Redis中。
Redis-cli ● Redis自带命令行工 具,支持导出RDB文 件,也支持将持久化的 AOF文件整库导入。
● AOF文件为所有数据更 改命令的全量集合,数 据文件稍大。
-
Redis-port ● 第三方开源工具,主从 同步的方式处理RDB文 件。
● RDB文件实际为生成时 间点的一份内存快照,
数据文件相对较小,创 建和恢复用时较短。
● 支持在线数据迁移(同 步)。
部分云厂商不支持直接用此工具导出 RDB文件,可通过厂商管理控制台提 供的“备份与恢复”功能,下载备份 文件(RDB格式),然后导入到华为 云DCS。
数据迁移指南 3 迁移方案概览
工具/命令/服 务
特点 说明
Rump 支持在线迁移,支持在同 一个实例的不同数据库之 间,以及不同实例的数据 库之间迁移。
不支持增量迁移。
建议停业务后迁移,避免出现Key丢 失。详情参考使用Rump在线迁移。
Redis-Shake 在线迁移和离线迁移均支
持的一款开源工具。 适用于Cluster集群的数据迁移。
自行开发迁移 脚本
灵活,根据实际情况适
配。 -
迁移方案
说明
自建Redis,指的是在华为云、其他云厂商、本地数据中心自行搭建的Redis。
表3-2 迁移方案
迁移场景 工具 迁移案例 迁移说明
自建Redis
迁移至DCS DCS控制台界
面一键式迁移 ● 如果自建Redis和DCS Redis实 例网络连通,推荐使用在线迁 移自建Redis。
● 如果自建Redis和DCS Redis实 例网络不通,推荐使用备份文 件迁移自建Redis。
-
Redis-cli 使用Redis-cli迁移自建Redis
(AOF文件) -
使用Redis-cli迁移自建Redis
(RDB文件) -
Redis-port 使用Redis-port迁移自建Redis
(RDB文件) -
Redis-cli和
Redis-port 使用Redis-cli和Redis-port工具
迁移自建Codis集群 -
Redis-Shake 使用Redis-Shake工具迁移自建 Redis Cluster集群 -
数据迁移指南 3 迁移方案概览
迁移场景 工具 迁移案例 迁移说明 DCS实例间
迁移 DCS控制台界
面一键式迁移 低版本Redis实例迁移到高版本 Redis实例,例如Redis 3.0迁移至 Redis 4.0/5.0:
● 如果源Redis实例和目标Redis 实例的网络连通,推荐使用在 线迁移Redis实例。
● 如果网络不连通,推荐使用备 份文件迁移不同Redis版本的 实例。
由于Redis不同版 本存在数据兼容 问题,建议高版 本不要迁移到低 版本,否则迁移 失败。
不同Region的Redis实例迁移,例 如华南-广州迁移至华北-北京1,
推荐使用备份文件迁移不同 Region的实例。
由于DCS Redis实 例默认是禁用了 SYNC和PSYNC命 令,在相同 Region执行在线 迁移时,会默认 放通SYNC和 PSYNC命令,但 是在不同Region 迁移时,没有放 通该命令操作,
所以无法使用在 线迁移,推荐使 用备份文件迁 移。
不同帐号的Redis实例迁移,例如 从华为云帐号A迁移到帐号B:
● 推荐使用备份文件迁移不同 Redis版本的实例。
● 如果可以打通网络,也可以使 用在线迁移Redis实例。
-
其他云厂商 Redis服务 迁移至DCS
DCS控制台界
面一键式迁移 ● 如果其他云厂商Redis服务,
没有禁用SYNC和PSYNC命 令,推荐使用在线迁移其他云 厂商Redis。
● 如果其他云厂商Redis服务,
禁用了SYNC和PSYNC命令,
推荐使用备份文件迁移其他云 厂商Redis。
如果需要使用在 线迁移,建议联 系其他云厂商运 维人员放通SYNC 和PSYNC命令。
Rump 使用Rump在线迁移 -
Redis-cli和
Redis-port 使用Redis-cli和Redis-port工具
迁移其他云厂商Codis集群 -
Redis-Shake 使用Redis-Shake工具迁移其他
云厂商Redis Cluster集群 -
数据迁移指南 3 迁移方案概览
迁移场景 工具 迁移案例 迁移说明 DCS实例迁
移下云 DCS控制台界
面一键式迁移 DCS实例迁移下云 DCS控制台支持 在线迁移方式迁 移到自建Redis。
数据迁移指南 3 迁移方案概览
4 自建 Redis 迁移至 DCS
4.1 使用在线迁移自建 Redis
场景描述
在满足源Redis和目标Redis的网络相通、源Redis已放通SYNC和PSYNC命令这两个前提 下,使用在线迁移的方式,将源Redis中的数据全量迁移或增量迁移到目标Redis中。
注意
● 如果源Redis禁用了SYNC和PSYNC命令,请务必放通后再执行在线迁移,否则迁移 失败,选择华为云Redis实例进行在线迁移时,会自动放开SYNC命令。
● 在线迁移不支持公网方式直接迁移。
● 进行在线迁移时,建议将源端实例的参数repl-timeout配置为300秒,client- output-buffer-limit配置为实例最大内存的20%。
对业务影响
在线迁移,相当于增加一个从节点并且会做一次全量同步,所以,建议在业务低峰期 迁移。
前提条件
● 在迁移之前,请先阅读迁移方案概览,选择正确的迁移方案,了解当前DCS支持 的在线迁移能力,选择适当的目标实例。
● 如果是单机/主备实例迁移到集群实例,由于目标Redis集群实例只有一个DB,请 先确保源Redis实例DB0以外的DB是否有数据,如果有,请先将数据转存到DB0,
否则会出现迁移失败。
步骤 1:获取源 Redis 的 IP(域名)和端口
获取准备迁移的源Redis实例的IP和端口,或者域名和端口。
数据迁移指南 4 自建 Redis 迁移至 DCS
步骤 2:准备目标 Redis 实例
● 如果您还没有目标Redis,请先创建,创建操作,请参考购买Redis实例。
● 如果您已有目标Redis,则不需要重复创建,但在迁移之前,您需要清空实例数 据,清空操作请参考清空Redis实例数据。
如果没有清空,如果存在与源Redis实例相同的key,迁移后,会覆盖目标Redis实 例原来的数据。
步骤:3:检查网络
步骤1 检查源Redis、目标Redis、迁移任务资源所在VPC是否在同一个VPC内。
如果是,则执行步骤4:创建在线迁移任务;如果不是,执行步骤2。
步骤2 检查源Redis的VPC、目标Redis的VPC、迁移任务资源所在VPC的网络是否打通,确保 迁移任务的虚拟机资源能访问源Redis和目标Redis。
如果已打通,则执行步骤4:创建在线迁移任务;如果没打通,则执行步骤3。
步骤3 执行相应操作,打通网络。
● 当源Redis和目标Redis属于华为云同一Region,请参考VPC对等连接说明,查看 和创建对等连接,打通网络。
● 当源Redis和目标Redis属于华为云不同Region,请参考云连接,查看和创建云连 接,打通网络。
● 当源Redis和目标Redis属于不同的云厂商,请参考云专线打通网络。
----结束
步骤 4:创建在线迁移任务
步骤1 登录分布式缓存服务控制台。
步骤2 单击左侧菜单栏的“数据迁移”。页面显示迁移任务列表页面。
步骤3 单击右上角的“创建在线迁移任务”。
步骤4 设置迁移任务名称和描述。
步骤5 配置在线迁移任务虚拟机资源的VPC、子网和安全组。
创建在线迁移任务时,需要选择迁移虚拟机资源的VPC和安全组,并确保迁移资源能 访问源Redis和目标Redis实例。
----结束
步骤 5:配置在线迁移任务
步骤1 创建完在线迁移任务之后,在“在线迁移”的列表,单击“配置”,配置在线迁移的 源Redis、目标Redis等信息。
步骤2 选择迁移方法。
支持“全量迁移”和“全量迁移+增量迁移”两种,“全量迁移”和“全量迁移+增 量迁移”的功能及限制如表4-1所示。
数据迁移指南 4 自建 Redis 迁移至 DCS
表4-1 在线迁移方法说明
迁移类型 描述
全量迁移 该模式为Redis的一次性迁移,适用于可中断业务的迁移场 景。全量迁移过程中,如果源Redis有数据更新,这部分更 新数据不会被迁移到目标Redis。
全量迁移+增量迁移 该模式为Redis的持续性迁移,适用于对业务中断敏感的迁 移场景。增量迁移阶段通过解析日志等技术, 持续保持源 Redis和目标端Redis的数据一致。
增量迁移,迁移任务会在迁移开始后,一直保持迁移中状 态,不会自动停止。需要您在合适时间,在“操作”列单击
“停止”,手动停止迁移。停止后,源端数据不会造成丢 失,只是目标端不再写入数据。增量迁移在传输链路网络稳 定情况下是秒级时延,具体的时延情况依赖于网络链路的传 输质量。
图4-1 选择迁移方法
步骤3 分别选择源Redis和目标Redis。
1. “源Redis”,支持“云服务Redis”和“自建Redis”,需要根据迁移场景选择数 据来源。
– 云服务Redis:华为云Redis实例,需要选择与迁移任务处于相同VPC的华为云 Redis服务。
– 自建Redis:华为云、其他云厂商、本地数据中心自行搭建的Redis,需要输 入Redis的连接地址。
2. 如果是密码访问模式实例,在输入连接实例密码后,您可以单击密码右侧的“测 试连接”,检查实例密码是否正确、网络是否连通。
步骤4 在“目标Redis实例”中,选择步骤2:准备目标Redis实例中创建的目标实例。
如果是密码访问模式实例,在输入连接实例密码后,您可以单击密码右侧的“测试连 接”,检查实例密码是否符合要求。
说明
当源Redis和目标Redis属于华为云不同Region,则打通网路后,目标Redis实例无论是自建Redis 或华为云Redis实例,在“目标Redis实例”区域,只能选中自建Redis,输入实例相关信息。
步骤5 确认迁移信息,然后单击“提交”,开始创建迁移任务。
可返回迁移任务列表中,观察对应的迁移任务的状态,迁移成功后,任务状态显示
“成功”。
数据迁移指南 4 自建 Redis 迁移至 DCS
说明
如果是增量迁移,会一直保持迁移中状态,需要手动停止迁移。
如果出现迁移失败,可以单击迁移任务名称,进入迁移任务详情页面,查看“迁移日 志”。
----结束
迁移后验证
迁移完成后,请使用Redis-cli连接源Redis和目标Redis,确认数据的完整性。
1. 连接源Redis和目标Redis。
2. 输入info keyspace,查看keys参数和expires参数的值。
3. 对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一 致,则表示数据完整,迁移正常
注意:如果是全量迁移,迁移过程中源Redis更新的数据不会迁移到目标实例。
4.2 使用备份文件迁移自建 Redis
场景描述
当前华为云DCS支持将其他云厂商Redis、自建Redis的数据通过DCS控制台迁移到华为 云Redis。
您需要先将其他云厂商Redis、自建Redis的数据备份下载到本地,然后将备份数据文件 上传到华为云与DCS Redis实例同一租户下相同Region下的OBS桶中,最后在DCS控制 台创建迁移任务,DCS从OBS桶中读取数据,将数据迁移到华为云Redis中。
上传OBS桶的文件支持.aof、.rdb、.zip、.tar.gz四种格式,您可以直接上传.aof和.rdb 文件,也可以将.aof和.rdb文件压缩成.zip或.tar.gz文件,然后将压缩后的文件上传到 OBS桶。
前提条件
● OBS桶所在区域必须跟Redis目标实例所在区域相同。例如,OBS桶和Redis所在的 区域都为“华北-北京一”。
● 上传的数据文件必须为.aof、.rdb、.zip、.tar.gz的格式。
● 如果是其他云厂商的单机版Redis和主备版Redis,您需要在备份页面创建备份任 务,然后下载备份文件。
● 如果是其他云厂商的集群版Redis,在备份页面创建备份后会有多个备份文件,每 个备份文件对应集群中的一个分片,需要下载所有的备份文件,然后逐个上传到 OBS桶。在迁移时,需要把所有分片的备份文件选中。
● 暂不支持导入自建Redis 5.0生成的rdb备份文件,如果是自建Redis 3.0和Redis 4.0,可以使用Redis-cli工具导出.rdb备份文件。其他云厂商Redis只能通过各云的 备份页面创建备份任务导出获取,不能通过Redis-cli工具使用命令导出。
数据迁移指南 4 自建 Redis 迁移至 DCS
● Cluster集群仅支持导入.rdb备份文件,不支持.aof备份文件。
步骤 1:准备目标 Redis 实例
● 如果您还没有华为云Redis,请先创建,创建操作,请参考购买Redis实例。
● 如果您已有华为云Redis,则不需要重复创建,但在迁移之前,您需要清空实例数 据,清空操作,请参考清空Redis实例数据。
当前支持迁移到Redis 3.0、Redis 4.0和Redis 5.0,您可以根据实际情况选择。
步骤 2:创建 OBS 桶并上传备份文件
步骤1 通过OBS Browser+客户端,上传备份数据文件到OBS桶。
如果上传的备份文件较小,且小于5GB,请执行步骤2,通过OBS控制台上传即可;
如果上传的备份文件大于5GB,请按照OBS服务提供的超过5GB如何上传操作指导执 行。
步骤2 通过OBS控制台,上传备份数据文件到OBS桶。
如果上传的备份文件较小,且小于5GB,请执如下步骤:
1. 创建OBS桶。
在创建过程中,以下两个参数请按要求设置,其他详细的创建步骤,请参考《对 象存储服务 控制台用户指南》的“创建桶”章节。
a. 选择“区域”。
OBS桶所在区域必须跟Redis目标实例所在区域相同。
b. 设置“存储类别”,当前支持“标准存储”、“低频访问存储”和“归档存 储”。
请不要选择“归档存储”,否则会导致备份文件迁移失败。
c. 设置完成后,单击“立即创建”,等待OBS桶创建完成。
2. 在OBS管理控制台的桶列表中,单击步骤2.1中的桶名称,进入“概览”页面。
3. 在左侧导航栏,单击“对象”。
4. 在“对象”页签下,单击“上传对象”,系统弹出“上传对象”对话框。
5. 指定对象的存储类别。
请不要选择“归档存储”,否则会导致备份文件迁移失败。
6. 上传对象。
您可以拖拽本地文件或文件夹至“上传对象”区域框内添加待上传的文件,也可 以通过单击“上传对象”区域框内的“添加文件”,选择本地文件添加。
单次最多支持100个文件同时上传,总大小不超过5GB。
数据迁移指南 4 自建 Redis 迁移至 DCS
图4-2 批量上传对象
7. 可选:勾选“KMS加密”,用于加密上传文件。
8. 单击“上传”。
----结束
步骤 3:创建迁移任务
步骤1 登录分布式缓存服务控制台。
步骤2 单击左侧菜单栏的“数据迁移”。页面显示迁移任务列表页面。
步骤3 单击右上角的“创建备份导入任务”。
步骤4 设置迁移任务名称和描述。
步骤5 “源Redis”区域中,“数据来源”选择“OBS桶”,在“OBS桶名”中选择已上传备 份文件的OBS桶。
在“备份文件”列表中显示已上传的备份数据文件,如下图所示。
说明
上传的备份文件格式支持.aof、.rdb、.zip、.tar.gz,您可以上传任意其中一种。
图4-3 备份文件导入
数据迁移指南 4 自建 Redis 迁移至 DCS
步骤6 选择需要迁移的备份文件。
步骤7 选择步骤1:准备目标Redis实例中创建的目标Redis,如果目标Redis是密码访问模 式,请输入密码,并进行测试连接,检查密码是否正确。
步骤8 单击“立即创建”。
步骤9 确认迁移信息,然后单击“提交”,开始创建迁移任务。
可返回迁移任务列表中,观察对应的迁移任务的状态,迁移成功后,任务状态显示
“成功”。
----结束
4.3 使用 Redis-cli 迁移自建 Redis(AOF 文件)
迁移介绍
Redis-cli是Redis自带的一个命令行工具,安装Redis后即可直接使用Redis-cli工具。
下载Redis,请使用以下命令获取:
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
本章节主要介绍如何使用Redis-cli将自建Redis迁移到华为云DCS缓存实例。
步骤 1:生成 AOF 文件
须知
● 正式进行迁移操作前,建议先暂停业务,确保不会在迁移过程中丢失新产生的数据 变动。
● 建议选择业务量较少的时间段进行迁移。
使用如下命令开启缓存持久化,得到AOF持久化文件。
redis-cli -h {source_redis_address} -p 6379 -a {password} config set appendonly yes
开启持久化之后,如果AOF文件大小不再变化,说明AOF文件为全量缓存数据。
说明
● 使用redis-cli登录redis实例,输入命令“config get dir”可以查找生成的AOF文件保存路 径,文件名如果没有特殊指定,默认为:appendonly.aof。
● 生成AOF文件后如需关闭同步,可使用redis-cli登录redis实例,输入命令“config set appendonly no”进行关闭。
步骤 2:上传 AOF 文件至华为云 ECS
1. 为节省传输时间,请先压缩AOF文件再传输。
2. 将压缩文件(如以SFTP方式)上传到华为云ECS。
数据迁移指南 4 自建 Redis 迁移至 DCS
说明
ECS需保证有足够的磁盘空间,供数据文件解压缩,同时要与缓存实例网络互通,通常要求相同 VPC和相同子网,且安全组规则不限制访问端口,安全组设置请参考如何选择和配置安全组。
步骤 3:导入数据
redis-cli -h {dcs_instance_address} -p 6379 -a {password} --pipe <
appendonly.aof
须知
如果使用公网SSL加密时,连接地址和端口请替换为实际的配置信息。
步骤 4:迁移后验证
数据导入成功后,请连接DCS缓存实例,通过info命令,确认数据是否已按要求成功导 入。
如果导入不成功,需要分析原因,修正导入语句,然后使用flushall或者flushdb命令清 理实例中的缓存数据,并重新导入。
导出和导入效率
AOF文件的生成较快,适用于可以进入Redis服务器并修改配置的场景,如用户自建的 Redis服务。
VPC内进行导入,平均100w数据(每条数据20字节),大概4~10秒完成。
4.4 使用 Redis-cli 迁移自建 Redis(RDB 文件)
迁移介绍
Redis-cli是Redis自带的一个命令行工具,安装Redis后即可直接使用Redis-cli工具。
Redis-cli提供了RDB文件导出功能,如果Redis服务不支持获取AOF文件,可以尝试通 过Redis-cli获取RDB文件。然后再通过其他工具(如Redis-port)导入到DCS的缓存实 例中。
本文主要介绍在Linux系统中进行操作。
下载Redis,请使用以下命令获取,安装编译后即可使用Redis-cli。
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
须知
源Redis实例必须支持“SYNC”命令,因为使用Redis-cli导出RDB文件依赖SYNC命 令。
DCS的Redis 4.0/5.0版本实例,不支持SYNC,不能使用此命令导出为RDB文件,主备 实例如需本地备份,请从控制台的备份恢复功能模块中下载RDB文件。
数据迁移指南 4 自建 Redis 迁移至 DCS
步骤 1:导出前准备
对于主备或集群实例,数据写入RDB文件有一定的时延,时延策略配置在redis.conf文 件中。因此,建议先了解待迁移redis实例的RDB策略配置,然后暂停业务系统并往 Redis实例写入满足数量条件的测试key,确保RDB文件为最新生成。
对于云厂商提供的Redis服务,可以咨询云服务技术支持,了解rdb文件的数据写入策 略配置。
例如,redis.conf中对RDB的默认策略配置如下:
save 900 1 //900秒内有数据变更则写入RDB文件
save 300 10 //300秒内有10条以上数据变更则写入RDB文件 save 60 10000 //60秒内有10000条以上数据变更则写入RDB文件
因此,可以参考以上数据写入RDB策略,在停止业务系统向Redis实例写入数据后,主 动写入测试数据若干,触发策略并写入RDB文件,确保业务数据均已同步导RDB文件 中。
测试数据可以在导入后删除。
说明
如果有某个数据库没有被业务系统使用,可以将测试数据写入该数据库,待导入DCS后,使用 flushdb命令清空该库。
步骤 2:导出 RDB 文件
须知
1. 建议选择业务量较少的时间段进行迁移。
2. 导出Redis源生集群的数据时,需要针对集群的每个节点分别导出数据,然后逐一导 入。
使用如下命令导出RDB文件:
redis-cli -h {source_redis_address} -p 6379 -a {password} --rdb {output.rdb}
执行命令后回显"Transfer finished with success.",表示文件导出成功。
步骤 3:上传 RDB 文件至华为云 ECS
1. 为节省传输时间,请先压缩RDB文件再传输。
2. 将压缩文件(如以SFTP方式)上传到华为云ECS。
说明
ECS需保证有足够的磁盘空间,供数据文件解压缩,同时要与缓存实例网络互通,通常要求相同 VPC和相同子网,且安全组规则不限制访问端口,安全组设置请参考如何选择和配置安全组。
步骤 4:导入数据
可借助Redis-port工具完成数据导入。
数据迁移指南 4 自建 Redis 迁移至 DCS
步骤 5:迁移后验证
数据导入成功后,请连接DCS缓存实例,通过info命令,确认数据是否已按要求成功导 入。
如果导入不成功,需要分析原因,修正导入语句,然后使用flushall或者flushdb命令清 理实例中的缓存数据,并重新导入。
导出和导入效率
单机实例如果不做持久化配置,则RDB文件需要临时生成,导出耗时较主备实例相比 稍多一些。
VPC内进行导入,平均100w数据(每条数据20字节),大概4~10秒完成。
4.5 使用 Redis-port 迁移自建 Redis(RDB 文件)
迁移介绍
Redis-port是一款开源的数据批量传输工具,主要用于Redis节点间的数据库同步,该 工具具备以下功能:
● dump
生成缓存快照,将缓存数据导出为rdb文件。
● decode
解析rdb文件,查看数据分布情况。
● restore
将rdb文件恢复(导入)到实例中。
● sync
将Redis实例中的数据同步到另一个Redis实例中。
本文主要介绍基于Redis-port v2.0-beta版本(linux)如何从用户自建Redis迁移到华 为云DCS中。
步骤 1:安装 Redis-port
下载和解压工具,可直接使用,无需编译。
在执行导出和导入操作的服务器上都需要安装Redis-port。
wget https://github.com/CodisLabs/redis-port/releases/download/v2.0-beta/
redis-port-v2.0-beta-go1.10.1-linux.tar.gz
tar -xvf redis-port-v2.0-beta-go1.10.1-linux.tar.gz
步骤 2:导出数据
redis-dump -n 3 -m {password}@{source-redis-host}:{port} -o {outputfile.rdb}
注意,参数-n表示多个CPU并行处理导出任务。
数据迁移指南 4 自建 Redis 迁移至 DCS
说明
1. 如果安装了其他版本,命令格式可能稍有差异,具体可查看相关的帮助。
2. Redis-port工具的导入导出命令中,密码参数不支持某些特殊字符(如:@#),如果遇到连 接信息(密码、Redis地址和端口)解析失败,请先修改密码,临时去掉密码中的特殊字符。
3. 导出Redis源生集群的数据时,需要针对集群的每个节点分别导出数据,然后逐一导入,具体 参考源Redis迁移到集群实例中有哪些限制和注意事项?。
4. Redis-port工具低版本(redis-port-v2.0-beta-go1.9.5及更早版本)对有序集合(sorted set)数据迁移的支持不够好,导入后将变成无序集合(set)数据。
5. DCS的Redis 4.0/5.0版本实例,不支持SYNC,不能使用此命令导出为RDB文件,主备实例如 需本地备份,请从控制台的备份恢复功能模块中下载RDB文件。
参数说明:
root@redis-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-dump --help Usage:
redis-dump [--ncpu=N] (--master=MASTER|MASTER) [--output=OUTPUT] [--aof=FILE]
redis-dump --version Options:
-n N, --ncpu=N Set runtime.GOMAXPROCS to N.
-m MASTER, --master=MASTER The master redis instance ([auth@]host:port).
-o OUTPUT, --output=OUTPUT Set output file. [default: /dev/stdout].
-a FILE, --aof=FILE Also dump the replication backlog.
Examples:
$ redis-dump 127.0.0.1:6379 -o dump.rdb $ redis-dump 127.0.0.1:6379 -o dump.rdb -a
$ redis-dump -m [email protected]:6380 -o dump.rdb -a dump.aof
实测演示:
root@redis-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-dump -n 3 -m Heru [email protected]:6379 -o save196.rdb
2018/03/26 09:10:28 dump.go:68: [INFO] dump: master = "[email protected]:6379", output =
"save196.rdb", aoflog = ""
2018/03/26 09:10:29 dump.go:111: [INFO] dump: runid = "a62dda896a855aef4a5429fd36fc4268882bc715", offset = 204541
2018/03/26 09:10:29 dump.go:112: [INFO] dump: rdb file = 46721058 (44.56mb) 2018/03/26 09:10:29 dump.go:151: [INFO] dump: (w,a) = (rdb,aof)
2018/03/26 09:10:29 dump.go:181: [INFO] dump: rdb = 46721058 - [100.00%] (w,a)=(46721058,0) ~ (44.56mb,0)
2018/03/26 09:10:29 dump.go:185: [INFO] dump: done root@redis-nodelete:~/port/redis-port-v2.0-alpha-go1.9.2-linux#
步骤 3:数据传输到云上 ECS
1. 为节省传输时间,请先压缩RDB文件再传输。
2. 将压缩文件(如以SFTP方式)上传到华为云ECS。
说明
ECS需保证有足够的磁盘空间,供数据文件解压缩,同时要与缓存实例网络互通,通常要求相同 VPC和相同子网,且安全组规则不限制访问端口。安全组设置请参考如何选择和配置安全组。
步骤 4:导入数据
redis-restore -n {N} -i {outputfile.rdb} -t {password}@{dcs_instance_address}: {port} [--unixtime-in-milliseconds="yyyy-MM-dd hh:mm:ss"] [--
db={DB_number}]
数据迁移指南 4 自建 Redis 迁移至 DCS
注意参数db,表示可以单独导入文件中的指定DB编号里的缓存数据。-n表示允许多个 CPU并行处理数据导入。
参数说明:
root@redis-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-restore --help Usage:
redis-restore [--ncpu=N] [--input=INPUT|INPUT] --target=TARGET [--aof=FILE] [--db=DB] [--unixtime- in-milliseconds=EXPR]
redis-restore --version Options:
-n N, --ncpu=N Set runtime.GOMAXPROCS to N.
-i INPUT, --input=INPUT Set input rdb encoded file.
-t TARGET, --target=TARGET The target redis instance ([auth@]host:port).
-a FILE, --aof=FILE Also restore the replication backlog.
--db=DB Accept db = DB, default is *.
--unixtime-in-milliseconds=EXPR Update expire time when restoring objects from RDB.
Examples:
$ redis-restore dump.rdb -t 127.0.0.1:6379
$ redis-restore -i dump.rdb -t 127.0.0.1:6379 --aof dump.aof --db=1 $ redis-restore -t 127.0.0.1:6379 --aof dump.aof
$ redis-restore -t 127.0.0.1:6379 --db=0
$ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="@209059200000" //
ttlms += (now - '1976-08-17')
$ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="+1000" // ttlms +=
1s $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="-1000" // ttlms -= 1s $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="1976-08-17 00:00:00" // ttlms += (now - '1976-08-17')
实测演示:
root@redis-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-restore -i save196.rdb -t Heru [email protected]:6379
2018/03/26 09:15:33 restore.go:70: [INFO] restore: input = "save196.rdb", aoflog = "" target = "Heru [email protected]:6379"
2018/03/26 09:15:33 restore.go:126: [INFO] restore: (r,f,s/a,f,s) = (rdb,rdb.forward,rdb.skip/
aof,rdb.forward,rdb.skip)
2018/03/26 09:15:34 restore.go:155: [INFO] restore: size = 46721058 - [ 49.94%, 0.00%] (r,f,s/
a,f,s)=(23330816,0,599496/0,0,0) ~ (22.25mb,-,-/0,-,-)
2018/03/26 09:15:35 restore.go:155: [INFO] restore: size = 46721058 - [ 99.31%, 0.00%] (r,f,s/
a,f,s)=(46399488,12558,1179884/0,0,0) ~ (44.25mb,-,-/0,-,-)
2018/03/26 09:15:35 restore.go:155: [INFO] restore: size = 46721058 - [100.00%, 0.00%] (r,f,s/
a,f,s)=(46721058,20000,1179884/0,0,0) ~ (44.56mb,-,-/0,-,-) 2018/03/26 09:15:35 restore.go:159: [INFO] restore: done root@redis-nodelete:~/port/redis-port-v2.0-alpha-go1.9.2-linux#
步骤 5:迁移后验证
数据导入成功后,请连接DCS缓存实例,通过info命令,确认数据是否已按要求成功导 入。
如果导入不成功,需要分析原因,修正导入语句,然后使用flushall或者flushdb命令清 理实例中的缓存数据,并重新导入。
4.6 使用 Redis-cli 和 Redis-port 工具迁移自建 Codis 集群
DCS的Proxy集群基于开源Codis架构,因此运行在Codis集群的数据,可以平滑迁移到 DCS Proxy集群实例中。本文以Redis-cli和Redis-port工具为例介绍Redis集群间的数据 迁移。
● “自建Codis集群”迁移到“DCS Proxy集群”
数据迁移指南 4 自建 Redis 迁移至 DCS
包括在本地数据中心自建、华为云或其他公有云上自建。自建的Codis集群,数据 导出不受限制。
● “其他云厂商Codis集群”迁移到“DCS Proxy集群”
部分云厂商对数据导出相关命令做了限制,可通过其控制台界面提供的备份文件 下载功能,将数据文件导出。
迁移准备
● 创建DCS Proxy集群实例。
集群实例的可用内存须大于待导入数据量。
● 准备一台服务器,用作数据文件中转,以及数据导入的客户端。
该中转服务器与DCS Proxy集群实例网络相通,且保证有足够的磁盘空间,供待迁 移的数据文件存放。
为了确保导入效率,建议使用华为云的弹性云服务器(ECS),且ECS与Proxy集 群实例配置相同虚拟私有云、子网与安全组。
迁移操作
步骤1 导出RDB文件。
下载并安装Redis:http://download.redis.io/releases/redis-5.0.8.tar.gz。
使用如下命令对集群的每一个Redis分片导出RDB文件:
redis-cli -h {source_redis_address} -p {source_redis_port} -a {source_redis_password} --rdb {output.rdb}
执行命令后回显"Transfer finished with success.",表示文件导出成功。
说明
1. 建议选择业务量较少的时间段进行迁移。
2. 需要针对Codis集群的每个Redis分片分别导出备份文件,然后逐一导入DCS Proxy集群。
步骤2 上传RDB文件至中转服务器,以下以华为云ECS为例。
如果RDB文件较大,可将其压缩后再传输。
步骤3 下载迁移工具Redis-port。
登录ECS,下载和解压工具,可直接使用,无需编译。
wget https://github.com/CodisLabs/redis-port/releases/download/v2.0-beta/
redis-port-v2.0-beta-go1.10.1-linux.tar.gz
tar -xvf redis-port-v2.0-beta-go1.10.1-linux.tar.gz 步骤4 导入数据。
使用redis-port工具将所有RDB文件导入华为云Redis。如果ECS和Proxy集群实例在相 同VPC,导入100w数据(每条数据20字节),大概耗时4~10秒。
redis-restore -n {N} -i {outputfile.rdb} -t {password}@{dcs_instance_address}: {port} [--unixtime-in-milliseconds="yyyy-MM-dd hh:mm:ss"]
数据迁移指南 4 自建 Redis 迁移至 DCS
说明
该redis-port工具为开源工具,实例密码不支持特殊字符。
参数db,表示可以单独导入文件中的指定DB编号里的缓存数据。-n表示允许多个CPU 并行处理数据导入。其他参数说明如下:
root@redis-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-restore --help Usage:
redis-restore [--ncpu=N] [--input=INPUT|INPUT] --target=TARGET [--aof=FILE] [--db=DB] [--unixtime- in-milliseconds=EXPR]
redis-restore --version Options:
-n N, --ncpu=N Set runtime.GOMAXPROCS to N.
-i INPUT, --input=INPUT Set input rdb encoded file.
-t TARGET, --target=TARGET The target redis instance ([auth@]host:port).
-a FILE, --aof=FILE Also restore the replication backlog.
--db=DB Accept db = DB, default is *.
--unixtime-in-milliseconds=EXPR Update expire time when restoring objects from RDB.
Examples:
$ redis-restore dump.rdb -t 127.0.0.1:6379
$ redis-restore -i dump.rdb -t 127.0.0.1:6379 --aof dump.aof --db=1 $ redis-restore -t 127.0.0.1:6379 --aof dump.aof
$ redis-restore -t 127.0.0.1:6379 --db=0
$ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="@209059200000" //
ttlms += (now - '1976-08-17')
$ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="+1000" // ttlms +=
1s $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="-1000" // ttlms -= 1s $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="1976-08-17 00:00:00" // ttlms += (now - '1976-08-17')
实测演示:
root@redis-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-restore -i save196.rdb -t
******@192.168.0.171:6379
2018/03/26 09:15:33 restore.go:70: [INFO] restore: input = "save196.rdb", aoflog = "" target =
"******@192.168.0.171:6379"
2018/03/26 09:15:33 restore.go:126: [INFO] restore: (r,f,s/a,f,s) = (rdb,rdb.forward,rdb.skip/
aof,rdb.forward,rdb.skip)
2018/03/26 09:15:34 restore.go:155: [INFO] restore: size = 46721058 - [ 49.94%, 0.00%] (r,f,s/
a,f,s)=(23330816,0,599496/0,0,0) ~ (22.25mb,-,-/0,-,-)
2018/03/26 09:15:35 restore.go:155: [INFO] restore: size = 46721058 - [ 99.31%, 0.00%] (r,f,s/
a,f,s)=(46399488,12558,1179884/0,0,0) ~ (44.25mb,-,-/0,-,-)
2018/03/26 09:15:35 restore.go:155: [INFO] restore: size = 46721058 - [100.00%, 0.00%] (r,f,s/
a,f,s)=(46721058,20000,1179884/0,0,0) ~ (44.56mb,-,-/0,-,-) 2018/03/26 09:15:35 restore.go:159: [INFO] restore: done root@redis-nodelete:~/port/redis-port-v2.0-alpha-go1.9.2-linux#
步骤5 迁移后验证。
数据导入成功后,请连接DCS缓存实例,通过info命令查看Keyspace中的Key数量,确 认数据是否完整导入。
如果导入不成功,可使用flushall或者flushdb命令清理实例中的缓存数据后重新导入。
----结束
4.7 使用 Redis-Shake 工具迁移自建 Redis Cluster 集群
RedisShake是一款开源的Redis迁移工具,支持Cluster集群的在线迁移与离线迁移(备 份文件导入)。DCS Cluster集群与Redis Cluster集群设计一致,数据可平滑迁移。
数据迁移指南 4 自建 Redis 迁移至 DCS
本文以Linux系统环境为例,介绍如何使用Redis-Shake工具进行Cluster集群数据迁 移。
在线迁移
在线迁移主要适用于自建Redis Cluster集群迁移到DCS Cluster集群的场景,且两端集 群实例能够网络连通,或者有一台中转服务器能够连通两端集群实例。
部署在其他云厂商Redis服务上的Cluster集群数据,由于SYNC、PSYNC命令被云厂商 禁用,暂不支持在线迁移。
1. 在DCS控制台创建Cluster集群实例。
注意集群的内存规格不能小于源端Cluster集群。
2. 准备一台云服务器,并安装RedisShake
RedisShake既能访问源端Cluster集群,也需要能访问目标端DCS Cluster集群,需 要绑定弹性公网IP。
建议使用华为云的弹性云服务器(ECS),且ECS与DCS Cluster集群实例配置相同 虚拟私有云、子网与安全组。如果源端Cluster集群在本地或者其他云厂商的服务 器上自建,则需要允许被公网访问。
Redis-Shake工具可下载release版本,解压缩后即可使用。
3. 获取源集群和目标集群的Master节点和IP。
在线迁移需要将各个节点数据分别迁移。使用如下命令查询源和目标Cluster集群 的所有节点的IP地址与端口:
redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes
在命令返回的结果中,获取所有master节点的IP端口,如下如所示:
说明
安装了Redis后,自带redis-cli命令。如CentOS下安装Redis:yum install redis 4. 编辑RedisShake配置文件。
编辑redis-shake工具配置文件redis-shake.conf,补充源端与目标端所有master节 点的连接信息:
source.type = cluster
#如果无密码,本项不填
source.password_raw = {source_redis_password}
#源Cluster集群所有master节点的IP地址与端口,以分号分隔
source.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:
{masterN_port}
数据迁移指南 4 自建 Redis 迁移至 DCS
target.type = cluster
#如果无密码,本项不填
target.password_raw = {target_redis_password}
#目标Cluster集群所有master节点的IP地址与端口,以分号分隔
target.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:
{masterN_port}
保存并退出文件编辑。
5. 在线迁移,同步数据
使用如下命令同步源Redis集群和目标Redis集群数据:
./redis-shake -type sync -conf redis-shake.conf
执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段:
sync rdb done.
执行日志出现如下信息时,代表增量同步无新增内容,可手动停止同步(Ctrl + C):
sync: +forwardCommands=0 +filterCommands=0 +writeBytes=0
图4-4 redis-shake 在线迁移示意图
6. 迁移后验证
数据同步结束后,可使用redis-cli工具连接DCS Cluster集群,通过info命令查看 Keyspace中的Key数量,确认数据是否完整导入。
如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同 步。
7. 清理RedisShake配置文件。
离线迁移(备份文件导入)
与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源 端实例部署在其他云厂商Redis服务中,无法实现在线迁移。
1. 在DCS控制台创建Cluster集群实例。
注意集群的内存规格不能小于源端Cluster集群。
2. 分别获取源端与目标端Cluster集群的Master节点IP地址与端口。
redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes
数据迁移指南 4 自建 Redis 迁移至 DCS
在命令返回的结果中,获取所有master节点的IP端口,如下如所示:
说明
安装了Redis后,自带redis-cli命令。如CentOS下安装Redis:yum install redis 3. 准备一台云服务器,并安装RedisShake
RedisShake需要能访问目标端DCS Cluster集群,也需要绑定弹性公网IP,以便将 备份文件上传到云服务器。
建议使用华为云的弹性云服务器(ECS),且ECS与DCS Cluster集群实例配置相同 虚拟私有云、子网与安全组。
Redis-Shake工具可下载release版本,解压缩后即可使用。
说明
如果源端集群部署在数据中心内网,则需在内网服务器上安装RedisShake,并参考下述步 骤进行数据导出,然后将数据文件上传到云服务器。
4. 导出RDB文件
– 编辑redis-shake工具配置文件redis-shake.conf,补充源端与目标端所有 master节点的连接信息:
source.type = cluster
#如果无密码,本项不填
source.password_raw = {source_redis_password}
#源Cluster集群所有master节点的IP地址与端口,以分号分隔
source.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:
{masterN_port}
– 导出源Redis集群的RDB格式备份文件
./redis-shake -type dump -conf redis-shake.conf 执行日志中出现如下信息时导出备份文件完成:
execute runner[*run.CmdDump] finished!
5. 导入RDB文件
a. 将导出的RDB文件(含多个)上传到与云服务器上。云服务器与目标端DCS Cluster集群实例的网络连通。
b. 编辑RedisShake配置文件。
编辑redis-shake工具配置文件redis-shake.conf,补充源端与目标端所有 master节点的连接信息:
target.type = cluster
#如果无密码,本项不填
target.password_raw = {target_redis_password}
#目标Cluster集群所有master节点的IP地址与端口,以分号分隔
target.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:
数据迁移指南 4 自建 Redis 迁移至 DCS
{masterN_port}
#需要导入的rdb文件列表,用分号分隔
rdb.input = local_dump.0;local_dump.1;local_dump.2;local_dump.3
保存并退出文件编辑。
c. 使用如下命令导入rdb文件到目标Cluster集群:
./redis-shake -type restore -conf redis-shake.conf 执行日志中出现如下信息时导入备份文件完成:
Enabled http stats, set status (incr), and wait forever.
6. 迁移后验证
数据同步结束后,可使用redis-cli工具连接DCS Cluster集群,通过info命令查看 Keyspace中的Key数量,确认数据是否完整导入。
如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同 步。
数据迁移指南 4 自建 Redis 迁移至 DCS
5 DCS 实例间迁移
5.1 使用在线迁移 Redis 实例
场景描述
在满足源Redis和目标Redis的网络相通、源Redis已放通SYNC和PSYNC命令这两个前提 下,使用在线迁移的方式,将源Redis中的数据全量迁移或增量迁移到目标Redis中。
注意
● 如果源Redis禁用了SYNC和PSYNC命令,请务必放通后再执行在线迁移,否则迁移 失败,选择华为云Redis实例进行在线迁移时,会自动放开SYNC命令。
● 在线迁移不支持公网方式直接迁移。
● 进行在线迁移时,建议将源端实例的参数repl-timeout配置为300秒,client- output-buffer-limit配置为实例最大内存的20%。
对业务影响
在线迁移,相当于增加一个从节点并且会做一次全量同步,所以,建议在业务低峰期 迁移。
前提条件
● 在迁移之前,请先阅读迁移方案概览,选择正确的迁移方案,了解当前DCS支持 的在线迁移能力,选择适当的目标实例。
● 如果是单机/主备实例迁移到集群实例,由于目标Redis集群实例只有一个DB,请 先确保源Redis实例DB0以外的DB是否有数据,如果有,请先将数据转存到DB0,
否则会出现迁移失败。
步骤 1:获取源 Redis 的 IP(域名)和端口
获取准备迁移的源Redis实例的IP和端口,或者域名和端口。
数据迁移指南 5 DCS 实例间迁移
步骤 2:准备目标 Redis 实例
● 如果您还没有目标Redis,请先创建,创建操作,请参考购买Redis实例。
● 如果您已有目标Redis,则不需要重复创建,但在迁移之前,您需要清空实例数 据,清空操作请参考清空Redis实例数据。
如果没有清空,如果存在与源Redis实例相同的key,迁移后,会覆盖目标Redis实 例原来的数据。
步骤:3:检查网络
步骤1 检查源Redis、目标Redis、迁移任务资源所在VPC是否在同一个VPC内。
如果是,则执行步骤4:创建在线迁移任务;如果不是,执行步骤2。
步骤2 检查源Redis的VPC、目标Redis的VPC、迁移任务资源所在VPC的网络是否打通,确保 迁移任务的虚拟机资源能访问源Redis和目标Redis。
如果已打通,则执行步骤4:创建在线迁移任务;如果没打通,则执行步骤3。
步骤3 执行相应操作,打通网络。
● 当源Redis和目标Redis属于华为云同一Region,请参考VPC对等连接说明,查看 和创建对等连接,打通网络。
● 当源Redis和目标Redis属于华为云不同Region,请参考云连接,查看和创建云连 接,打通网络。
● 当源Redis和目标Redis属于不同的云厂商,请参考云专线打通网络。
----结束
步骤 4:创建在线迁移任务
步骤1 登录分布式缓存服务控制台。
步骤2 单击左侧菜单栏的“数据迁移”。页面显示迁移任务列表页面。
步骤3 单击右上角的“创建在线迁移任务”。
步骤4 设置迁移任务名称和描述。
步骤5 配置在线迁移任务虚拟机资源的VPC、子网和安全组。
创建在线迁移任务时,需要选择迁移虚拟机资源的VPC和安全组,并确保迁移资源能 访问源Redis和目标Redis实例。
----结束
步骤 5:配置在线迁移任务
步骤1 创建完在线迁移任务之后,在“在线迁移”的列表,单击“配置”,配置在线迁移的 源Redis、目标Redis等信息。
步骤2 选择迁移方法。
支持“全量迁移”和“全量迁移+增量迁移”两种,“全量迁移”和“全量迁移+增 量迁移”的功能及限制如表5-1所示。
数据迁移指南 5 DCS 实例间迁移
表5-1 在线迁移方法说明
迁移类型 描述
全量迁移 该模式为Redis的一次性迁移,适用于可中断业务的迁移场 景。全量迁移过程中,如果源Redis有数据更新,这部分更 新数据不会被迁移到目标Redis。
全量迁移+增量迁移 该模式为Redis的持续性迁移,适用于对业务中断敏感的迁 移场景。增量迁移阶段通过解析日志等技术, 持续保持源 Redis和目标端Redis的数据一致。
增量迁移,迁移任务会在迁移开始后,一直保持迁移中状 态,不会自动停止。需要您在合适时间,在“操作”列单击
“停止”,手动停止迁移。停止后,源端数据不会造成丢 失,只是目标端不再写入数据。增量迁移在传输链路网络稳 定情况下是秒级时延,具体的时延情况依赖于网络链路的传 输质量。
图5-1 选择迁移方法
步骤3 分别选择源Redis和目标Redis。
1. “源Redis”,支持“云服务Redis”和“自建Redis”,需要根据迁移场景选择数 据来源。
– 云服务Redis:华为云Redis实例,需要选择与迁移任务处于相同VPC的华为云 Redis服务。
– 自建Redis:华为云、其他云厂商、本地数据中心自行搭建的Redis,需要输 入Redis的连接地址。
2. 如果是密码访问模式实例,在输入连接实例密码后,您可以单击密码右侧的“测 试连接”,检查实例密码是否正确、网络是否连通。
步骤4 在“目标Redis实例”中,选择步骤2:准备目标Redis实例中创建的目标实例。
如果是密码访问模式实例,在输入连接实例密码后,您可以单击密码右侧的“测试连 接”,检查实例密码是否符合要求。
说明
当源Redis和目标Redis属于华为云不同Region,则打通网路后,目标Redis实例无论是自建Redis 或华为云Redis实例,在“目标Redis实例”区域,只能选中自建Redis,输入实例相关信息。
步骤5 确认迁移信息,然后单击“提交”,开始创建迁移任务。
可返回迁移任务列表中,观察对应的迁移任务的状态,迁移成功后,任务状态显示
“成功”。
数据迁移指南 5 DCS 实例间迁移
说明
如果是增量迁移,会一直保持迁移中状态,需要手动停止迁移。
如果出现迁移失败,可以单击迁移任务名称,进入迁移任务详情页面,查看“迁移日 志”。
----结束
迁移后验证
迁移完成后,请使用Redis-cli连接源Redis和目标Redis,确认数据的完整性。
1. 连接源Redis和目标Redis。
2. 输入info keyspace,查看keys参数和expires参数的值。
3. 对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一 致,则表示数据完整,迁移正常
注意:如果是全量迁移,迁移过程中源Redis更新的数据不会迁移到目标实例。
5.2 使用备份文件迁移不同 Region/Redis 版本的实例
场景描述
当前华为云DCS支持将其他云厂商Redis、自建Redis的数据通过DCS控制台迁移到华为 云Redis。
您需要先将其他云厂商Redis、自建Redis的数据备份下载到本地,然后将备份数据文件 上传到华为云与DCS Redis实例同一租户下相同Region下的OBS桶中,最后在DCS控制 台创建迁移任务,DCS从OBS桶中读取数据,将数据迁移到华为云Redis中。
上传OBS桶的文件支持.aof、.rdb、.zip、.tar.gz四种格式,您可以直接上传.aof和.rdb 文件,也可以将.aof和.rdb文件压缩成.zip或.tar.gz文件,然后将压缩后的文件上传到 OBS桶。
前提条件
● OBS桶所在区域必须跟Redis目标实例所在区域相同。例如,OBS桶和Redis所在的 区域都为“华北-北京一”。
● 上传的数据文件必须为.aof、.rdb、.zip、.tar.gz的格式。
● 如果是其他云厂商的单机版Redis和主备版Redis,您需要在备份页面创建备份任 务,然后下载备份文件。
● 如果是其他云厂商的集群版Redis,在备份页面创建备份后会有多个备份文件,每 个备份文件对应集群中的一个分片,需要下载所有的备份文件,然后逐个上传到 OBS桶。在迁移时,需要把所有分片的备份文件选中。
● 暂不支持导入自建Redis 5.0生成的rdb备份文件,如果是自建Redis 3.0和Redis 4.0,可以使用Redis-cli工具导出.rdb备份文件。其他云厂商Redis只能通过各云的 备份页面创建备份任务导出获取,不能通过Redis-cli工具使用命令导出。
数据迁移指南 5 DCS 实例间迁移
● Cluster集群仅支持导入.rdb备份文件,不支持.aof备份文件。
步骤 1:准备目标 Redis 实例
● 如果您还没有华为云Redis,请先创建,创建操作,请参考购买Redis实例。
● 如果您已有华为云Redis,则不需要重复创建,但在迁移之前,您需要清空实例数 据,清空操作,请参考清空Redis实例数据。
当前支持迁移到Redis 3.0、Redis 4.0和Redis 5.0,您可以根据实际情况选择。
步骤 2:创建 OBS 桶并上传备份文件
步骤1 通过OBS Browser+客户端,上传备份数据文件到OBS桶。
如果上传的备份文件较小,且小于5GB,请执行步骤2,通过OBS控制台上传即可;
如果上传的备份文件大于5GB,请按照OBS服务提供的超过5GB如何上传操作指导执 行。
步骤2 通过OBS控制台,上传备份数据文件到OBS桶。
如果上传的备份文件较小,且小于5GB,请执如下步骤:
1. 创建OBS桶。
在创建过程中,以下两个参数请按要求设置,其他详细的创建步骤,请参考《对 象存储服务 控制台用户指南》的“创建桶”章节。
a. 选择“区域”。
OBS桶所在区域必须跟Redis目标实例所在区域相同。
b. 设置“存储类别”,当前支持“标准存储”、“低频访问存储”和“归档存 储”。
请不要选择“归档存储”,否则会导致备份文件迁移失败。
c. 设置完成后,单击“立即创建”,等待OBS桶创建完成。
2. 在OBS管理控制台的桶列表中,单击步骤2.1中的桶名称,进入“概览”页面。
3. 在左侧导航栏,单击“对象”。
4. 在“对象”页签下,单击“上传对象”,系统弹出“上传对象”对话框。
5. 指定对象的存储类别。
请不要选择“归档存储”,否则会导致备份文件迁移失败。
6. 上传对象。
您可以拖拽本地文件或文件夹至“上传对象”区域框内添加待上传的文件,也可 以通过单击“上传对象”区域框内的“添加文件”,选择本地文件添加。
单次最多支持100个文件同时上传,总大小不超过5GB。
数据迁移指南 5 DCS 实例间迁移