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

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

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

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

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


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

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

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

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

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

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

