• 沒有找到結果。

使用Redis-cli迁移自建Redis(AOF文件)_分布式缓存服务 DCS_数据迁移指南_自建Redis迁移至DCS_华为云

N/A
N/A
Protected

Academic year: 2022

Share "使用Redis-cli迁移自建Redis(AOF文件)_分布式缓存服务 DCS_数据迁移指南_自建Redis迁移至DCS_华为云"

Copied!
57
0
0

加載中.... (立即查看全文)

全文

(1)

分布式缓存服务

数据迁移指南

文档版本 01

发布日期 2021-12-20

(2)

版权所有 © 华为技术有限公司 2021。 保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。

商标声明

和其他华为商标均为华为技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

(3)

目 录

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

数据迁移指南 目 录

(4)

8.9 是否支持 Memcached 和 Redis 之间实例数据的迁移?...52 8.10 在线迁移实例源端报“Disconnectiing timeout slave”和“overcoming of output buffer limits”... 53

数据迁移指南 目 录

(5)

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 概述

(6)

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 概述

(7)

2 迁移流程介绍

2-1 迁移流程示意图

评估

获取当前待迁移的缓存数据信息(可参考缓存数据信息记录以下信息),包括:

● 实例数量

● 各实例配置的数据库数量

● 各数据库的key数量

● 业务用到的数据库

● 各实例数据占用空间

● Redis版本

● Redis实例配置(单机/主备/集群)

● 业务与各实例的连接关系

根据获取到的信息规划DCS缓存实例,包括:

● 申请缓存实例数量

● 各缓存实例的规格、类型(单机/主备/集群)

● 缓存实例与业务所属网络规划(VPC/子网/安全组)

数据迁移指南 2 迁移流程介绍

(8)

说明

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 迁移流程介绍

(9)

备份

在迁移前,需要先行备份,包括但不限于缓存数据、Redis配置文件,用于应急。

迁移

在完成一到两轮的迁移演练,并根据演练过程中发现的问题进行优化后,正式开始数 据迁移。

迁移过程应该细化到每一步可执行的步骤,有明确的开始与结束确认动作。

数据验证

缓存数据的验证可以包括以下几方面:

● 各数据库的key分布是否与原来或者迁移预期一致

● 关键key的检查

● key的过期时间检查

● 实例是否能够正常备份和恢复

业务切换

1. 当缓存数据完成迁移,且验证无误后,业务可以正式切换缓存数据的连接,恢复 对外。

2. 如果涉及到缓存数据库编号的变化,业务还需修改编号的选择配置。

3. 如果业务整体由数据中心或其他云厂商迁移到华为云,业务和缓存数据的迁移可 并行。

业务验证

业务切换后建议验证内容包含以下:

1. 业务应用与DCS缓存实例的连通。

2. 通过业务操作对缓存数据的增删改查。

3. 如果条件满足,进行压测,确认性能满足业务峰值压力。

回退

当遇到演练中没有及时发现的问题,导致数据迁移后无法供业务使用,且短期无法解 决,则涉及到业务回退。

由于源Redis数据仍然存在,因此只需业务完成回退,重新接入源Redis实例即可。

在完成回退后,可继续从演练甚至准备阶段重新开始,解决问题。

迁移信息收集表

评估和准备阶段收集的信息填写参考下表:

数据迁移指南 2 迁移流程介绍

(10)

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 迁移流程介绍

(11)

迁移源 信息项 说明

网络配置 VPC 提前规划VPC,确保应用服务、DCS缓存实例等处 于相同VPC中。

子网 -

安全组或白名单 由于Redis 3.0和Redis 4.0/5.0/企业版Redis 6.0实 例部署模式不一样,控制访问方式也不一样,需 要制定相应的安全组或白名单规则,确保网络连 通。具体请根据目标Redis实例参考配置安全组或 者配置白名单

... ... 其他配置信息。

数据迁移指南 2 迁移流程介绍

(12)

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 迁移方案概览

(13)

工具/命令/服 务

特点 说明

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 迁移方案概览

(14)

迁移场景 工具 迁移案例 迁移说明 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 迁移方案概览

(15)

迁移场景 工具 迁移案例 迁移说明 DCS实例迁

移下云 DCS控制台界

面一键式迁移 DCS实例迁移下云 DCS控制台支持 在线迁移方式迁 移到自建Redis。

数据迁移指南 3 迁移方案概览

(16)

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

(17)

步骤 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

(18)

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

(19)

说明

如果是增量迁移,会一直保持迁移中状态,需要手动停止迁移。

如果出现迁移失败,可以单击迁移任务名称,进入迁移任务详情页面,查看“迁移日 志”。

----结束

迁移后验证

迁移完成后,请使用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

(20)

● 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

(21)

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

(22)

步骤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

(23)

说明

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

(24)

步骤 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

(25)

步骤 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

(26)

说明

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

(27)

注意参数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

(28)

包括在本地数据中心自建、华为云或其他公有云上自建。自建的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

(29)

说明

该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

(30)

本文以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

(31)

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

(32)

在命令返回的结果中,获取所有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

(33)

{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

(34)

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 实例间迁移

(35)

步骤 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 实例间迁移

(36)

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 实例间迁移

(37)

说明

如果是增量迁移,会一直保持迁移中状态,需要手动停止迁移。

如果出现迁移失败,可以单击迁移任务名称,进入迁移任务详情页面,查看“迁移日 志”。

----结束

迁移后验证

迁移完成后,请使用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 实例间迁移

(38)

● 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 实例间迁移

數據

表 2-1 迁移信息收集 迁移源 信息项 说明 源Redis (列出所有 待迁移的实 例) 源Redis实例的IP地址 -Redis访问密码 (如有)  -总数据量大小 info memory命令查询得到,参考 used_memory_human的值。 用于评估迁移方案、DCS缓存实例规格、ECS可用 磁盘空间等是否满足,以及预估迁移耗时(业务 中断时间)。 不为空的数据库 编号 info keyspace命令查询得到。 用于确认迁移是否涉及多数据库,非AOF文件方 式迁移,部分开源工具可能须逐库处理导出和
表 4-1 在线迁移方法说明 迁移类型 描述 全量迁移 该模式为Redis的一次性迁移,适用于可中断业务的迁移场 景。全量迁移过程中,如果源Redis有数据更新,这部分更 新数据不会被迁移到目标Redis。 全量迁移+增量迁移 该模式为Redis的持续性迁移,适用于对业务中断敏感的迁 移场景。增量迁移阶段通过解析日志等技术, 持续保持源 Redis和目标端Redis的数据一致。 增量迁移,迁移任务会在迁移开始后,一直保持迁移中状 态,不会自动停止。需要您在合适时间,在“操作”列单击 “停止”,手动停止迁移。
表 5-1 在线迁移方法说明 迁移类型 描述 全量迁移 该模式为Redis的一次性迁移,适用于可中断业务的迁移场 景。全量迁移过程中,如果源Redis有数据更新,这部分更 新数据不会被迁移到目标Redis。 全量迁移+增量迁移 该模式为Redis的持续性迁移,适用于对业务中断敏感的迁 移场景。增量迁移阶段通过解析日志等技术, 持续保持源 Redis和目标端Redis的数据一致。 增量迁移,迁移任务会在迁移开始后,一直保持迁移中状 态,不会自动停止。需要您在合适时间,在“操作”列单击 “停止”,手动停止迁移。
表 6-1 在线迁移方法说明 迁移类型 描述 全量迁移 该模式为Redis的一次性迁移,适用于可中断业务的迁移场 景。全量迁移过程中,如果源Redis有数据更新,这部分更 新数据不会被迁移到目标Redis。 全量迁移+增量迁移 该模式为Redis的持续性迁移,适用于对业务中断敏感的迁 移场景。增量迁移阶段通过解析日志等技术, 持续保持源 Redis和目标端Redis的数据一致。 增量迁移,迁移任务会在迁移开始后,一直保持迁移中状 态,不会自动停止。需要您在合适时间,在“操作”列单击 “停止”,手动停止迁移。

參考文獻

相關文件

「電子郵件( mydlink 帳號名稱)」請輸入您的 Email 地址,此 Email 地址就是未來登入 mydlink

(1) 雇主應透過多元管道(如張貼海報、發送簡訊、建立 Line

The research proposes a data oriented approach for choosing the type of clustering algorithms and a new cluster validity index for choosing their input parameters.. The

™ 不過, 如果 DHCP 用戶端不接受 DHCP 伺服器 所提供的參數, 就會廣播一個 DHCP Decline (拒絕) 封包, 告知伺服器不接受所建議的 IP位 址 (或租用期限…等)。然後回到第一階段, 再度

• 內建元件庫(Common Libraries)則存放了 Flash 提供 的元件,讓使用者自由使用。Flash 內建的元件庫共有 3

对于二元函数的自变量,我

Since all nodes in a cluster need to send data to the cluster head, we use the idea of minimum spanning tree (MST for short) to shorten the total transmission distance to reduce

虽然人类为了对付我已经采取了一些 措施,如加强对施工工地和拆迁工地的扬