Redis(9):Redis cluster簡介

一.redis replication的容量瓶頸問題

? ? ????我們知道redis replication+sentiel是單master節(jié)點(diǎn)多slave節(jié)點(diǎn)的這樣一個(gè)架構(gòu),這樣的話就會存在一個(gè)容量瓶頸問題。就是說,如果你的master節(jié)點(diǎn)的內(nèi)存容量為16G,那么就算你把所有的內(nèi)存都給redis使用的話,最大的緩存容量也就是16G,而每個(gè)slave節(jié)點(diǎn)的數(shù)據(jù)是跟slave節(jié)點(diǎn)是保持一致的,也就是說整個(gè)redis replication 集群的緩存容量為16G。當(dāng)你的數(shù)據(jù)接近16G的時(shí)候,redis就會執(zhí)行數(shù)據(jù)過期或淘汰算法,比如LRU。那么客戶端再請求那些被清除過的數(shù)據(jù)的時(shí)候,因?yàn)閞edis已經(jīng)將他清除,這時(shí)候就是直接去數(shù)據(jù)庫查詢數(shù)據(jù),這樣就會變相的降低系統(tǒng)的吞吐量,使系統(tǒng)能夠承受的并發(fā)量變低。

二.使用redis cluster集群架構(gòu)解決單master的容量瓶頸問題

? ? ? ? 我們再使用redis replication的時(shí)候,為了提升集群能夠承受的QPS我們會水平擴(kuò)容slave節(jié)點(diǎn),這樣就能比較輕松的增加redis replication集群的QPS。對于單master節(jié)點(diǎn)的容量瓶頸問題,我們也可以采取這個(gè)策略,如果redis集群中的master節(jié)點(diǎn)也可以水平擴(kuò)容的話,是不是就可以增加集群所能緩存的數(shù)據(jù)容量了。我們使用redis cluster便能夠?qū)崿F(xiàn)這個(gè)目標(biāo)。

三.redis cluster簡介?

1.redis cluster它可以支持多個(gè)master節(jié)點(diǎn),每個(gè)master可以掛載多個(gè)slave。

2.它也支持讀寫分離的架構(gòu),對于每個(gè)master節(jié)點(diǎn)來說,寫在master節(jié)點(diǎn),讀都會去這個(gè)master節(jié)點(diǎn)對應(yīng)的slave節(jié)點(diǎn)。

3.redis cluster也能保證高可用性,每個(gè)master節(jié)點(diǎn)有多個(gè)slave節(jié)點(diǎn),那么如果master掛掉,redis cluster會自動切換一個(gè)slave為master。

4.在redis cluster架構(gòu)下,每個(gè)redis要放開兩個(gè)端口號,比如一個(gè)是6379,另外一個(gè)就是加10000的端口號,比如16379

16379端口號是用來進(jìn)行節(jié)點(diǎn)間通信的,也就是cluster bus集群總線。cluster bus進(jìn)行通信,用來進(jìn)行故障檢測,配置更新,故障轉(zhuǎn)移授權(quán)。

5.cluster bus用了另外一種二進(jìn)制的協(xié)議,主要用于節(jié)點(diǎn)間進(jìn)行高效的數(shù)據(jù)交換,占用更少的網(wǎng)絡(luò)帶寬和處理時(shí)間。

四.redis cluster和redis replication如何選擇

? ? ? ? 如果你的數(shù)據(jù)量不大,一般只有幾個(gè)G,主要是應(yīng)對高并發(fā)的場景,那么你使用redis replication便足夠了。但是如果你的數(shù)據(jù)量很大,那么你就可以選擇redis cluster,它不僅可以支撐高并發(fā),高可用,還可以支持海量數(shù)據(jù)的場景。

五.數(shù)據(jù)分布算法:hash算法,一致性hash算法+虛擬節(jié)點(diǎn),redis cluster的hash slot算法簡介

1.hash算法

? ? ? ? hash算法是比較老的一種數(shù)據(jù)分布算法,當(dāng)客戶端要讀取一個(gè)key的時(shí)候,先計(jì)算這個(gè)key的hash值,然后使用這個(gè)值對當(dāng)前master節(jié)點(diǎn)的數(shù)量進(jìn)行取模,然后根據(jù)結(jié)果選擇對應(yīng)的master節(jié)點(diǎn)。

hash算法建議圖解

hash算法的弊端(大量緩存重建):在運(yùn)行的時(shí)候如果一臺master宕機(jī)了,那么會造成這臺機(jī)器上的所有緩存丟失,如果是三臺的話,立馬就會丟失三分之一的數(shù)據(jù)。但是這個(gè)算法還有一個(gè)弊端,如果其中一臺master宕機(jī)的話,那么當(dāng)前取模的數(shù)量就會減一,這要就會造成結(jié)果錯(cuò)位,這是什么意思呢?就是說本來有三臺master節(jié)點(diǎn),其中一臺宕機(jī)了,那么現(xiàn)在就以2取模,宕機(jī)發(fā)生的時(shí)候三分之一的數(shù)據(jù)就已經(jīng)沒有了,現(xiàn)在以2取模,本來結(jié)果為2的key說不定就會被指向其他的master,那么這部分?jǐn)?shù)據(jù)還是會取不到,直接造成大量的請求直接去數(shù)據(jù)庫拿數(shù)據(jù)。所以傳統(tǒng)的hash算法多用在數(shù)據(jù)庫分庫分表上,對應(yīng)高并發(fā)的緩存存儲會有不小的問題,對于高并發(fā)場景是不能接受的。

2.一致性hash算法(自動緩存遷移)+虛擬節(jié)點(diǎn)(自動負(fù)載均衡)

一致性hash算法的原理如下圖所示:

一致性hash算法的原理簡介

一致性hash算法的弊端:

一致性hash算法的弊端

使用虛擬節(jié)點(diǎn)來解決熱點(diǎn)數(shù)據(jù)問題

虛擬節(jié)點(diǎn)解決數(shù)據(jù)熱點(diǎn)問題

3.redis cluster的hash slot 算法

????????redis cluster有固定的16384個(gè)hash slot,對每個(gè)key計(jì)算CRC16值,然后對16384取模,可以獲取key對應(yīng)的hash slot,redis cluster中每個(gè)master都會持有部分slot,比如有3個(gè)master,那么可能每個(gè)master持有5000多個(gè)hash slot,hash slot讓node的增加和移除很簡單,增加一個(gè)master,就將其他master的hash slot移動部分過去,減少一個(gè)master,就將它的hash slot移動到其他master上去,移動hash slot的成本是非常低的。

redis hash slot 原理簡介

????????redis cluster 使用的hash? slot算法可以使請求均勻的打在每臺master上,即使一臺服務(wù)器宕機(jī),短時(shí)間內(nèi)這臺宕機(jī)的master上的數(shù)據(jù)不能訪問,但是redis cluster會快速的將這臺master上的hash slot 轉(zhuǎn)移到別的master上,其他master上的數(shù)據(jù)并不會受到影響,因?yàn)槊總€(gè)key都有它對應(yīng)的hash slot,而且移動這些hash slot速度很快,成本也很低。

? ? ? ? 如果你想要指定數(shù)據(jù)走指定的hash slot,redis cluster 也會有相應(yīng)的API可以實(shí)現(xiàn),通過hash tag實(shí)現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容