一、我的使用场景说明
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 执行过程