主从部署安全清单
主从复制不是自动高可用:主库宕机后从库不会自动顶上。部署阶段要固定几条安全基线——从库保持只读、主库别关持久化、每实例独立设置内存上限、按一致性要求决定是否在副本不足时拒绝写入。这几条都会直接影响故障时的数据安全。
基本信息
| 从库只读 | replica-read-only 保持开启,写入只走主库 |
|---|---|
| 主库持久化 | 至少保留快照或追加日志之一 |
| 内存上限 | 每个实例独立设置,避免从库无限制吃内存 |
| 脑裂防护 | 可配置副本数量与最大延迟条件,不足时拒绝写入 |
| 时钟同步 | 主从主机需要时间同步,延迟与日志时间线都依赖它 |
部署检查项
- 从库只读:确认配置未被改动,避免出现第二个写入点
- 主库持久化:重启后偏移归零会让全部从库全量重同步,恢复窗口很长
- 内存上限:从库内存独立设置,与主库容量不要混为一谈
- 密码成对配置:主库密码与从库连接主库的密码都要设置且一致
- 拒绝写入策略:按业务对一致性的要求决定是否启用,并评估可用性代价
- 时间同步:所有节点接入统一时间源,便于对齐日志与指标
- 只读副本数量与分布:跨机架跨机房部署,避免同时失去主库与全部副本
上线核对命令
上线核对命令
redis-cli -h 主库 INFO replication | head -20
redis-cli -h 从库 CONFIG GET replica-read-only # 应为 yes
redis-cli -h 从库 CONFIG GET maxmemory # 独立设置且非零
redis-cli -h 从库 CONFIG GET appendonly # 持久化策略
redis-cli -h 主库 CONFIG GET masterauth # 从库连主库用的密码
redis-cli -h 主库 CONFIG GET min-replicas-to-write # 脑裂防护相关
redis-cli -h 从库 INFO replication | grep -E "master_link_status|slave_repl_offset"风险项与后果
| 风险项 | 后果 |
|---|---|
| 以为主从等于高可用 | 主库宕机后写请求全部失败,无人接管 |
| 主库未开持久化 | 重启后数据丢失并触发全体从库全量重同步 |
| 从库内存上限与主库不一致 | 同步完成后从库开始淘汰数据,读结果不一致 |
| 只读配置被改动 | 从库被写入导致数据分叉与复制中断 |
| 未做时间同步 | 延迟判断与日志时间线对不上,排障效率极低 |
「主库挂了从库会自动顶上」是错误预期:原生主从没有自动切换,自动切换依赖哨兵或集群方案。
开启副本不足时拒绝写入会牺牲可用性换取一致性:业务能接受短暂不可写时才启用。