阿里云redis-shake
2022/4/15 19:13:04
本文主要是介绍阿里云redis-shake,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、介绍
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后,就不会有这个报错了
这篇关于阿里云redis-shake的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧