Redis集群部署模式的不同實現(xiàn)過程
redis集群就是多個redis節(jié)點一起工作的模式。它沒有代理節(jié)點和中心節(jié)點,各個節(jié)點平等,強化redis的讀寫能力。
是一種分布式集群模式,它允許將數(shù)據(jù)分散存儲在多個節(jié)點上,從而提供了橫向擴展、高可用性和更大存儲容量。
1、集群模式
通過添加服務(wù)器的數(shù)量,提供相同的服務(wù),從而讓服務(wù)器達到一個穩(wěn)定、高效的狀態(tài)。
1.1. 主從復(fù)制模式(Master-Slave Replication)
1.描述:
在這種模式下,Redis 實例可以設(shè)置為主節(jié)點(Master)和從節(jié)點(Slave)。主節(jié)點負責(zé)處理所有的讀寫請求,從節(jié)點負責(zé)部分讀請求,從節(jié)點自動從主節(jié)點進行數(shù)據(jù)復(fù)制。
如下圖所示:

2.原理:
根據(jù)從數(shù)據(jù)集id(繼承master的id)和offset偏移量來進行判斷。
如果是首次同步,會保存master的數(shù)據(jù)集id和offset,同時將rdb文件或者aof文件,發(fā)送baklog命令給從節(jié)點,增量同步數(shù)據(jù)。
如下圖所示:

3.優(yōu)點:
- 提高可用性:如果主節(jié)點宕機,可以快速將一個從節(jié)點提升為主節(jié)點。
- 提高性能:可以把讀取請求分配給從節(jié)點,減少主節(jié)點的負載。
4.缺點:
- 寫負載集中在主節(jié)點,可能成為性能瓶頸。
- 從節(jié)點的延遲:從節(jié)點數(shù)據(jù)同步存在延遲,讀操作可能獲得過時的數(shù)據(jù)。
1.2. Redis 集群模式(Cluster Mode)
1.描述:
- Redis 集群模式是 Redis 提供的分布式數(shù)據(jù)庫解決方案,允許將數(shù)據(jù)分布在多個 Redis 實例上。它支持水平擴展(sharding),使得集群能夠處理的數(shù)據(jù)量遠超個別節(jié)點承載的能力。
- 每個分片由一組 Master/Slave 節(jié)點管理,而不是依賴于單一節(jié)點的垂直擴展。
如下圖所示:

通常集群模式下:可以進行一主多從、一主一從的方式。下面會進行深入了解。
2.工作原理
- 數(shù)據(jù)被劃分為 16384 個槽(slot),每個新的數(shù)據(jù)鍵會被映射到這些槽上。
- 每個主節(jié)點管理一些槽,從節(jié)點負責(zé)主節(jié)點的數(shù)據(jù)備份。
- 使用哈希槽將鍵映射到節(jié)點,確保數(shù)據(jù)均勻分配。
如下圖所示:

3.優(yōu)點
- 每個節(jié)點獨立處理寫請求,能夠有效分散寫負載。
- 橫向擴展的方式更加靈活,可以適應(yīng)不同的工作負載和數(shù)據(jù)規(guī)模。
4.缺點
- 集群管理相對復(fù)雜,要求一致性保證和槽管理。
- 節(jié)點間的網(wǎng)絡(luò)分裂(network partition)會影響數(shù)據(jù)的可用性。
1.3. 哨兵模式(Sentinel Mode)
1.描述:
Sentinel 是 Redis 提供的高可用性解決方案,主要用于監(jiān)控和故障轉(zhuǎn)移。Sentinel 可以監(jiān)控主節(jié)點和從節(jié)點的健康狀態(tài),并在主節(jié)點宕機時進行自動切換。
如下圖所示:


2.工作原理
- Sentinel 監(jiān)控 Redis 實例的狀態(tài),確定主節(jié)點是否正常。
- 在主節(jié)點不可用時,Sentinel 會選擇一個從節(jié)點提升為新的主節(jié)點,并更新客戶端的主節(jié)點信息。
如下圖所示:

3.優(yōu)點:
- 提高系統(tǒng)的可靠性和可用性,支持自動故障轉(zhuǎn)移。
- Sentinel 可以作為集群的監(jiān)控和通知工具,支持集群的維護。
4.缺點:
- 需要更為復(fù)雜的配置和管理。
- 在多臺 Sentinel 實例中,復(fù)雜的選舉過程可能會產(chǎn)生延遲。
1.4. Redis Cluster + Sentinel
1.描述:
結(jié)合使用 Redis 集群和 Sentinel,充分利用二者的優(yōu)勢。Redis 集群處理數(shù)據(jù)分片,Sentinel 監(jiān)控和維護集群的高可用性。
2.應(yīng)用場景:
對于大型應(yīng)用,需要高可用性和可擴展性的場景,結(jié)合使用集群模式和 Sentinel 模式。
3.優(yōu)點:
1、將數(shù)據(jù)自動切分(split)到多個節(jié)點
2、當(dāng)集群中的某一個節(jié)點故障時,redis還可以繼續(xù)處理客戶端的請求。
總結(jié):
Redis 提供的多種集群模式適用于不同的場景:
- 主從復(fù)制:適用于基礎(chǔ)的數(shù)據(jù)冗余和讀負載分擔(dān)。
- Redis 集群模式:適用于大規(guī)模的數(shù)據(jù)存儲與處理,支持水平擴展。
- 哨兵模式:確保高可用性,并支持自動故障轉(zhuǎn)移。
- Redis Cluster + Sentinel:適用于需要高可靠性和可擴展性的復(fù)雜應(yīng)用。
關(guān)于哨兵模式和cluster+哨兵模式區(qū)別

關(guān)于上面幾種模式的區(qū)別,可以得出以下的結(jié)論:

2. 最小節(jié)點配置
在 Redis 集群中,為了確保高可用性和故障恢復(fù),建議至少配置以下節(jié)點:
如下圖所示:

每個 Slave 都是對應(yīng) Master 的備份。當(dāng) Master 節(jié)點發(fā)生故障時,對應(yīng)的 Slave 節(jié)點會自動升級為新的 Master,保持數(shù)據(jù)的可用性。
2.1、最小節(jié)點配置
主節(jié)點(Master Nodes):
最少需要 3 個主節(jié)點。這可以確保在某個主節(jié)點失效的情況下,集群仍然能夠提供服務(wù)。
從節(jié)點(Replica Nodes):
至少需要 3 個從節(jié)點,每個主節(jié)點對應(yīng)一個從節(jié)點,用于數(shù)據(jù)備份和故障轉(zhuǎn)移。
2.2、整體配置
因此,最小的集群配置為 6 個節(jié)點:
- 3 個主節(jié)點
- 3 個從節(jié)點
2.3、理由
- 主節(jié)點: 提供讀寫服務(wù),負責(zé)處理客戶端請求和數(shù)據(jù)存儲。
- 從節(jié)點: 作為主節(jié)點的數(shù)據(jù)備份,提供數(shù)據(jù)副本和讀取負載分擔(dān)。
2.4、故障恢復(fù)
在以上配置中:
- 如果一個主節(jié)點失效,集群可以通過從節(jié)點的副本自動進行故障轉(zhuǎn)移(即選舉一個從節(jié)點提升為新的主節(jié)點),確保服務(wù)的持續(xù)可用性。
- 由于至少有 3 個主節(jié)點,可以保證在最多 1 個主節(jié)點失效的情況下,仍然能夠通過剩余的主節(jié)點維持集群的正常運行。
如果希望更具恢復(fù)能力和負載均衡,可以增加主節(jié)點和從節(jié)點的數(shù)量,常見的做法是保持主從節(jié)點的比例為 1:1。
而對于集群為什么要三個master節(jié)點原因,并且推薦為奇數(shù)?
- 新master的選舉需要大于半數(shù)的集群master節(jié)點同意才能選舉成功,如果只有兩個master節(jié)點,當(dāng)其中一個掛了,是達不到選舉新master的條件的。
- 而奇數(shù)的master節(jié)點更多的是 從節(jié)省機器資源角度出發(fā)。
3. 單主多從
整體結(jié)構(gòu)如下圖所示:

3.1、優(yōu)勢:
容錯:
如果主節(jié)點出現(xiàn)故障,Redis 可以提升一個從節(jié)點為新的主節(jié)點。即使有一個主節(jié)點出現(xiàn)故障,仍然有多個從節(jié)點作為冗余,確保數(shù)據(jù)的可靠性和業(yè)務(wù)的持續(xù)性。
負載均衡:
在高讀負載的應(yīng)用場景中,可以將讀取請求分配到從節(jié)點,減輕主節(jié)點的壓力。這種方式可以提高性能,特別是在讀操作遠比寫操作頻繁的情況下。
節(jié)省資源:
對于一些小型應(yīng)用或開發(fā)階段的項目,配置一個主節(jié)點和多個從節(jié)點可以有效利用資源,而不是部署更多的主節(jié)點。
4. 配置實例
4.1、單主雙從
非常適合讀取較多,但對寫入頻率要求不高的場景。
例如,很多數(shù)據(jù)可以讀,但修改數(shù)據(jù)的頻率較低。
4.2、3 主 3 從
更適合需要高可用性的系統(tǒng),能夠處理更高的寫負載并提供更強的故障恢復(fù)能力。
5. 選擇配置
在選擇主從節(jié)點配置時,可以考慮以下因素:
系統(tǒng)負載:
- 寫入負載較重的情況下,建議使用多主。
- 若以讀取為主,單主多從則較為合適。
冗余需求:
- 對業(yè)務(wù)連續(xù)性要求較高,建議使用多個主節(jié)點,在高可用性場景下要確保系統(tǒng)穩(wěn)定。
成本和資源:
- 根據(jù)可用資源和成本預(yù)算,可能會選擇較少的節(jié)點配置,特別是在開發(fā)或小型應(yīng)用中。
總結(jié)
3 主節(jié)點 + 3 從節(jié)點的配置是確保高可用性的最小標(biāo)準配置。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
redis事務(wù)執(zhí)行常用命令及watch監(jiān)視詳解
這篇文章主要為大家介紹了redis事務(wù)執(zhí)行常用命令及watch監(jiān)視詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
Redis生成分布式系統(tǒng)全局唯一ID的實現(xiàn)
在互聯(lián)網(wǎng)系統(tǒng)中,并發(fā)越大的系統(tǒng),數(shù)據(jù)就越大,數(shù)據(jù)越大就越需要分布式,本文主要介紹了Redis生成分布式系統(tǒng)全局唯一ID的實現(xiàn),感興趣的可以了解一下2021-10-10
Redis數(shù)據(jù)備份與恢復(fù)方式的五種方式
本文主要介紹了Redis數(shù)據(jù)備份與恢復(fù)方式,包含了五種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07

