使用 RedisShake 实现 Redis 数据的不停机迁移教程

下载

下载 RedisShakeRedisShake

/images/posts/使用RedisShake实现Redis数据的不停机迁移教程/1.png
(图1)

解压后,得到 redis-shake 执行程序和 shake.toml 配置文件。windows 系统自行将 redis-shake.exe后缀。

编辑 shake.toml 文件

其中 reader 用来对接不同的源端

  • 对于从备份中恢复数据的场景,可以使用 rdb_reader
  • 对于数据迁移场景,优先选择 sync_reader。一些云厂商没有提供 PSync 协议支持,可以选择 scan_reader

rdb 迁移

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 全局配置
log_file = "shake.log"       # 日志文件路径
log_level = "info"           # 日志级别:info


# 源数据
[rdb_reader]
filepath = "D:/develop/Redis-x64-3.2.100/dump.rdb"  # 你的rdb文件位置

# 目标 Redis 配置
 
# 目标redis
[redis_writer]
cluster = false    # false就是单例, true是集群
address = "192.168.230.131:6379" # 如果cluster为true, 只需要填集群中的任意一个节点地址即可同步到整个集群
username = ""              # ​开了ACL写用户名  没开空着
password = "123456"              # 如果有密码,开没开ACL都写  否则空着
tls = false
 

# 高级配置
[advanced]
pipeline_count_limit = 1024   # 默认管道大小
rdb_restore_command_behavior = "rewrite" # 遇到重复键时覆盖

sync Reader

当源端数据库兼容 PSync 协议时,推荐使用 sync_reader

优势:数据一致性最佳,对源库影响小,可以实现不停机的切换。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 全局配置
log_file = "shake.log"       # 日志文件路径
log_level = "info"           # 日志级别:info

 
# 源数据
[sync_reader]
cluster = false            # set to true if source is a redis cluster
address = "127.0.0.1:6379" # when cluster is true, set address to one of the cluster node
username = ""              # keep empty if not using ACL
password = ""              # keep empty if no authentication is required
tls = false
sync_rdb = true # 是否同步 RDB,设置为 false 时,RedisShake 会跳过全量同步阶段
sync_aof = true # 是否同步 AOF,设置为 false 时,RedisShake 会跳过增量同步阶段,此时 RedisShake 会在全量同步阶段结束后退出

# 目标redis
[redis_writer]
cluster = false    # false就是单例, true是集群
address = "192.168.230.131:6379" # 如果cluster为true, 只需要填集群中的任意一个节点地址即可同步到整个集群
username = ""              # ​开了ACL写用户名  没开空着
password = "123456"              # 如果有密码,开没开ACL都写  否则空着
tls = false

 
# 高级配置
[advanced]
pipeline_count_limit = 1024   # 默认管道大小
rdb_restore_command_behavior = "rewrite" # 遇到重复键时覆盖

可选项

RedisShake 提供了多种内置的过滤规则,用户可以根据需要选择合适的规则。

如果不设置这些选项,默认允许所有键。

1
2
3
4
5
6
7
8
9
[filter]
allow_keys = ["user:1001", "product:2001"] # 允许的键名
allow_key_prefix = ["user:", "product:"] # 允许的键名前缀
allow_key_suffix = [":active", ":valid"] # 允许的键名后缀
allow_key_regex = [":\\d{11}:"] # 允许的键名正则,11位手机号
block_keys = ["temp:1001", "cache:2001"] # 阻止的键名
block_key_prefix = ["temp:", "cache:"] # 阻止的键名前缀
block_key_suffix = [":tmp", ":old"] # 阻止的键名后缀
block_key_regex = [":test:\\d{11}:"] # 阻止的键名正则,11位手机号,前缀为test

也可以指定迁移具体的库或者阻止具体的库,不写则默认所有库进行迁移。

1
2
3
[filter]
allow_db = [0, 1, 2]
block_db = [3, 4, 5]

执行 redis-shake

1
redis-shake shake.toml
/images/posts/使用RedisShake实现Redis数据的不停机迁移教程/2.png
(图2)

若显示 redis-shake source db is not doing bgsave! continue,表示迁移成功。

提示
若没有迁移过去,可以考虑从过滤项入手看一下,将过滤项的 allow_db 删掉后,再次尝试。

0%