本文是实现关于阿里云上Redis(集群版)的迁移,其实非集群的也可以实现,实现的方式都是相同的,都是通过Redis-port实现,只不过集群版的.rdb(数据文件)多一些。
首先介绍下什么是Redis-port:
Redis-port是github上的一款开源第三方软件,基于GO语言实现,主要是为Redis迁移服务。基本的四个功能是,decode(解码),restore(恢复),dump(导出),sync(同步),具体的操作方式如下:
- DECODE dumped payload to human readable format (hex-encoding)
redis-port decode [--ncpu=N] [--parallel=M] \
[--input=INPUT] \
[--output=OUTPUT]
- RESTORE rdb file to target redis
redis-port restore [--ncpu=N] [--parallel=M] \
[--input=INPUT] [--faketime=FAKETIME] [--extra] [--filterdb=DB] \
--target=TARGET [--auth=AUTH] [--redis|--codis]
- DUMP rdb file from master redis
redis-port dump [--ncpu=N] [--parallel=M] \
--from=MASTER [--password=PASSWORD] [--extra] \
[--output=OUTPUT]
- SYNC data from master to slave
redis-port sync [--ncpu=N] [--parallel=M] \
--from=MASTER [--password=PASSWORD] [--psync] [--filterdb=DB] \
--target=TARGET [--auth=AUTH] [--redis|--codis] [--sockfile=FILE [--filesize=SIZE]]
以下是根据阿里云现有的Redis集群版实现的跨账号迁移操作具体如下:
- 先下载老账号下Redis集群版的rdb文件:
因为我这是测试机没数据,先添点数据,写个python实现输出插入的语句200条:
在DMS上插入打印出来的200条redis执行命令:
查看下,插入数据成功:
接着将数据rdb文件下载:
先将实例全量备份,因为只插入了200条数据,所以数据量都是0M,,没关系反正有数据测试就ok,继续往下,点击右侧正常下载:
- 在新账号下启一台ECS,将rdb文件上传,因为rdb文件有点长,你可以先更改为简单的名称,PS:rdb文件没指定的顺序,可以随意起名。
- 在新ECS上 下载redis-port工具,可以通过下载
- 将该redis-port修改为可执行文件
chmod u+x redis-port
- 在redis-port所在目录下执行
mkdir logs
,因为redis-port需要一个日志目录存放错误日志,而redis-port又不会创建这个日志文件,这有点坑,不过没事手动创建吧 - 测试下是否正常使用redis-port和rdb文件因为redis-port 需要输入redis数据库的密码,先检查是否有密码,使用
config get requirepass
查看,如下代表无密码,需要设置:
1) 设置密码,
config set requirepass 12345
,将密码设置为12345,出现 NOAUTH Authentication required,表示需要密码登录,密码设置成功,接着通过auth 尝试登录:
2) 导入rdb查看是否正常,导入hins4621549_data_20180521104058.rdb 显示OK,之后将所有的rdb文件导入:
3) get a1的值 获到helloworld 成功。
- 最后尝试将数据导入到redis集群中吧!
ping r-bp154217ddd6dd14.redis.rds.aliyuncs.com
测试redis和ECS内网是否互通,互通就可以尝试rdb文件的上传了,(PS:注意redis数据库有两种模式经典和专有,因为redis不支持通过公网访问所以在使用专有网络ECS时,一定要确保内网是互通的)
OK迁移完整,PS:在往redis数据库导入rdb文件时,需注意Redis的白名单的设置,要把ECS的内网放入进去不然会一直报错的
- 通过控制台查看redis数据的,ok迁移成功