1、redis-shake
redis-shake模式介绍
redis-shake 常见于生产环境中将 Redis 单机实例迁移到集群实例或者需要无缝将一个小规格 Redis 实例迁移到另一个大规格 Redis 实例。
redis-shake 支持迁移单实例、集群等,也支持将数据备份或者迁移到阿里云。
注意事项
如果目标库的数据逐出策略(maxmemory-policy)配置为除noeviction以外的值,可能导致目标库的数据与源库不一致。关于数据逐出策略详情,请参见Redis数据逐出策略介绍。
如果源库中的部分Key使用了过期(Expire)机制,由于可能存在Key已过期但未被及时删除的情形,在目标库中查看(如通过info命令)的Key数量会比源库的Key数量少。
安装redis-shake
- 登录待安装redis-shake的设备,例如ECS实例或本地设备。
- 执行下述命令下载redis-shake文件:
wget 'https://github.com/alibaba/RedisShake/releases/download/v3.1.7/redis-shake-linux-amd64.tar.gz'
说明 本文以redis-shake 3.1.7版本为例演示操作流程。如有更新版本,推荐使用最新版本
- 执行下述命令解压redis-shake文件:
tar xzf redis-shake-linux-amd64.tar.gz
- 在安装redis-shake的设备上,执行数据迁移操作。
- 在redis-shake目录中,执行下述命令,进入配置文件编辑界面:
vim sync.toml
- 输入a进入编辑模式。
- 修改配置文件。
类别 | 参数 | 说明 | 取值示例 |
无 | type | redis-shake模式,固定为sync,为同步模式。 | sync |
source | address | 源库的连接地址和端口号,连接地址和端口号之间使用英文冒号(:)分隔。说明如果源库与redis-shake部署在同一设备,可填写为 | 127.0.0.1:6379 |
username | 源库的账号,如果源库未使用ACL,无需填写。 | ausername | |
password | 源库的密码,如果源库未设置密码,无需填写。 | Rp829dlwa | |
target | type | 目标实例的架构,取值:standalone:标准(主从)架构、集群架构代理模式(Proxy)、读写分离架构。说明 目标实例为读写分离架构时,目标连接地址(address)需填写读写分离实例的主节点。cluster:集群架构直连模式。 | standalone |
address | 目标实例的连接地址与端口号,连接地址和端口号之间使用英文冒号(:)分隔。关于如何获取连接地址和端口号,请参见查看连接地址。ECS实例与目标实例为同一专有网络时,可通过专有网络进行迁移,需获取Tair或Redis实例的专有网络连接地址。若ECS实例与目标实例为跨地域或不在同一个专有网络下,则需要通过公网进行迁移。本地设备可通过公网进行迁移,需获取Tair或Redis实例的公网连接地址。 | r-bp1wcw2rlw76acc5k****.redis.rds.aliyuncs.com:6379 | |
password | 目标实例的账号(需具备读写权限)及其密码。使用默认账号(以实例ID命名的账号):直接填写密码即可。使用新创建的账号:密码格式为 | testaccount:Rp829dlwa |
说明 其他参数如无特殊需求无需配置,如需了解更多,请查看sync.toml文件中各参数的注释。
- 按下Esc键退出编辑模式,输入:wq并按回车键保存配置、退出编辑界面。
- 执行下述命令启动redis-shake,redis-shake将开始执行数据迁移:
./redis-shake sync.toml
redis-shake将在屏幕上打印运行的日志信息。
2、redis-dump安装
2.1 mac上安装
brew install ruby
gem sources --add https://mirrors.aliyun.com/rubygems/
gem sources --remove https://rubygems.org/
gem sources --list
gem install redis-dump -V
2.2 centos上安装
2.2.1 方式一:
- 在centos7上yum安装
#安装
yum install centos-release-scl-rh -y
yum install rh-ruby27 rh-ruby27-ruby-devel.x86_64 -y
scl enable rh-ruby27 bash
ruby -v
gem install redis-dump -V
#备份单个db
redis-dump -u :redis_password@redis_ip:6379 -d 0 > /tmp/db0.json
redis-dump -u :redis_password@redis_ip:6379 -d 1 > /tmp/db1.json
#备份整个db
redis-dump -u :redis_password@redis_ip:6379 > /tmp/all.json
备份恢复
cat /tmp/db0.json |redis-load -u :redis_password@redis_ip:6379
cat /tmp/all.json |redis-load -u :redis_password@redis_ip:6379
- 当退出当前终端后,再次使用redis-dump,需要再次执行命令
scl enable rh-ruby27 bash
2.2.2 方式二
- rvm(ruby versiuon manager)
- 该方式需要配置代理
export http_proxy='代理ip:代理端口'
export https_proxy='代理ip:代理端口'
curl -sSL https://get.rvm.io | bash
source /etc/profile.d/rvm.sh
rvm install ruby-2.7
gem install redis-dump -V
#验证
redis-dump -v