华为云用户手册

  • 在线迁移 在线迁移主要适用于自建Redis Cluster集群迁移到DCS Cluster集群的场景,且两端集群实例能够网络连通,或者有一台中转服务器能够连通两端集群实例。 部署在其他云厂商Redis服务上的Cluster集群数据,由于SYNC、PSYNC命令被云厂商禁用,暂不支持在线迁移。 在DCS控制台创建Cluster集群实例。 注意集群的内存规格不能小于源端Cluster集群。 准备一台云服务器,并安装RedisShake RedisShake既能访问源端Cluster集群,也需要能访问目标端DCS Cluster集群,需要绑定弹性公网IP。 建议使用华为云的弹性云服务器(ECS),且ECS与DCS Cluster集群实例配置相同虚拟私有云、子网与安全组。如果源端Cluster集群在本地或者其他云厂商的服务器上自建,则需要允许被公网访问。 Redis-Shake工具可下载release版本,解压缩后即可使用。(此处以下载Redis-Shake v2.1.2为例,您可以根据实际需要选择其他Redis-Shake版本。) 获取源集群和目标集群的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 编辑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} 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} 保存并退出文件编辑。 在线迁移,同步数据 使用如下命令同步源Redis集群和目标Redis集群数据: ./redis-shake -type sync -conf redis-shake.conf 执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段: sync rdb done. 执行日志出现如下信息时,代表增量同步无新增内容,可手动停止同步(Ctrl + C): sync: +forwardCommands=0 +filterCommands=0 +writeBytes=0 图1 redis-shake在线迁移示意图 迁移后验证 数据同步结束后,可使用redis-cli工具连接DCS Cluster集群,通过info命令查看Keyspace中的Key数量,确认数据是否完整导入。 如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同步。 清理RedisShake配置文件。
  • 离线迁移(备份文件导入) 与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移。 在DCS控制台创建Cluster集群实例。 注意集群的内存规格不能小于源端Cluster集群。 分别获取源端与目标端Cluster集群的Master节点IP地址与端口。 redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes 在命令返回的结果中,获取所有master节点的IP端口,如下如所示: 安装了Redis后,自带redis-cli命令。如CentOS下安装Redis:yum install redis 准备一台云服务器,并安装RedisShake RedisShake需要能访问目标端DCS Cluster集群,也需要绑定弹性公网IP,以便将备份文件上传到云服务器。 建议使用华为云的弹性云服务器(ECS),且ECS与DCS Cluster集群实例配置相同虚拟私有云、子网与安全组。 Redis-Shake工具可下载release版本,解压缩后即可使用。(此处以下载Redis-Shake v2.1.2为例) 如果源端集群部署在数据中心内网,则需在内网服务器上安装RedisShake,并参考下述步骤进行数据导出,然后将数据文件上传到云服务器。 导出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! 导入RDB文件 将导出的RDB文件(含多个)上传到与云服务器上。云服务器与目标端DCS Cluster集群实例的网络连通。 编辑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}:{masterN_port} #需要导入的rdb文件列表,用分号分隔 rdb.input = {local_dump.0};{local_dump.1};{local_dump.2};{local_dump.3} 保存并退出文件编辑。 使用如下命令导入rdb文件到目标Cluster集群: ./redis-shake -type restore -conf redis-shake.conf 执行日志中出现如下信息时导入备份文件完成: Enabled http stats, set status (incr), and wait forever. 迁移后验证 数据同步结束后,可使用redis-cli工具连接DCS Cluster集群,通过info命令查看Keyspace中的Key数量,确认数据是否完整导入。 如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同步。
  • 离线迁移(备份文件导入) 与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移。 在DCS控制台创建Cluster集群实例。 注意集群的内存规格不能小于源端Cluster集群。 分别获取源端与目标端Cluster集群的Master节点IP地址与端口。 redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes 在命令返回的结果中,获取所有master节点的IP端口,如下如所示: 安装了Redis后,自带redis-cli命令。如CentOS下安装Redis:yum install redis 准备一台云服务器,并安装RedisShake RedisShake需要能访问目标端DCS Cluster集群,也需要绑定弹性公网IP,以便将备份文件上传到云服务器。 建议使用华为云的弹性云服务器(ECS),且ECS与DCS Cluster集群实例配置相同虚拟私有云、子网与安全组。 Redis-Shake工具可下载release版本,解压缩后即可使用。(此处以下载Redis-Shake v2.1.2为例,您可以根据实际需要选择其他Redis-Shake版本。) 如果源端集群部署在数据中心内网,则需在内网服务器上安装RedisShake,并参考下述步骤进行数据导出,然后将数据文件上传到云服务器。 导出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! 如果源端Redis由于SYNC、PSYNC命令被云厂商禁用无法使用以上方法导出备份文件时,可以通过源端控制台导出,或联系源端技术支持。 导入RDB文件 将导出的RDB文件(含多个)上传到与云服务器上。云服务器与目标端DCS Cluster集群实例的网络连通。 编辑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}:{masterN_port} #需要导入的rdb文件列表,用分号分隔 rdb.input = {local_dump.0};{local_dump.1};{local_dump.2};{local_dump.3} 保存并退出文件编辑。 使用如下命令导入rdb文件到目标Cluster集群: ./redis-shake -type restore -conf redis-shake.conf 执行日志中出现如下信息时导入备份文件完成: Enabled http stats, set status (incr), and wait forever. 迁移后验证 数据同步结束后,可使用redis-cli工具连接DCS Cluster集群,通过info命令查看Keyspace中的Key数量,确认数据是否完整导入。 如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同步。
  • 测试命令 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connection} -d {datasize} -t {command} 参数参考值:-c {connect_number}:1000,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。
  • 测试结果 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 8G X86 1000 107657.69 20 23 27 10000 72750.55 362 366 371 32G X86 1000 121088.83 9 12 12 10000 79235.53 203 204 267 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 8G X86 1000 119350.25 6 24 27 10000 77574.7 152 358 365 32G X86 1000 124650.98 16 17 17 10000 81991.41 195 196 199 Redis 3.0实例暂不支持ARM CPU类型实例,仅提供X86类型的实例测试结果。
  • 测试步骤 创建Redis缓存实例。 创建3台弹性云服务器(ECS),ECS选择与实例相同可用区、VPC、子网和安全组。 如果是测试单机或主备实例,创建1台ECS即可。 在每台ECS上安装memtier_benchmark。安装步骤参考下载与安装工具。 每台ECS上执行测试命令。 memtier_benchmark -s {IP} -n {nreqs} -c {connect_number} -t 4 -d {datasize} 如果实例类型为cluster集群,则命令为memtier_benchmark --cluster-mode -s {IP} -n {nreqs} -c {connect_number} -t 4 -d {datasize} 参数参考值:-c {connect_number}:200,-n {nreqs}:10000000,-d {datasize}:32。 -s表示实例的域名连接地址或IP地址。 -t表示基准测试使用的线程数量 -c表示客户端连接数 -d表示单条数据大小,单位byte -n表示测试包数量 不断调整客户端连接数,执行4,得到每秒最大操作数。 取3台测试ECS得到的每秒操作数总和,即为对应规格的性能数据。 如果测试Redis集群,建议每台测试ECS各开启两个benchmark客户端。
  • 下载与安装工具 以操作系统为CentOS 8.0为例进行安装。 准备工作。 安装编译所需的工具。 yum install -y autoconf yum install -y automake yum install -y make yum install -y gcc-c++ yum install -y git 启用PowerTools存储库的方法。 dnf config-manager --set-enabled PowerTools 安装需要的依赖库。 yum install -y pcre-devel yum install -y zlib-devel yum install -y libmemcached-devel yum install -y openssl-devel 安装libevent库。 yum install -y libevent-devel 下载、编译、安装memtier_benchmark的库。 根目录下创建文件夹,用于下载memtier_benchmark。 mkdir /env 下载memtier_benchmark源码。 cd /env git clone https://github.com/RedisLabs/memtier_benchmark.git 进入源码目录。 cd memtier_benchmark 编译生成可执行文件memtier_benchmark。 autoreconf -ivf ./configure make 将工具安装到系统中。 make install 运行帮助命令查看是否安装成功。 memtier_benchmark --help
  • 步骤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文件 建议选择业务量较少的时间段进行迁移。 导出Redis源生集群的数据时,需要针对集群的每个节点分别导出数据,然后逐一导入。 使用如下命令导出RDB文件: redis-cli -h {source_redis_address} -p 6379 -a {password} --rdb {output.rdb} 执行命令后回显"Transfer finished with success.",表示文件导出成功。
  • 迁移介绍 Redis-cli是Redis自带的一个命令行工具,安装Redis后即可直接使用Redis-cli工具。 Redis-cli提供了RDB文件导出功能,如果Redis服务不支持获取AOF文件,可以尝试通过Redis-cli获取RDB文件。然后再通过其他工具(如Redis-Shake)导入到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/6.0版本实例,不支持SYNC,不能使用此命令导出为RDB文件,主备实例如需本地备份,请从控制台的备份恢复功能模块中下载RDB文件。
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 QPS:即Query Per Second,表示每秒处理的读写操作数,单位是次/秒。 平均/最大时延:操作的平均/最大延迟时间,单位为毫秒(ms)。 x%延迟:指x%操作的延迟时间,单位为毫秒(ms)。例如该指标的值为10ms,99.99%延迟表示99.99%的请求可以在10ms内被处理。 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 95%左右延迟(ms) 99.99%延迟(ms) 最大时延(ms) 64G X86 3000 1,323,935.00 3.3 9.4 220 5000 1,373,756.00 5.3 13 240 10000 1,332,074.00 11 26 230 80000 946,032.00 110 460 6800 64G ARM 3000 837,864.92‬ 5.8 16 78 5000 763,609.69‬ 10 29 240 10000 703,808.39 20 47 250 80000 625,841.69 170 410 940 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 95%左右延迟(ms) 99.99%延迟(ms) 最大时延(ms) 64G X86 3000 1,366,153.00 3.3 9.3 230 5000 1,458,451.00 5.1 13 220 10000 1,376,399‬.00 11 29 440 80000 953,837‬.00 120 1300 2200 64G ARM 3000 764,114.55 6.1 17 100 5000 765,187.74 10 27 230 10000 731,310.95 20 47 250 80000 631,373.33 170 1300 1900
  • 测试结果 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 64G X86 1000 534960.92 24 34 209 10000 511362.67 108 171 315 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 64G X86 1000 584669.15 23 31 82 10000 533178.04 144 184 370 Redis 3.0实例暂不支持ARM CPU类型实例,仅提供X86类型的实例测试结果。
  • 测试命令 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connection} -d {datasize} -t {command} 参数参考值:-c {connect_number}:1000,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 QPS:即Query Per Second,表示每秒处理的读写操作数,单位是次/秒。 平均/最大时延:操作的平均/最大延迟时间,单位为毫秒(ms)。 x%延迟:指x%操作的延迟时间,单位为毫秒(ms)。例如该指标的值为10ms,99.99%延迟表示99.99%的请求可以在10ms内被处理。 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 32G X86 1000 371780.2‬ 5.6 6.3 44 10000 256073.11 90 220 460 32G ARM 1000 317053.78 17 34 230 10000 248832.33 410 490 750 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 32G X86 1000 427000.04 5.0 5.3 78 10000 302159.03‬ 63 220 460 32G ARM 1000 421402.06 13 14 65 10000 309359.18 180 260 500
  • redis-cli常用命令举例 连接实例: ./redis-cli -h {IP} -p 6379 指定连接某个DB: ./redis-cli -h {IP} -p 6379 -n 10 连接cluster集群实例: ./redis-cli -h {IP} -p 6379 -c 测试时延(原理是发ping命令): ./redis-cli -h {IP} -p 6379 --latency 执行scan扫描匹配指定模式的key: ./redis-cli -h {IP} -p 6379 --scan --pattern '*:12345*'
  • redis-benchmark常用命令举例 单机、主备、读写分离和proxy集群的测试命令: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} -t {command} cluster集群测试命令: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} --cluster -t {command} 测试短连接: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} -k 0 -t {command} 测试空闲连接: ./redis-benchmark -h {IP或域名} -p 6379 -a {pwd} -c {clients} -I
  • 获取redis-cli和redis-benchmark 创建弹性云服务器(ECS),根据不同的操作系统直接安装Redis-server,下面以ubuntu和CentOS系统为例: 直接编译安装Redis或者使用yum,apt安装Redis-server,安装Redis-Server的同时,会同步安装benchmark。 ubuntu系统 sudo apt update sudo apt install redis-server CentOS系统 sudo yum install epel-release sudo yum update sudo yum -y install redis 也可以直接下载安装包,进行解压和编译,以下载redis-6.0.9版本为例: 下载redis-6.0.9客户端。 wget http://download.redis.io/releases/redis-6.0.9.tar.gz 解压客户端压缩包。 tar xzf redis-6.0.9.tar.gz 进入redis-6.0.9的src目录下。 cd redis-6.0.9/src 编译源码。 make 编译完成后,工具一般在redis-x.x.x的src目录下。
  • 测试命令 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connection} -d {datasize} -t {command} 参数参考值:-c {connect_number}:500,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32,-t {command}:set。
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 QPS:即Query Per Second,表示每秒处理的读写操作数,单位是次/秒。 平均/最大时延:操作的平均/最大延迟时间,单位为毫秒(ms)。 x%延迟:指x%操作的延迟时间,单位为毫秒(ms)。例如该指标的值为10ms,99.99%延迟表示99.99%的请求可以在10ms内被处理。 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 平均时延(ms) 8G X86 500 132068.98 11 18 205 3.298 10000 82386.58 171 178 263 69.275 8G ARM 500 94811.89 10 12 13 3.476 10000 61264.37 340 350 351 83.848 32G X86 500 131385.33 9.5 16 17 3.333 10000 82275.41 157 162.18 162.43 62.105 32G ARM 500 117553.02 8 21 22 3.875 10000 76001.7 175 386 387 99.362 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 平均时延(ms) 8G X86 500 138652.02 7 11 12 2.117 10000 82710.94 123.7 281.6 282.9 61.078 8G ARM 500 95432.59 8.8 10 214 3.186 10000 60984.16 217 337.15 337.92 83.321 32G X86 500 139113.02 6.6 10 11 2.119 10000 82489.36 100 105.66 106 60.968 32G ARM 500 139041.45 6 10 11 2.487 10000 81563.41 141 149 150 63
  • 步骤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”进行关闭。
  • 前提条件 已在华为云创建Redis实例。 已在华为云创建用于运行Redis-shake的弹性云服务器(ECS)。 创建的ECS需要选择与Redis实例相同的VPC,并且需要绑定弹性公网IP。 Rump模式不支持增量数据迁移,建议您先停止源端Redis的写入再进行迁移,防止数据不一致。 该方案配置只支持同DB映射迁移,异DB映射迁移该方案配置不适用。 源端为多DB使用(有非DB0的DB使用),华为云DCS为Proxy集群时,DCS需要开启多DB模式,否则会迁移失败(单DB0的Proxy集群不支持select命令)。 源端为多DB使用(有非DB0的DB使用),华为云DCS为Cluster集群时,该方案不支持(DCS Cluster集群只支持DB0模式)。
  • 操作步骤 分别在华为云ECS和源端转发服务器上安装Nginx,本文以ECS操作系统为Centos7.x为例进行安装,不同操作系统命令稍有不同。 执行以下命令,添加Nginx到yum源。 sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 添加完之后,执行以下命令,查看是否已经添加成功。 yum search nginx 添加成功之后,执行以下命令,安装Nginx。 sudo yum install -y nginx 执行以下命令安装stream模块。 yum install nginx-mod-stream --skip-broken 启动Nginx并设置为开机自动运行。 sudo systemctl start nginx.service sudo systemctl enable nginx.service 在本地浏览器中输入服务器地址(ECS公网IP地址),查看安装是否成功。 如果出现下面页面,则表示安装成功。 在源端Redis添加源端转发服务器的白名单。 在源端转发服务器配置安全组。 获取华为云ECS的公网IP地址。 配置源端转发服务器安全组入方向,添加华为云ECS的公网IP地址,并放开来自华为云ECS访问请求的端口(以6379为例)。 配置源端转发服务器的Nginx转发配置。 登录Linux源端转发服务器,执行命令打开并修改配置文件。 cd /etc/nginx vi nginx.conf 转发配置示例如下: stream { server { listen 6379; proxy_pass {source_instance_address}:{port}; } } 其中,6379为源端转发服务器本机监听端口,{source_instance_address}和{port}为源端Redis实例的连接地址和端口。 配置目的:通过访问源端转发服务器本机监听端口6379,访问源端Redis。 注意:以上配置必须配置在如下图所示的位置。 图2 配置位置要求 重启Nginx服务。 service nginx restart 验证启动是否成功。 netstat -an|grep 6379 端口在监听状态,Nginx启动成功。 图3 验证结果 配置华为云ECS的Nginx转发配置。 登录Linux华为云ECS,执行命令打开并修改配置文件。 cd /etc/nginx vi nginx.conf 配置示例如下: stream { server { listen 6666; proxy_pass {source_ecs_address}:6379; } } 其中,6666为华为云ECS本机监听端口,{source_ecs_address}为源端转发服务器公网IP地址,6379为源端转发服务器Nginx的监听端口。 配置目的:通过访问华为云ECS本机监听端口6666,访问源端转发服务器。 注意:以上配置必须配置在如下图所示的位置。 图4 配置位置要求 重启Nginx服务。 service nginx restart 验证启动是否成功。 netstat -an|grep 6666 端口在监听状态,Nginx启动成功。 图5 验证结果 在华为云ECS执行以下命令测试6666端口的网络连接。 redis-cli -h {target_ecs_address} -p 6666 -a {password} 其中,{target_ecs_address}为华为云ECS公网IP地址,6666为华为云ECS监听端口,{password}为源端Redis密码,如无密码可不填。 图6 连接示例 准备迁移工具Redis-shake。 登录华为云ECS。 在华为云ECS中执行以下命令下载Redis-shake,本文以下载2.0.3版本为例进行说明。您可以根据实际需要下载其他Redis-Shake版本。 wget https://github.com/tair-opensource/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz 执行命令解压Redis-shake文件。 tar -xvf redis-shake-v2.0.3.tar.gz 配置Redis-shake的配置文件。 执行命令进入解压后的目录。 cd redis-shake-v2.0.3 修改配置文件redis-shake.conf。 vim redis-shake.conf 修改源端Redis信息配置: source.type 源端redis实例类型,单机、主备、proxy集群实例都选择standalone,cluster实例选择cluster。 source.address 华为云ECS公网IP地址和映射源端转发服务器的端口(华为云ECS监听端口6666),用英文冒号隔开。 source.password_raw 源端待迁移Redis实例的密码,如未设置密码,无需填写。 修改目标端DCS信息配置: target.type 华为云Redis实例类型,单机、主备、proxy集群实例都选择standalone,cluster实例选择cluster。 target.address 华为云Redis实例的连接地址和端口,用英文冒号隔开。 target.password_raw 华为云Redis实例的密码,如未设置密码,无需填写。 按下Esc键退出编辑模式,输入:wq!按回车键保存配置并退出编辑界面。 执行命令启动Redis-shake并使用rump(在线全量)模式开始数据迁移。 ./redis-shake.linux -conf redis-shake.conf -type rump 图7 迁移过程 图8 迁移结果 迁移完成后,请使用redis-cli工具连接源Redis和目标Redis,确认数据的完整性。 分别连接源Redis和目标Redis。 连接操作请参考redis-cli连接。 输入info keyspace,查看keys参数和expires参数的值。 对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一致,表示数据完整,迁移正常。 删除Redis-shake配置文件。
  • 步骤1:安装Rump 下载Rump的release版本。 以64位Linux操作系统为例,执行以下命令: wget https://github.com/stickermule/rump/releases/download/0.0.3/rump-0.0.3-linux-amd64; 解压缩后,添加可执行权限。 mv rump-0.0.3-linux-amd64 rump; chmod +x rump;
  • 迁移原理 Rump使用SCAN来获取keys,用DUMP/RESTORE来get/set值。 SCAN是一个时间复杂度O(1) 的命令,可以快速获得所有的key。DUMP/RESTORE使读/写值独立于关键工作。 以下是Rump的主要特性: 通过SCAN非阻塞的获取key,避免KEYS命令造成Redis服务阻塞。 支持所有数据类型的迁移。 把SCAN和DUMP/RESTORE操作放在同一个管道中,利用pipeline提升数据迁移过程中的网络效率。 不使用任何临时文件,不占用磁盘空间。 使用带缓冲区的channels,提升源服务器的性能。 Rump工具不支持迁移到DCS集群实例。请改用其他工具,如redis-shake或Redis-cli。 Redis实例的密码不能包含#@:等特殊字符,避免迁移命令解析出错。 建议停业务迁移。迁移过程中如果不断写入新的数据,可能会丢失少量Key。
  • 步骤2:迁移数据 rump -from {source_redis_address} -to {target_redis_address} 参数/选项说明: {source_redis_address} 源Redis实例地址,格式为:redis://[user:password@]host:port/db,中括号部分为可选项,实例设置了密码访问时需要填写密码,格式遵循RFC 3986规范。注意用户名可为空,但冒号不能省略,例如redis://:mypassword@192.168.0.45:6379/1。 db为数据库编号,不传则默认为0。 {target_redis_address} 目标Redis实例地址,格式与from相同。 以下示例表示将本地Redis数据库的第0个DB的数据迁移到192.168.0.153这台Redis数据库中,其中密码以*替代显示。 [root@ecs ~]# ./rump -from redis://127.0.0.1:6379/0 -to redis://:******@192.168.0.153:6379/0 .Sync done. [root@ecs ~]#
  • 步骤3:创建迁移任务 登录分布式缓存服务控制台。 单击左侧菜单栏的“数据迁移”。页面显示迁移任务列表页面。 单击右上角的“创建备份导入任务”。 设置迁移任务名称和描述。 “源Redis”区域中,“数据来源”选择“OBS桶”,在“OBS桶名”中选择已上传备份文件的OBS桶。 根据需要选择“源DB”,您可以指定源端备份文件某一个DB中的数据,例如输入5时,则只迁移DB5中的数据;无需指定DB时,请保持置空,即迁移全部DB。 选择“是否多DB Proxy集群”,只有当源Redis数据为DCS Proxy集群实例,且开启了多DB(Proxy实例multi-db参数值为yes)时选择。 单击“添加备份文件”,选择需要迁移的备份文件。 图2 备份文件导入 图3 备份文件导入 在“目标Redis”区域,选择步骤1:准备目标Redis实例中准备的“目标Redis实例”。 如果目标Redis是密码访问模式,请输入密码后,单击“测试连接”,检查密码是否正确。免密访问的实例,请直接单击“测试连接”。 根据需要选择“目标DB”,您可以指定迁移数据到目标Redis的某一个DB中,例如输入5时,则迁移到目标Redis的DB5;不填表示不指定,默认迁移到与源端相同的DB中。 当源端为多DB,目标端为单DB的DCS实例时(单DB的实例只有DB0),需要源端的所有数据都在DB0,或者指定仅迁移源端某一DB中的数据并将目标端DB指定为0,否则会迁移失败。 DCS Redis的DB数请参见Redis实例是否支持多DB方式?。 单击“立即创建”。 确认迁移信息,然后单击“提交”,开始创建迁移任务。 可返回迁移任务列表中,观察对应的迁移任务的状态,迁移成功后,任务状态显示“成功”。
  • 步骤2:创建OBS桶并上传备份文件 通过OBS Browser+客户端,上传备份数据文件到OBS桶。 如果上传的备份文件较小,且小于5GB,请执行2,通过OBS控制台上传即可; 如果上传的备份文件大于5GB,请按照OBS服务提供的超过5GB如何上传操作指导执行。 通过OBS控制台,上传备份数据文件到OBS桶。 如果上传的备份文件较小,且小于5GB,请执如下步骤: 创建OBS桶。 在创建过程中,以下两个参数请按要求设置,其他详细的创建步骤,请参考《对象存储服务用户指南》的“创建桶”章节。 选择“区域”。 OBS桶所在区域必须跟Redis目标实例所在区域相同。 设置“存储类别”,当前支持“标准存储”、“低频访问存储”和“归档存储”。 请不要选择“归档存储”,否则会导致备份文件迁移失败。 设置完成后,单击“立即创建”,等待OBS桶创建完成。 在OBS管理控制台的桶列表中,单击2.a中的桶名称,进入“概览”页面。 在左侧导航栏,单击“对象”。 在“对象”页签下,单击“上传对象”,系统弹出“上传对象”对话框。 指定对象的存储类别。 请不要选择“归档存储”,否则会导致备份文件迁移失败。 上传对象。 您可以拖拽本地文件或文件夹至“上传对象”区域框内添加待上传的文件,也可以通过单击“上传对象”区域框内的“添加文件”,选择本地文件添加。 单次最多支持100个文件同时上传,总大小不超过5GB。 图1 批量上传对象 可选:勾选“KMS加密”,用于加密上传文件。 单击“上传”。
  • 场景描述 当前华为云DCS支持将其他云厂商Redis、自建Redis的数据通过DCS控制台迁移到华为云DCS的Redis。 您需要先将其他云厂商Redis、自建Redis的数据备份下载到本地,然后将备份数据文件上传到华为云与DCS Redis实例同一租户下相同Region下的OBS桶中,最后在DCS控制台创建迁移任务,DCS从OBS桶中读取数据,将数据迁移到DCS的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桶。在迁移时,需要把所有分片的备份文件选中。
  • 前提条件 OBS桶所在区域必须跟Redis目标实例所在区域相同。例如,OBS桶和Redis所在的区域都为“华北-北京一”。 上传的数据文件必须为.aof、.rdb、.zip、.tar.gz的格式。 如果是其他云厂商的单机版Redis和主备版Redis,您需要在备份页面创建备份任务,然后下载备份文件。 如果是其他云厂商的集群版Redis,在备份页面创建备份后会有多个备份文件,每个备份文件对应集群中的一个分片,需要下载所有的备份文件,然后逐个上传到OBS桶。在迁移时,需要把所有分片的备份文件选中。
共100000条