主从复制提供数据副本,Sentinel 为非分片主从组提供监控和故障转移,Redis Cluster 同时处理分片与节点故障。三者都不能让异步复制变成零数据丢失。
Table of contents
Open Table of contents
三种能力不要混淆
| 机制 | 主要解决的问题 | 不自动解决 |
|---|---|---|
| 主从复制 | 冗余、只读副本 | 自动选主、写扩展、零丢失 |
| Sentinel | 监控、通知、主从故障转移 | 数据分片、所有客户端重连 |
| Cluster | 16384 槽位分片、重定向、选主 | 跨槽任意事务、强一致写 |
复制通常异步进行。主库确认写入后,副本可能还没收到或应用;此时主库故障并切换,最近写入可能丢失。WAIT 可以等待指定数量副本确认,但它不把系统升级为共识协议,也不能覆盖所有网络分区和故障时序。
Sentinel 如何决定切换
单个 Sentinel 先主观判断节点不可达;达到配置的法定数量后形成客观下线判断,并由获得领导权的 Sentinel 执行选主和重配置。应用必须使用支持 Sentinel 的客户端发现新主,并为连接切换、命令不确定结果和重试设置策略。
Cluster 如何路由
Key 经过 CRC16 映射到 16384 个 Hash Slot,槽位归某个主节点。节点迁槽或客户端路由过期时,服务端返回 MOVED 或 ASK,Cluster 客户端据此更新路由或临时重试。
多 Key 操作通常要求 Key 位于同一槽。order:{42}:detail 与 order:{42}:items 使用相同 Hash Tag {42} 可同槽,但把所有热门数据放到一个 Tag 会制造热点。
脑裂与保护边界
网络分区可能让旧主短时继续接受写入,而多数派一侧选出新主。配置节点超时、主库最少可用副本和复制延迟限制能降低风险,却要在可用性和数据安全之间权衡。上线前应演练断网、进程杀死、磁盘满、切换和旧主回归。
下一步
继续阅读07-06 分布式锁的正确边界,分析锁过期和故障切换为什么会让两个客户端都以为自己持锁。