主从与哨兵
→ 返回 Redis
部署演进
| 形态 | 容量 | 高可用 | 适用 |
|---|---|---|---|
| 单机 | 受内存限制 | 无 | 开发、可丢缓存 |
| 主从 | 读扩展 | 手动切换 | 读多写少 |
| Sentinel | 读扩展 | 自动 failover | 中小规模、不需水平分片 |
| Cluster | 水平分片 | 分片 + 副本 | 见 Cluster |
主从复制
- 从节点
PSYNC连接主节点 - 全量:主节点
BGSAVERDB → 发送 → 从节点加载 - 增量:主节点 replication buffer,从节点重放
- 断线:
repl_backlog尝试 partial resync
replicaof 192.168.1.1 6379
masterauth <password>
INFO replication| 问题 | 应对 |
|---|---|
| 复制延迟 | 强一致读主;或容忍最终一致 |
| 全量同步风暴 | 增大 repl-backlog-size;避免批量重启从库 |
| 写主后读从 | 删缓存 + 延迟双删;或读主 |
| 从库误写 | replica-read-only yes |
INFO replication
# master_repl_offset / slave_repl_offset 差值 ≈ 滞后Sentinel(哨兵)
3 个以上 Sentinel:SDOWN → ODOWN → 选举 Leader → failover 提升从库。
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1| 问题 | 说明 |
|---|---|
| 脑裂 | 分区导致双主;旧主仍接受写 |
| failover 窗口 | 短暂不可用或需客户端发现新主 |
| quorum | 判定 ODOWN 所需哨兵数,非选举法定人数 |
缓解脑裂:min-replicas-to-write 1 + min-replicas-max-lag 10 — 从库不足时主库拒绝写。
客户端:Lettuce + Sentinel 或 Redisson 自动发现主节点。