一、介绍
redis-shake是阿里云Redis&MongoDB团队开源的用于redis数据同步的工具。下载地址: https://github.com/alibaba/RedisShake/releases?spm=a2c6h.12873639.article-detail.4.4b8974957Y7slI
二、配置
第一次使用,如何进行配置: https://github.com/alibaba/RedisShake/wiki/第一次使用,如何进行配置?
官方介绍: https://developer.aliyun.com/article/691794
conf.version = 1
id = redis-shake-calling_scheduling
log.file = /root/RedisShake-release-v2.1.2-20220329/logs/redis-shake-calling_scheduling.log
log.level = info
pid_path = /root/RedisShake-release-v2.1.2-20220329/logs/
system_profile = 9310
http_profile = 9320
parallel = 32
source.type = standalone
source.address = user:password
source.auth_type = auth
source.tls_enable = false
source.tls_skip_verify = false
source.rdb.input =
source.rdb.parallel = 0
source.rdb.special_cloud =
target.type = proxy
target.address = proxy_addr:6379
target.password_raw =
target.auth_type = auth
target.db = -1
target.dbmap =
target.tls_enable = false
target.tls_skip_verify = false
target.rdb.output = local_dump
target.version = 5.0
fake_time =
key_exists = none
filter.db.whitelist = 4
filter.db.blacklist =
filter.key.whitelist =
filter.key.blacklist =
filter.slot =
filter.command.whitelist =
filter.command.blacklist =
filter.lua = false
big_key_threshold = 524288000
metric = true
metric.print_log = true
sender.size = 104857600
sender.count = 4095
sender.delay_channel_size = 65535
keep_alive = 1
scan.key_number = 50
scan.special_cloud =
scan.key_file =
qps = 200000
resume_from_break_point = false
replace_hash_tag = false
三、启动
3.1 支持场景
redis-shake是我们基于redis-port基础上进行改进的一款产品。它支持解析、恢复、备份、同步四个功能。以下主要介绍同步sync。
- 恢复restore:将RDB文件恢复到目的redis数据库。
- 备份dump:将源redis的全量数据通过RDB文件备份起来。
- 解析decode:对RDB文件进行读取,并以json格式解析存储。
- 同步sync:支持源redis和目的redis的数据同步,支持全量和增量数据的迁移,支持从云下到阿里云云上的同步,也支持云下到云下不同环境的同步,支持单节点、主从版、集群版之间的互相同步。需要注意的是,如果源端是集群版,可以启动一个RedisShake,从不同的db结点进行拉取,同时源端不能开启move slot功能;对于目的端,如果是集群版,写入可以是1个或者多个db结点。
- 同步rump:支持源redis和目的redis的数据同步,仅支持全量的迁移。采用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移。
3.2 安装 并启动 使用sync同步
wget https://github.com/alibaba/RedisShake/releases/download/release-v2.1.2-20220329/release-v2.1.2-20220329.tar.gz
tar xf release-v2.1.2-20220329.tar.gz
cd RedisShake-release-v2.1.2-20220329
bash build.sh
nohup ./redis-shake.linux -conf redis-shake.conf -type sync & # 使用sync同步
四、遇到的问题
4.1 read error, please check source redis log or network
两个解决方向
① 修改redis的client-output-buffer-limit pubsub
CONFIG GET *
167) "client-output-buffer-limit"
168) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
- 对于普通客户端来说,限制为0,也就是不限制。因为普通客户端通常采用阻塞式的消息应答模式,何谓阻塞式呢?如:发送请求,等待返回,再发送请求,再等待返回。这种模式下,通常不会导致Redis服务器输出缓冲区的堆积膨胀;
- 对于Pub/Sub客户端(也就是发布/订阅模式),大小限制是8M,当输出缓冲区超过8M时,会关闭连接。持续性限制是,当客户端缓冲区大小持续60秒超过2M,则关闭客户端连接;
- 对于slave客户端来说,大小限制是256M,持续性限制是当客户端缓冲区大小持续60秒超过64M,则关闭客户端连接。
- 具体参数的意义:
class: 客户端种类,包括Normal,Slaves和Pub/Sub
Normal: 普通的客户端。默认limit 是0,也就是不限制。
Pub/Sub: 发布与订阅的客户端的。默认hard limit 32M,soft limit 8M/60s。
Slaves: 从库的复制客户端。默认hard limit 256M,soft limit 64M/60s。
hard limit: 缓冲区大小的硬性限制。
soft limit: 缓冲去大小的软性限制。
soft seconds: 缓冲区大小达到了(超过)soft limit值的持续时间。
client-output-buffer-limit参数限制分配的缓冲区的大小,防止内存无节制的分配,Redis将会做如下自我保护:
client buffer的大小达到了soft limit并持续了soft seconds时间,将立即断开和客户端的连接
client buffer的大小达到了hard limit,server也会立即断开和客户端的连接
所以需要client-output-buffer-limit slave项的配置,将其改为0 0 0 。重启主库即可解决这种由scheduled to be closed ASAP for overcoming of output buffer limits引起的Redis is LOADING the dataset问题。当然引起Redis is LOADING the dataset问题还有其它的原因,比如内存不足。导致使用SWAP,这样redis加载数据的性能会大大降低导致报错Redis is LOADING the dataset。
② 修改redis-shake的keep_alive
我这边下载redis-shake的时候,keep_alive 默认是0 ,我这边修改为1后,就不会有这个报错了
原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/244879.html