主從模式
全量同步
- 首先主從同步過程第一步 會先比較
replication id
判斷是否是第一次同步 - 假設為第一次同步 那么就會 啟動
bgsave
異步生成RDB
同時fork子進程記錄生成期間的新數據 - 發送RDB給從節點 清空本地數據寫入RDB
增量同步
- 對比
ReplicationID
不同因此選擇增量同步 - 在Reply_Buffer中有一個環形緩沖區 以及Offset偏移量
- 對比完主從直接的偏移量差距后就可以選擇性的獲取需要增量同步的新數據
- 同時有一個問題 :如果超
出了環形緩沖區
那么就需要進行一次全量同步在進行增量同步
哨兵模式
哨兵的主要作用:
監控、選主、通知
哨兵選選舉過程:
- 首先通過心跳機制發Ping 如果沒響應就會主觀認為主節點下線
- 向其他Sentinel請求 進行半數選舉 如果超過半數Sentinel認為節點下線就為客觀下線
- 優先選舉數據最全最合適的節點為主節點
集群模式
Cluster分片集群
分片集群將所有節點的存儲分為16384
個槽位
所有要存儲的數據根據Key值進行Hash
映射后分到具體的槽位
具體的映射算法:
Redis Cluster 是 Redis 實現“分布式+高可用”的集群方式,而 Sentinel 是在“單主結構”下提供“高可用”的方案。Cluster 更強,但也更復雜;Sentinel 更簡單,但擴展性有限。
如果cluster出現故障 會自動選舉主節點 故障轉移 并且重新分配Hash槽位