4. 演练环境与生产环境隔离

Redis 生产故障演练最大的风险,不是演练本身失败,而是演练动作意外触达真实生产数据或真实业务流量。因此,演练环境与生产环境的隔离不是“另起一套 Redis”这么简单,它需要同时解决四个问题:结构对齐(影子集群要能复现生产拓扑与参数)、流量可控(回放的是脱敏后的真实请求模式,而非真实写入)、数据安全(敏感字段不可逆脱敏)、边界清晰(网络、权限、命令、监控四条边界都要能阻断误操作)。本节围绕这四点展开,并给出一套可落地的隔离方案。

一、影子集群:对齐拓扑,而不是对齐数据量

影子集群的目标是“结构等价、规模可缩”。生产若是 3 主 3 从 + 3 哨兵,影子集群应保持相同的角色比例与分片数,但节点规格可以降一档,例如生产 8C16G、影子 4C8G。这样做的原因是:故障演练关注的是主从切换、槽位迁移、哨兵选举、连接重连等行为路径,而不是吞吐极限。若影子集群用单节点替代集群,主从切换、MOVED/ASK 重定向、集群总线通信等关键路径根本无法复现,演练结论会失真。

搭建时建议用容器或独立命名空间部署,节点命名带 shadow- 前缀,端口与生产错开(如生产 7000-7005,影子 17000-17005)。关键参数必须与生产对齐,包括 maxmemory-policy、appendonly、save、cluster-node-timeout、repl-backlog-size。这些参数直接决定淘汰行为、持久化时机和故障判定速度,是演练结论能否外推到生产的核心变量。

二、流量回放:录制请求模式,而非复制数据

流量回放的价值在于让影子集群承受与生产相似的命令分布、key 访问倾斜和 QPS 波形。推荐做法是从生产代理层(如 Redis Proxy、Twemproxy 或自研网关)旁路采集命令日志,只记录 命令类型 + key 哈希 + 参数长度 + 时间戳,不记录原始 value。回放时用工具按原始时间间隔重放,key 用哈希前缀映射到影子集群的独立命名空间,例如 shadow:{hash}。

回放必须做写命令降级:生产上的 SET、DEL、EXPIRE 在影子环境可转为 SET 到影子 key、DEL 影子 key,但绝不能携带真实业务 value。对于 FLUSHALL、KEYS *、CONFIG SET 等高风险命令,回放器应直接拦截并记录,不发送到影子集群,避免演练环境自身被污染。

三、数据脱敏:不可逆映射 + 格式保持

脱敏的核心原则是不可逆、格式一致、关联可复现。手机号、身份证、邮箱、订单号等字段,用 HMAC-SHA256 加盐后截取定长,再按原格式拼接。例如手机号 13812345678,盐值固定,取哈希前 8 位映射为 139xxxxxxxx 形式,保证仍是 11 位数字、仍以 1 开头,业务代码的格式校验不会失败。同一原始值在同一盐值下必须映射到同一脱敏值,这样关联查询、去重、排序等逻辑在影子环境仍然成立。

脱敏应在数据进入影子集群之前完成,而不是在影子集群内部做。推荐链路是:生产 RDB/AOF → 离线脱敏管道 → 影子集群加载。脱敏管道要保留 TTL、数据类型和 key 的哈希分布,只替换 value 中的敏感部分。对于 Hash、ZSet、List 等复合类型,逐字段处理,保持元素数量与顺序不变。

四、配置对齐与安全边界控制

配置对齐不是“抄一份 redis.conf”,而是建立参数基线表,逐项标注“必须一致 / 允许差异 / 禁止携带”。必须一致的包括持久化策略、淘汰策略、集群超时、慢查询阈值;允许差异的包括 maxmemory、bind、requirepass、日志级别;禁止携带的包括生产密码、生产 AOF 文件、生产节点 IP 白名单。

安全边界要同时控制四条线:网络边界——影子集群部署在独立 VPC 或 VLAN,安全组只允许演练跳板机访问,禁止与生产网段互通;权限边界——影子集群使用独立 ACL 用户,禁用 FLUSHALL、CONFIG、SHUTDOWN 等命令,或通过 rename-command 重命名;命令边界——回放器与演练脚本内置命令白名单,高危命令直接拒绝;监控边界——影子集群的告警只发到演练群,不接入生产值班通道,避免误告警干扰真实故障响应。

生产环境(只读采集) 业务应用集群 真实读写流量 Redis 代理层 旁路采集命令日志 生产 Redis 集群 3主3从 + 3哨兵 RDB / AOF 快照 离线导出,不直连 采集内容 命令类型 + key哈希 参数长度 + 时间戳 ✗ 不记录原始 value 隔离处理管道 ① 数据脱敏 HMAC-SHA256 + 定长映射 ② 命令白名单过滤 拦截 FLUSHALL / KEYS * ③ 写命令降级 SET → shadow:{hash} ④ 配置基线对齐 参数逐项标注差异 影子集群(演练专用) shadow-redis-01 ~ 06 3主3从,端口 17000-17005 独立 ACL 用户 禁用 CONFIG / SHUTDOWN 独立 VPC / VLAN 仅演练跳板机可达 演练监控与告警 仅发演练群,不接生产值班 安全边界四道闸 网络 · 权限 · 命令 · 监控 任一越界即阻断 ✗ 禁止与生产网段互通 命令日志 RDB/AOF 脱敏回放 基线配置 禁止直连 隔离原则:结构对齐 · 流量脱敏 · 数据不可逆 · 边界可阻断 —— 演练结论可外推,演练动作不可外溢

五、一个可执行的隔离检查清单

演练开始前,建议逐项确认以下内容,任一项不满足则暂停演练:影子集群节点数与角色比例与生产一致;cluster-node-timeout、maxmemory-policy、appendonly 三项参数与生产一致;回放器已启用命令白名单且拦截日志可查;脱敏管道对手机号、身份证、邮箱三类字段的映射结果已抽样验证格式正确;影子集群安全组未放通生产网段;ACL 用户已禁用 CONFIG、SHUTDOWN、FLUSHALL;监控告警接收人仅为演练小组。

特别注意:不要用生产 RDB 文件直接加载到影子集群后再“就地脱敏”。RDB 加载瞬间,敏感数据已经完整存在于影子集群内存和磁盘中,一旦影子集群被误访问或快照泄露,等同于生产数据泄露。正确顺序永远是“先脱敏、后加载”。

完成上述隔离后,影子集群才具备承接故障演练的资格。此时可以安全地执行主从切换、节点宕机、网络分区、慢查询注入等动作,观察哨兵选举时间、客户端重连行为、数据一致性表现,而无需担心影响真实业务。隔离做得越彻底,演练结论越可信,恢复工程的可复现性也越强。