• 沒有找到結果。

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工具配置文件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 实例间迁移