跳到正文
Elaine Blog
返回

主从、Sentinel 与 Cluster

Redis 与缓存工程

主从复制提供数据副本,Sentinel 为非分片主从组提供监控和故障转移,Redis Cluster 同时处理分片与节点故障。三者都不能让异步复制变成零数据丢失。

Table of contents

Open Table of contents

三种能力不要混淆

机制主要解决的问题不自动解决
主从复制冗余、只读副本自动选主、写扩展、零丢失
Sentinel监控、通知、主从故障转移数据分片、所有客户端重连
Cluster16384 槽位分片、重定向、选主跨槽任意事务、强一致写

复制通常异步进行。主库确认写入后,副本可能还没收到或应用;此时主库故障并切换,最近写入可能丢失。WAIT 可以等待指定数量副本确认,但它不把系统升级为共识协议,也不能覆盖所有网络分区和故障时序。

Sentinel 如何决定切换

单个 Sentinel 先主观判断节点不可达;达到配置的法定数量后形成客观下线判断,并由获得领导权的 Sentinel 执行选主和重配置。应用必须使用支持 Sentinel 的客户端发现新主,并为连接切换、命令不确定结果和重试设置策略。

Cluster 如何路由

Key 经过 CRC16 映射到 16384 个 Hash Slot,槽位归某个主节点。节点迁槽或客户端路由过期时,服务端返回 MOVEDASK,Cluster 客户端据此更新路由或临时重试。

多 Key 操作通常要求 Key 位于同一槽。order:{42}:detailorder:{42}:items 使用相同 Hash Tag {42} 可同槽,但把所有热门数据放到一个 Tag 会制造热点。

脑裂与保护边界

网络分区可能让旧主短时继续接受写入,而多数派一侧选出新主。配置节点超时、主库最少可用副本和复制延迟限制能降低风险,却要在可用性和数据安全之间权衡。上线前应演练断网、进程杀死、磁盘满、切换和旧主回归。

下一步

继续阅读07-06 分布式锁的正确边界,分析锁过期和故障切换为什么会让两个客户端都以为自己持锁。


分享这篇文章:

上一篇
RDB、AOF 与数据安全
下一篇
分布式锁的正确边界