首页 > 数据库 >redis-shake工具同步redis数据

redis-shake工具同步redis数据

时间:2025-01-12 13:43:17浏览次数:1  
标签:同步 redis Redis 实例 shake 数据

一、我的使用场景说明

1.业务场景

  • 由于业务要求,redis服务器迁移,将A服务器redis(单机)数据迁移到B服务器的redis(单机)上,只迁移5库数据,选择工具的原因是:B服务器上redis其他库都有数据,不能直接迁移A服务器redis的rdb或aof持久化文件
  • redis都是单机、6.0.2版本
  • redis使用docker容器部署
  • redis都开启了rdb持久化
  • A服务器redis-172.16.44.67:6379、B服务器redis=172.16.44.68:6379,密码:123456

 

二、redis-shake工具介绍

redis-shake 是一个用于数据迁移和同步的开源工具,主要用于将 Redis 数据从一个实例迁移到另一个实例。它可以帮助在不同的 Redis 集群或实例之间迁移数据,支持单向同步和双向同步,并可以用于在 Redis 实例之间同步不同的数据集或数据库。

1.主要功能

1.1 数据迁移:

支持将 Redis 实例的数据迁移到另一个实例。可以跨版本进行迁移,支持不同版本的 Redis 之间的数据传输。

 

1.2 增量同步:

支持全量数据迁移后,通过增量同步进行实时同步,保持目标 Redis 实例数据的实时更新。

 

1.3 支持多种模式:

Standalone(单机模式): 从一个 Redis 实例同步到另一个 Redis 实例。
Cluster(集群模式): 在 Redis 集群之间进行同步。

 

1.4 RDB/AOF 支持:

支持通过 RDB(Redis 数据库快照)文件或 AOF(Append Only File)日志进行数据同步。

 

1.5 多种同步方式:

全量同步: 将源 Redis 实例中的所有数据导出到目标实例。
增量同步: 在全量同步完成后,通过增量同步确保目标实例持续跟踪和同步源实例的更新。

 

2.常见使用场景

跨集群迁移: 当需要将 Redis 数据从一个集群迁移到另一个集群时,redis-shake 可以实现高效的同步。
集群升级: 在 Redis 集群版本升级时,redis-shake 可以帮助迁移数据,并确保在新版本中同步旧集群的数据。
数据备份与恢复: 可用于备份 Redis 数据并将其恢复到另一台 Redis 实例。
灾难恢复: 用于将一个实例的数据同步到另一个实例,提供灾难恢复的手段。

 

3.工作原理

全量同步: 使用 bgsave 命令从源实例生成 RDB 文件,然后将文件从源实例传输到目标实例,完成数据迁移。
增量同步: 在全量同步完成后,redis-shake 会启动增量同步机制,实时监控源实例的更新并同步到目标实例。
AOF 和 RDB 文件支持: redis-shake 支持通过 AOF 或 RDB 文件进行数据同步,适应不同的 Redis 持久化机制。

 

4.redis-shake工具下载

https://github.com/tair-opensource/RedisShake/releases

 

5.配置与使用

  • 解压 redis-shake-v4.3.1-linux-amd64.tar.gz 后,得到 redis-shake 执行程序和 shake.toml 配置文件
  • redis-shake 的配置通常通过 TOML 格式的配置文件进行,配置文件中包含源实例和目标实例的相关信息(如地址、密码、数据库等),并可以设置同步的数据库、同步方式(全量或增量)、同步的详细选项(例如是否启用 TLS、是否同步 AOF 等)。


5.1 配置文件shake.toml编辑(cat shake.toml)

  • 默认shake.toml文件配置较多,可只保留有用的配置即可
[sync_reader]
cluster = false
address = "172.16.44.67:6379" # 源 Redis 地址
password = "123456"          # 源 Redis 密码
sync_rdb = true               # 启用 RDB 同步
sync_aof = false               # 启用 AOF 同步

[redis_writer]
cluster = false
address = "172.16.44.68:6379" # 目标 Redis 地址
password = "123456"          # 目标 Redis 密码

[filter]
allow_db = [5]                # 只同步 5 号库的数据

[advanced]
log_file = "shake.log"        # 日志文件路径
log_level = "info"            # 日志级别:info
pipeline_count_limit = 1024   # 默认管道大小

rdb_restore_command_behavior = "rewrite" # 遇到重复键时覆盖

这个配置文件指示 redis-shake 从 172.16.44.67:6379 的 Redis 实例中的 5 号数据库同步数据到 172.16.44.68:6379 的 Redis 实例的 5 号数据库。

 

5.2 配置项说明

[sync_reader]:配置源 Redis 实例的相关信息。
address:源 Redis 实例的 IP 地址和端口。
password:连接源 Redis 实例的密码。
sync_rdb:是否启用 RDB 同步。
sync_aof:是否启用 AOF 同步。

[redis_writer]:配置目标 Redis 实例的相关信息。
address:目标 Redis 实例的 IP 地址和端口。
password:连接目标 Redis 实例的密码。

[filter]:过滤同步数据的设置。
allow_db:指定要同步的数据库,可以是一个数字列表,这里只同步第 5 号数据库。

[advanced]:高级配置项。
log_file:设置日志文件的路径,记录同步过程中的信息。
log_level:设置日志级别,可以是 info、warn、error 等,控制日志的详细程度。
pipeline_count_limit:设置管道的最大数量,决定批量操作的大小。
rdb_restore_command_behavior:当目标 Redis 实例中已存在相同键时的行为,rewrite 表示覆盖目标 Redis 中的旧数据。

 

5.3 同步前操作(源服务器上)

  • 执行数据同步前,在源redis上执行落盘命令 bgsave

 

5.4 使用说明

使用以下命令启动 redis-shake 数据同步:

./redis-shake shake.toml

 这将会按照配置文件中的设置从源 Redis 实例(172.16.44.67:6379)同步数据到目标 Redis 实例(172.16.44.68:6379),并仅同步 5 号数据库的数据。

 

5.5 执行过程

 

标签:同步,redis,Redis,实例,shake,数据
From: https://www.cnblogs.com/Leonardo-li/p/18666906

相关文章

  • Lec 13 同步原语
    Lec13同步原语License本内容版权归上海交通大学并行与分布式系统研究所所有使用者可以将全部或部分本内容免费用于非商业用途使用者在使用全部或部分本内容时请注明来源资料来自上海交通大学并行与分布式系统研究所+材料名字对于不遵守此声明或者其他违法使用本内容者,将依......
  • MySQL主从同步不一致解决办法
    一般主从同步错误首先要考虑是不是在从库中误操作导致的。结果发现,有人在从库中进行了一条针对有主键表的sql语句的插入,导致主库再插入相同sql的时候,主从状态出现异常。发生主键冲突的报错。解决方法:在确保主从数据一致性的前提下,可以在从库进行错误跳过。像从库如果不提供......
  • 【教程4>第5章>第8节】帧同步后提取帧结构中的数据部分
    本课程学习成果预览 欢迎订阅FPGA/MATLAB/Simulink系列教程《★教程1:matlab入门100例》《★教程2:fpga入门100例》《★教程3:simulink入门60例》《★教程4:FPGA/MATLAB/Simulink联合开发入门与进阶X例》目录1.软件版本2.通过峰值定位提取帧结构中的数据3.FPGA实......
  • 详解Redis的Hash类型及相关命令
    目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOAT内部编码应用场景HSET设置hash中指定的字段(field)的值(value)。语法HSETkeyfieldvalue[fieldvalue...]时间复杂度:插⼊⼀组field为O(1),插⼊N组field为O(......
  • [微服务]redis数据结构
    介绍我们常用的Redis数据类型有5种,分别是:StringListSetSortedSetHash还有一些高级数据类型,比如Bitmap、HyperLogLog、GEO等,其底层都是基于上述5种基本数据类型。因此在Redis的源码中,其实只有5种数据类型。RedisObject不管是任何一种数据类型,最终都会封装为RedisObject格式......
  • [微服务]redis分片集群搭建与优化
    介绍主从模式可以解决高可用、高并发读的问题。但依然有两个问题没有解决:海量数据存储高并发写要解决这两个问题就需要用到分片集群了。分片的意思,就是把数据拆分存储到不同节点,这样整个集群的存储数据量就更大了。Redis分片集群的结构如图:分片集群特征:集群中有多个ma......
  • 【操作系统】课程 4调度与死锁 同步测练 章节测验
    4.1知识点导图处理机调度与死锁相关内容的文字整理:基本准则资源利用率:使系统中的处理机和其他所有资源都尽可能地保持忙碌状态。系统吞吐量:单位时间内系统所完成的作业数。公平性:使各进程都获得合理的CPU时间,而不会发生进程饥饿现象。响应时间:要尽可能短。周转时间:周转时......
  • 05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
    Docker学习,常用安装:Mysql、Redis、Nginx、Nacos一、Docker安装Mysql1、dockersearchmysql ##查找mysql版本都有哪些2、dockerpullmysql:5.6 ##下载5.6版本的mysql镜像3、dockerrun-p13306:3306--namemysql ##运行镜像生成容器-v/opt......
  • redis-7.4.2哨兵随记
    ###########################redis.conf7.4.2主从################################http://download.redis.io/releases/redis-7.4.2.tar.gztarxfredis-7.4.2.tar.gzcdredis-7.4.2makemakeinstallPREFIX=/usr/local/ccdt/redis_7.4.2/redis36379makeinsta......
  • FastApi框架异步调用同步问题
    Fastapi项目,在接口中调用同步方法,如果该同步方法,耗时较长(比如连接redis超时),会造成整个项目接口的阻塞,这是任何接口的访问都会被阻塞超时一、为什么会阻塞FastAPI是基于异步框架(如asyncio或anyio)构建的,它的核心是一个事件循环(EventLoop)。事件循环负责调度和执行所有的异步......