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版本列表。
-
执行下述命令解压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
。如果源库为集群架构,需要为N个节点启动N个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命名的账号):直接填写密码即可。使用新创建的账号:密码格式为 *user:password*
。例如自定义账号为testaccount
,密码为Rp829dlwa
,密码需填写为testaccount:Rp829dlwa
。关于如何创建账号,请参见创建与管理账号。testaccount:Rp829dlwa 说明 其他参数如无特殊需求无需配置,如需了解更多,请查看sync.toml文件中各参数的注释。
-
按下Esc键退出编辑模式,输入:wq并按回车键保存配置、退出编辑界面。
-
执行下述命令启动redis-shake,redis-shake将开始执行数据迁移:
./redis-shake sync.toml
redis-shake将在屏幕上打印运行的日志信息。
-
参考
- 阿里云帮助中心
https://help.aliyun.com/document_detail/111066.html - github中文文档
https://github.com/alibaba/RedisShake/wiki - githup项目地址
https://github.com/alibaba/RedisShake
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-ruby30* -y
scl enable rh-ruby30 bash
ruby -v
gem install redis-dump -V
#切换源
#gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
#gem sources --remove https://mirrors.aliyun.com/rubygems/
#gem sources -a https://rubygems.org/
#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
报错及解决:添加参数 -n
ERROR (Yajl::ParseError): lexical error: invalid bytes in UTF8 string.
:-1,"type":"zset","value":[["21716173734803_b7ab7cec-2b55-4
(right here) ------^
解决:加 -n参数
cat redis-alldbs-backup.json |redis-load -n -u :fSVVGPpYwdjPjz2z@172.19.38.123: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