Redis三種叢集模式
系統中只有一臺redis伺服器是不可靠的,容易出現單點故障。為了避免單點故障,可以使用多臺redis伺服器組成redis叢集。redis支援三種叢集模式。
一、主從模式
至少需要兩臺redis伺服器,一臺主節點(master)、一臺從節點(slave),組成主從模式的Redis叢集。通常來說,master主要負責寫,slave主要負責讀,主從模式實現了讀寫分離。
叢集中有多臺redis節點,就必須保證每個節點中的資料是一致的。redis中,為了保持資料一致性,資料總是從master複製到slave,這就是redis的主從複製。
主從複製的作用:
資料冗餘:實現了資料的熱備份,是持久化之外的另一種資料冗餘方式
故障恢復:master故障時,slave可以提供服務,實現故障快速恢復
負載均衡:master負責寫,slave負責讀。在寫少讀多的場景下可以極大提高redis吞吐量
高可用基石:主從複製是redis哨兵模式和叢集模式的基礎。
主從複製實現原理:
主從複製過程主要可以分為3個階段:連線建立階段、資料同步階段、命令傳播階段。
連線建立階段:在主從節點之間建立連線,為資料同步做準備。
資料同步階段:執行資料的全量(或增量)複製(複製RDB檔案)
命令傳播階段:主節點將已執行的命令傳送給從節點,從節點接收命令並執行,從而實現主從節點的資料一致性
主從模式中,一個主節點可以有多個從節點。為了減少主從複製對主節點的效能影響,一個從節點可以作為另外一個從節點的主節點進行主從複製。
不足之處:主節點當機之後,需要手動拉起從節點來提供業務,不能達到高可用。
二、哨兵模式(Sentinel)
Redis Sentinel是Redis的高可用實現方案,它可以實現對redis的監控、通知和自動故障轉移,當redis master掛掉之後,可以自動拉起slave提供業務,從而實現redis的高可用。為了避免Sentinel本身出現單點故障,Sentinel自己也可採用叢集模式。
哨兵模式的原理
Sentinel是一種特殊的redis節點,每個sentinel節點會維護與其他redis節點(包括master/slave/sentinel)的心跳。
當一個sentinel節點與master節點的心跳丟失時,這個sentinel節點就會認為master節點出現了故障,處於不可用的狀態,這種判定叫作主觀下線(即sentinel節點自己主觀認為master下線了)
之後,這個sentinel節點會與其他sentinel節點交換資訊,如果發現認為主節點發生故障的sentinel節點的個數超過了某個閾值(通常為sentinel節點總數的1/2+1,即超過半數),則sentinel會認為master節點已經處於客觀下線的狀態,即大家都認為master故障不可用了。
之後,sentinel節點中會選舉處一個sentinel leader來執行redis主節點的故障轉移。
被選舉出的 Sentinel 領導者進行故障轉移的具體步驟如下:
(1)在從節點列表中選出一個節點作為新的主節點
過濾不健康或者不滿足要求的節點;
選擇 slave-priority(優先順序)最高的從節點, 如果存在則返回, 不存在則繼續;
選擇複製偏移量最大的從節點 , 如果存在則返回, 不存在則繼續;
選擇 runid 最小的從節點。
(2)Sentinel 領導者節點會對選出來的從節點執行 slaveof no one 命令讓其成為主節點。
(3)Sentinel 領導者節點會向剩餘的從節點傳送命令,讓他們從新的主節點上覆制資料。
(4)Sentinel 領導者會將原來的主節點更新為從節點, 並對其進行監控, 當其恢復後命令它去複製新的主節點。
三、叢集模式
主從模式實現了資料的熱備份,哨兵模式實現了redis的高可用。但是有一個問題,這兩種模式都沒有解決,這兩種模式都只能有一個master節點負責寫操作,在高併發的寫操作場景,master節點就會成為效能瓶頸。
redis的叢集模式中可以實現多個節點同時提供寫操作,redis叢集模式採用無中心結構,每個節點都儲存資料,節點之間互相連線從而知道整個叢集狀態。
如圖所示叢集模式其實就是多個主從複製的結構組合起來的,每一個主從複製結構可以看成一個節點,那麼上面的Cluster叢集中就有三個節點。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2871310/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis三種高可用模式:主從、哨兵、叢集Redis模式
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- Redis叢集部署的三種模式Redis模式
- 面試官:介紹一下 Redis 三種叢集模式面試Redis模式
- Windows系統搭建Redis叢集三種模式(零坑、最新版)WindowsRedis模式
- redis偽叢集配置Cluster叢集模式Redis模式
- 一文掌握Redis主從複製、哨兵、Cluster三種叢集模式Redis模式
- Redis Cluster叢集模式部署Redis模式
- 深入剖析Redis系列(三) - Redis叢集模式搭建與原理詳解Redis模式
- Redis Cluster叢集模式部署XRedis模式
- Redis叢集搭建(三主三從)Redis
- Redis叢集搭建 三主三從Redis
- Redis安裝之叢集-哨兵模式(sentinel)模式Redis模式
- Spring Boot整合Redis叢集(Cluster模式)Spring BootRedis模式
- 詳解Redis三大叢集模式,輕鬆實現高可用!Redis模式
- Redis學習筆記八:叢集模式Redis筆記模式
- Redis的三種叢集方式+穿透與雪崩的預防和解決Redis穿透
- redis叢集Redis
- redis 叢集Redis
- Spark3.0.1各種叢集模式搭建Spark模式
- Redis叢集模式和常用資料結構Redis模式資料結構
- redis Cluster模式叢集 多機器 docker 部署Redis模式Docker
- 深入剖析Redis系列(二) - Redis哨兵模式與高可用叢集Redis模式
- 一文讀懂Redis的四種模式,單機、主從、哨兵、叢集Redis模式
- Oracle的三種高可用叢集方案Oracle
- redis叢集原理Redis
- redis叢集搭建Redis
- 搭建 Redis 叢集Redis
- Redis cluster 叢集Redis
- redis系列:叢集Redis
- Redis Cluster(叢集)Redis
- Spring Boot(十三):整合Redis哨兵,叢集模式實踐Spring BootRedis模式
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式
- Redis叢集的三種方式詳解(附優缺點及原理區別)Redis
- 認識Redis叢集——Redis ClusterRedis
- 【Redis】用python操作redis叢集RedisPython
- 叢集,lvs負載均衡的四種工作模式負載模式
- 【Redis叢集原理專題】分析一下相關的Redis叢集模式下的腦裂問題!Redis模式