文件名:
shake-scan-prod.toml版本:RedisShake v4.6.2 | scan_reader + KSN 增量、适配阿里云 RDS 单机版、带 QPS 限速、key 前缀过滤、跳过已存在 key、日志规整 ⚠️ 前置硬性要求:源 Redis 必须开启 keyspace notifications# 源redis-cli执行,持久化写到redis.conf config set notify-keyspace-events AE不开启
AE,KSN 增量不生效,只能跑全量 scan,跑完直接退出tair-opens...
# ==============================================
# RedisShake v4 scan_reader 自建Redis -> 阿里云RDS Redis
# 模式:SCAN全量 + KSN(keyspace-notify)增量
# ==============================================
[[reader]]
type = "scan_reader"
address = "127.0.0.1:6379"
username = ""
password = "源Redis密码"
tls = false
cluster = false
# scan核心参数
ksn = true # 开启KSN增量同步(重点!全量scan同时监听新增变更)
dbs = [0] # 只同步db0;多库改成 [0,1,2],全部库写 []
count = 200 # 单次scan拉取数量,调小降低源CPU压力(业务高峰建议50~100)
parallel = 4 # scan并发数,不要拉太高,容易打爆源Redis
skip_unknown_type = []
[[writer]]
type = "redis_writer"
address = "target-redis:6379"
username = ""
password = "target-redis实例密码"
tls = false
cluster = false
skip_existing_keys = true # 【非常适合上云迁移】目标已经存在的key直接跳过,不覆盖
max_qps = 30000 # 写入限速,根据RDS规格调低!!不要直接30w,RDS扛不住
pipeline_count_limit = 200
# ==============================================
# [filter] key过滤模块,按需注释修改
# allow 白名单优先;block黑名单,匹配到直接丢弃
# ==============================================
[filter]
# ---- 白名单:只同步下面前缀的key,不需要白名单就清空数组 ----
allow_key_prefix = ["biz:order:", "biz:user:"]
allow_keys = []
allow_key_suffix = []
allow_key_regex = []
# ---- 黑名单:排除某些前缀,比如临时缓存、测试key ----
block_key_prefix = ["temp:", "debug:", "test:"]
block_keys = []
block_key_suffix = []
block_key_regex = []
allow_db = []
block_db = []
# 命令过滤:禁止同步FLUSHALL/FLUSHDB(KSN不感知flush,加一层防护)
block_command = ["FLUSHALL", "FLUSHDB"]
allow_command = []
block_command_group = []
allow_command_group = []
# ==============================================
# 高级参数 日志、网络、重试
# ==============================================
[advanced]
log_file = "./redis-shake-scan.log"
log_level = "info"
network_timeout = 5
retry_delay = 1000
rdb_restore_command_behavior = "skip" # restore冲突策略:skip覆盖/error报错/override覆盖
pprof_port = 0 # 关闭pprof,需要调试改为 6060
配套启动命令(避开日志路径嵌套坑)
nohup ./redis-shake -conf ./shake-scan-prod.toml > shake.out 2>&1 &
重要风险 & 调参说明(阿里云 RDS 重点)
KSN 短板:KSN 无法感知
FLUSHALL / FLUSHDB,迁移期间源库不要执行清空命令限速
max_qps:你之前写的 300000 太大,阿里云 RDS 基础实例 QPS 上限很低,建议先 5000 ~ 10000 起步,观察 RDS 监控(CPU、带宽、命中率)再往上加skip_existing_keys=true:适合分阶段迁移;如果需要覆盖目标老数据改成false,rdb_restore_command_behavior="override"scan 阶段对源 RedisCPU 压力明显,全量 scan 尽量放在业务低峰;
parallel不要超过 8,count 越小越稳、越慢Alibaba Cl...阿里云 RDS 白名单:运行 redis-shake 的服务器 IP,必须加到 RDS 实例白名单
切换过滤模式示例
方案 A:只保留黑名单,全部 key 都同步,只丢弃 temp/test
allow_key_prefix = []
block_key_prefix = ["temp:","debug:","test:"]
方案 B:不过滤任何 key,全部迁移
allow_key_prefix = []
block_key_prefix = []
block_command = ["FLUSHALL", "FLUSHDB"]
验证步骤
启动后看日志,会先跑
scan全量,scan 没跑完就同时接收 KSN 增量对比两边 key 数量:
INFO keyspace全量 scan 跑完后,日志稳定走 KSN 增量,观察 diff、读写 ops
本文原创作者:易君召,详见:https://www.yijunzhao.cc/about,转载请注明出处。
原文链接
欢迎访问