redis-shake实现无感知不停服迁移redis服务以及数据

  • 由于业务要求,redis服务器迁移,将A服务器redis(单机)数据迁移到B服务器的redis(单机)上,只迁移5库数据,选择工具的原因是:B服务器上redis其他库都有数据,不能直接迁移A服务器redis的rdb或aof持久化文件

二、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工具下载

bash 复制代码
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文件配置较多,可只保留有用的配置即可
ini 复制代码
[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 号数据库。

  • sync_rdb 和 sync_aof选项说明
ini 复制代码
# 启用 RDB 全量同步,关闭 AOF 增量同步
sync_rdb = true
sync_aof = false

#关于 sync_rdb 和 sync_aof 的配置含义
sync_rdb = true:

表示启用 RDB(Redis DataBase)文件同步。
RDB 是 Redis 的快照文件,记录的是某个时间点的所有数据。
开启这个选项时,Redis-Shake 会在全量同步阶段将源 Redis 的 RDB 文件导出,并将其恢复到目标 Redis。

适用场景:
用于快速初始化目标 Redis 的数据。
全量同步非常适合数据量较大的场景,且可以避免实时同步延迟。

sync_aof = true:

表示启用 AOF(Append-Only File)日志同步。
AOF 是 Redis 的持久化日志,记录的是每条写命令的执行过程。
开启这个选项时,Redis-Shake 会捕获并同步源 Redis 的实时写入操作。

适用场景:
增量同步:在 RDB 全量同步完成后,AOF 负责保持源和目标数据的一致性。
如果源 Redis 数据更新频繁,这个选项非常重要。

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 数据同步: ```bash ./redis-shake shake.toml ``` 这将会按照配置文件中的设置从源 Redis 实例(172.16.44.67:6379)同步数据到目标 Redis 实例(172.16.44.68:6379),并仅同步 5 号数据库的数据。 #### 5.5 执行过程 ```yaml [root@localhost 111]# ./redis-shake shake.toml 2025-01-12 13:41:31 INF load config from file: shake.toml 2025-01-12 13:41:31 INF log_level: [info], log_file: [/data/aibox-common/shell/111/data/shake.log] 2025-01-12 13:41:31 INF changed work dir. dir=[/data/aibox-common/shell/111/data] 2025-01-12 13:41:31 INF GOMAXPROCS defaults to the value of runtime.NumCPU [4] 2025-01-12 13:41:31 INF not set pprof port 2025-01-12 13:41:31 INF create SyncStandaloneReader 2025-01-12 13:41:31 INF * address: 172.16.44.67:6379 2025-01-12 13:41:31 INF * username: 2025-01-12 13:41:31 INF * password: ******* 2025-01-12 13:41:31 INF * tls: false 2025-01-12 13:41:31 INF create RedisStandaloneWriter 2025-01-12 13:41:31 INF * address: 172.16.44.68:6379 2025-01-12 13:41:31 INF * username: 2025-01-12 13:41:31 INF * password: ******* 2025-01-12 13:41:31 INF * tls: false 2025-01-12 13:41:31 INF start syncing... 2025-01-12 13:41:33 INF all done ``` #### 5.6 验证同步结果 分别登陆两台redis容器:docker exec -it redis bash 分别进入redis5库:redis-cli -p 6379 -a 123456 -n 5 分别查看keys数量:keys \* 分别随机抽几个key检查value值:get key,如我的key是:get camera:p100101

相关推荐
invicinble29 分钟前
对于springboot
java·spring boot·后端
码界奇点1 小时前
基于Spring Boot与Vue的校园后台管理系统设计与实现
vue.js·spring boot·后端·毕业设计·源代码管理
爱编程的小庄1 小时前
Rust 发行版本及工具介绍
开发语言·后端·rust
Apifox.3 小时前
测试用例越堆越多?用 Apifox 测试套件让自动化回归更易维护
运维·前端·后端·测试工具·单元测试·自动化·测试用例
sunnyday04263 小时前
Nginx与Spring Cloud Gateway QPS统计全攻略
java·spring boot·后端·nginx
康王有点困3 小时前
Link入门
后端·flink
海南java第二人3 小时前
Spring Boot全局异常处理终极指南:打造优雅的API错误响应体系
java·spring boot·后端
小楼v4 小时前
消息队列的核心概念与应用(RabbitMQ快速入门)
java·后端·消息队列·rabbitmq·死信队列·交换机·安装步骤
小北方城市网4 小时前
接口性能优化实战:从秒级到毫秒级
java·spring boot·redis·后端·python·性能优化
鸡蛋豆腐仙子4 小时前
Spring的AOP失效场景
java·后端·spring