一、核心概念與關系
Redis 的?主從復制、哨兵(Sentinel)?和?集群(Cluster)?是逐步演進的高可用與分布式解決方案,三者關系如下:
-
主從復制:數據冗余與讀寫分離的基礎。
-
哨兵:在主從基礎上實現自動故障轉移(高可用)。
-
集群:在分片(Sharding)基礎上集成主從復制和自動故障轉移(分布式+高可用)。
三者關系可總結為:
-
主從復制?是數據同步的基礎機制。
-
哨兵?是主從的增強,提供故障檢測與自動切換。
-
集群?是更高維度的分布式架構,融合主從復制和分片技術。
二、主從復制(Master-Slave Replication)
1. 核心作用
-
數據冗余:從節點(Slave)復制主節點(Master)數據,實現備份。
-
讀寫分離:主節點處理寫請求,從節點處理讀請求,提升讀吞吐量。
2. 工作原理
-
全量同步:
-
從節點首次連接主節點時,主節點生成 RDB 快照發送給從節點。
-
從節點加載 RDB 文件完成初始數據復制。
-
-
增量同步:
-
主節點將寫命令寫入?復制緩沖區(Replication Buffer)。
-
從節點持續接收并執行緩沖區中的命令,保持數據一致性。
-
3. 架構局限
-
單點故障:主節點宕機后需手動切換從節點為主節點。
-
寫性能瓶頸:所有寫操作集中在主節點。
三、哨兵(Sentinel)
1. 核心作用
-
監控:持續檢查主從節點健康狀態。
-
自動故障轉移:主節點宕機時,選舉新主節點并通知客戶端。
-
配置中心:客戶端通過哨兵獲取最新的主節點地址。
2. 工作原理
-
監控階段:
-
哨兵通過定期發送?
PING
?命令檢測節點狀態。 -
若主節點未響應,哨兵將其標記為?主觀下線(SDOWN)。
-
-
選舉階段:
-
多個哨兵協商確認主節點?客觀下線(ODOWN)。
-
哨兵通過 Raft 算法選舉?領導者哨兵?負責故障轉移。
-
-
故障轉移:
-
領導者哨兵從從節點中選出新主節點(基于優先級、復制偏移量等)。
-
通知其他從節點復制新主節點,并更新客戶端連接。
-
3.經典架構
-
+------------+ | Sentinel | +------------+ | +------------+ | +------------+ | Master |<----+----->| Slave 1 | +------------+ +------------+ | v +------------+ | Slave 2 | +------------+
4.適用場景
-
中小規模 Redis 服務,需要高可用但無需水平擴展
四、Redis 集群(Cluster)
1. 核心作用
-
數據分片(Sharding):將數據分布到多個節點,突破單機內存限制。
-
高可用:每個分片(Shard)采用主從復制,支持自動故障轉移。
2. 工作原理
-
分片機制:
-
集群將數據劃分為?16384 個哈希槽(Slot),每個節點負責部分槽。
-
客戶端通過?
CRC16(key) % 16384
?計算 key 所屬槽,路由到對應節點。
-
-
節點通信:
-
節點間通過?Gossip 協議?交換狀態信息(如槽分配、節點狀態)。
-
-
故障轉移:
-
若主節點宕機,其從節點通過?選舉機制?升級為新主節點(類似哨兵)。
-
客戶端自動重定向到新主節點。
-
3. 典型架構
+----------------+ +----------------+
| Master 1 |<----->| Slave 1-1 |
| (Slots 0-5460) | | (Replica) |
+----------------+ +----------------+ | v
+----------------+ +----------------+
| Master 2 |<----->| Slave 2-1 |
| (Slots 5461-10922)| | (Replica) |
+----------------+ +----------------+ | v
+----------------+ +----------------+
| Master 3 |<----->| Slave 3-1 |
| (Slots 10923-16383) | | (Replica) |
+----------------+ +----------------+
4. 關鍵特性
-
數據遷移:支持動態增刪節點,槽可重新分配。
-
跨槽操作限制:
MGET
、MSET
?等命令需所有 key 在同一節點,否則需用?{hash_tag}
?強制路由。
5. 適用場景
-
大規模數據存儲,需水平擴展和高可用性。
五、三者對比總結
特性 | 主從復制 | 哨兵模式 | 集群模式 |
---|---|---|---|
核心目標 | 數據冗余、讀寫分離 | 高可用(自動故障轉移) | 分布式存儲 + 高可用 |
數據分布 | 全量復制 | 全量復制 | 分片(16384 槽) |
故障處理 | 手動切換 | 自動切換 | 自動切換(內置哨兵邏輯) |
擴展性 | 垂直擴展(單機) | 垂直擴展 | 水平擴展(多節點分片) |
適用場景 | 小型應用 | 中小型高可用場景 | 大型分布式系統 |
六、常見問題解答
Q1:集群模式下還需要哨兵嗎?
-
不需要。集群內置了故障檢測與轉移邏輯,無需額外部署哨兵。
Q2:主從復制能否與集群共存?
-
可以。集群中的每個分片(主節點)可配置多個從節點,形成“主從+集群”架構。
Q3:如何選擇架構?
-
數據量小 + 高可用需求?→ 哨兵模式。
-
數據量大 + 高可用需求?→ 集群模式。
Q4:集群的故障轉移時間?
-
通常 10~30 秒,依賴節點狀態檢測和選舉機制。