Redis-Shake
Redis-shake是一个基于golang语言开发的,用于在两个redis之间同步数据的工具,满足用户非常灵活的同步、迁移需求。
github地址 https://github.com/alibaba/RedisShake
支持redis standalone、cluster、sentinel、proxies(如:Codis、twemproxy、Aliyun Cluster Proxy, Tencent Cloud Proxy 等)之间的数据迁移,
redis版本支持2.x to 5.0
支持的迁移模式
decode: 把Redis RDB文件解析成人类可读的文件格式.
restore: 把Rdis RDB文件作为数据源,恢复到目标Redis实例中.
dump: 对源Redis实例中的数据dump到RDB文件中.
sync: 基于Redis sync/psync命令从源redis实例同步到目标Redis实例,该模式包含全量同步和增量同步两个阶段。(通过默认Redis Slave来实现)
rump: 基于Redis scan命令的方式从源Redis同步到目标Redis实例。只支持全量同步,这种方式通常适用于源redis不支持sync/psync命令的场景
sync相比rump模式来说性能较好,通用性较差,一般来说sync模式使用的相对来说更多一些
简单使用
redis-shake二进制包
-
手动打包:
这种方式更适合于需要二次定制化开发的场景,首先需要安装golang的开发环境,另外在运行项目的时候可能会遇到一些问题:- 项目中的部分安装下载不下来,可以尝试使用gopm手动下载,下载完成之后可以通过govendor的方式把所有依赖的包放到vendor目录下,这样以后或者别人就不需要下载了
- 找不到包github.com/cespare/xxhash/v2,这个是因为prometheus基于依赖于该包,而prometheus是基于gomod构建的,gomod支持能够识别xxhash后面的v2是指定的版本,而redis-shake使用的是govendor不支持版本,解决办法,可以下载github.com/cespare/xxhash/,然后把该文件夹中的内容都copy到github.com/cespare/xxhash/v2目录下即可。
启动命令:
redis-shake --conf={配置文件地址} --type={模式:sync/dump等} 模式需要与配置文件中的source target对应。如下是一个sync模式的配置文件示例:
# id唯一标识一次同步进程
id=redis-shake
# source相关配置
source.type=standalone
source.address=10.xx.xx.xx:6379
source.password_raw={password}
source.auth_type = auth
target.type=standalone
target.address=10.xx.xx.xx:6379
target.password_raw={password}
target.auth_type = auth
# 在rdb全量同步阶段,如果目标redis已经存在对应的key时是否覆盖,如果为false就抛异常
rewrite = true
# 是否做metric统计,建议设置为true,如果设置为false,/metric中的部分参数的值就一直是0
metric = true
有疑问加站长微信联系(非本文作者)