10 redis cluster 集群暢談一

前面講解了關(guān)于redis單機在大 數(shù)據(jù)量情況的所出現(xiàn)的瓶頸問題甜橱,并講解了通過redis 主從架構(gòu)和 哨兵集群結(jié)合葵腹,實現(xiàn)99.99% 高可用 咆畏、水平擴容支持更高QPS的解決方案燃异。

在大數(shù)據(jù)量面前,主從架構(gòu)結(jié)合哨兵集群的解決方案在復(fù)雜的配置下就顯得有些捉襟見肘了夯膀;數(shù)據(jù)量越大诗充,就愈明顯。所以本章從海量數(shù)據(jù)出發(fā)棍郎,redis cluster 集群架構(gòu)以更少的配置做更多的事其障。

redis cluster 集群架構(gòu) 的優(yōu)勢在哪呢?

  • 支持水平擴容 N個redis master node涂佃,并且每個master node同樣可以掛載 N 個 slave node

  • 讀寫分離的架構(gòu)(這個概念其實在redis cluster就沒有了,但是可以做蜈敢,因為redis cluster 更強調(diào)的是水平擴容)

  • 高并發(fā)

  • 高可用(無需sentinel 哨兵監(jiān)控辜荠,如果master 掛了,redis cluster 內(nèi)部自動 將slave 切換 master)

  • 配置減少(相對 replication + sentinal 而已抓狭,就不需要手動搭建replication復(fù)制+主從架構(gòu)+讀寫分離+哨兵集群+高可用了)

redis cluster 和 replication + sentinal 比較伯病?

  • 兩者都是解決redis 單機瓶頸問題(宕機不可用,低QPS,性能差等)
  • 根據(jù)自身數(shù)據(jù)需求選擇合適解決方案
    • 數(shù)據(jù)量很少(幾個G)午笛,redis 單機就可以解決
    • 數(shù)據(jù)量大惭蟋, 一主多從(1 master N slave ,具體根據(jù)自身讀吞吐量而定) + 哨兵集群(sentinal 保證高可用)
    • 海量數(shù)據(jù)药磺,redis cluster 集群(N master N slave 告组, 海量數(shù)據(jù) + 高并發(fā)+ 高可用)


      replication + sentinal vs redis cluster

redis cluster 數(shù)據(jù)分片

redis cluster 會對數(shù)據(jù)進(jìn)行自動分片,將數(shù)據(jù)分配到每個Master 上(自動的負(fù)載均衡)

redis cluster 所有節(jié)點直接都是相互連接的癌佩,它要求開放兩個端口木缝,一個端口負(fù)責(zé)對外數(shù)據(jù)交換(port:6379),另外一個端口用來內(nèi)部通信(port : 6379 + 10000 = 16379)围辙,也就是集群總線的通信(cluster bus)

  • cluster bus 用來進(jìn)行故障檢測我碟,配置更新,故障轉(zhuǎn)移授權(quán)
  • cluster bus 使用一種二進(jìn)制的協(xié)議姚建,主要用于節(jié)點間進(jìn)行高效的數(shù)據(jù)交換矫俺,占用更少的網(wǎng)絡(luò)帶寬和處理時間
redis cluster 使用什么樣的算法保證數(shù)據(jù)分片?
首先講下最原始的的 Hash 算法掸冤,如下圖所示:
hash 算法
其次講下一致性 Hash 算法(自動緩存遷移) + 虛擬節(jié)點(自動負(fù)載均衡)
一致性Hash算法

一致性hash 算法 一定程度上解決了node宕機后的大部分?jǐn)?shù)據(jù)失效問題恳守,但是也會導(dǎo)致node 的熱點問題,降低性能贩虾,這個又該怎么解決呢催烘? 可以通過增加虛擬節(jié)點的方式 讓 hash 點散落更均勻 ,不光能解決熱點問題缎罢,還可以達(dá)到自動的負(fù)載均衡效果伊群。

一致性 Hash 算法(自動緩存遷移) + 虛擬節(jié)點(自動負(fù)載均衡)
redis cluster 采用的是 hash slot 算法

redis cluster 擁有固定的16384個slot (槽) ;這個槽是虛擬的策精,并不是真正存在舰始。slot 被 分布到 各個master 中,當(dāng) 某個key 映射到 某個master 負(fù)責(zé)的槽時咽袜,就由對應(yīng)的master 為key 提供服務(wù)

在redis cluster 中丸卷,只有master 才擁有對slot的所有權(quán),slave 只負(fù)責(zé)使用 slot询刹,并沒有所有權(quán)谜嫉。

那么 redis Cluster 又是如何知道哪些槽是由哪些節(jié)點負(fù)責(zé)的呢?Master 又是如何知道哪個槽是自己的呢凹联?
位序列結(jié)構(gòu)(節(jié)約存儲空間)

每個Master節(jié)點都維護(hù)著一個位序列沐兰,為16384 / 8 字節(jié);Master 節(jié)點 通過 bit 來標(biāo)識哪些槽自己是否擁有蔽挠。比如對于編號為1的槽住闯,Master只要判斷序列的第二位(索引從0開始)是不是為1即可。

集群同時維護(hù)著槽與集群節(jié)點的映射關(guān)系,由16384個長度的數(shù)組記錄比原,槽編號為數(shù)組的下標(biāo)插佛,數(shù)組內(nèi)容為集群節(jié)點,這樣就可以很快地通過槽編號找到負(fù)責(zé)這個槽的節(jié)點量窘。

鍵空間分布基本算法
下面看下redis cluster 是通過什么樣的方式進(jìn)行 分片存儲的

key 與 slot 的映射算法公式如下:

HASH_SLOT=CRC16(key) mod 16384

redis cluster 通過對每個key計算CRC16值雇寇,然后對16384取模,可以獲取key對應(yīng)的hash slot绑改,對于一批量數(shù)谢床,如果想讓批量數(shù)據(jù)都在同一個slot,可以通過hash tag來實現(xiàn)

redis cluster中每個master都會持有部分slot厘线,比如有3個master识腿,那么可能每個master持有5000多個hash slot

hash slot 讓 node 的增加和移除很簡單,增加一個master造壮,就將其他master的hash slot移動部分過去渡讼,減少一個master,就將它的hash slot移動到其他master上去

移動 hash slot 的成本是非常低的

由于 16384 是固定的耳璧,當(dāng)某個master 宕機時成箫,不會影響其他機器的數(shù)據(jù),因為key 找得是hash slot 旨枯,而不是機器

好了蹬昌,本章的 redis cluster 集群分析 就到這里。

以上就是本章內(nèi)容攀隔,如有不對的地方皂贩,請多多指教,謝謝昆汹!

為了方便有需要的人明刷,本系列全部軟件都在 https://pan.baidu.com/s/1qYsJZfY

下章預(yù)告:主要講解 redis cluster集群部署

作者:逐暗者 (轉(zhuǎn)載請注明出處)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市满粗,隨后出現(xiàn)的幾起案子辈末,更是在濱河造成了極大的恐慌,老刑警劉巖映皆,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挤聘,死亡現(xiàn)場離奇詭異,居然都是意外死亡劫扒,警方通過查閱死者的電腦和手機檬洞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沟饥,“玉大人,你說我怎么就攤上這事∠涂酰” “怎么了广料?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幼驶。 經(jīng)常有香客問我艾杏,道長,這世上最難降的妖魔是什么盅藻? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任购桑,我火速辦了婚禮,結(jié)果婚禮上氏淑,老公的妹妹穿的比我還像新娘勃蜘。我一直安慰自己,他們只是感情好假残,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布缭贡。 她就那樣靜靜地躺著,像睡著了一般辉懒。 火紅的嫁衣襯著肌膚如雪阳惹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天眶俩,我揣著相機與錄音莹汤,去河邊找鬼。 笑死颠印,一個胖子當(dāng)著我的面吹牛纲岭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嗽仪,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼荒勇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闻坚?” 一聲冷哼從身側(cè)響起沽翔,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窿凤,沒想到半個月后仅偎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡雳殊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年橘沥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夯秃。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡座咆,死狀恐怖痢艺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情介陶,我是刑警寧澤堤舒,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站哺呜,受9級特大地震影響舌缤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜某残,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一国撵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玻墅,春花似錦介牙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赏酥,卻和暖如春喳整,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裸扶。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工框都, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呵晨。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓魏保,卻偏偏與公主長得像,于是被迫代替她去往敵國和親摸屠。 傳聞我的和親對象是個殘疾皇子谓罗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 本文檔翻譯自 http://redis.io/topics/cluster-tutorial 。 本文檔是 Red...
    會跳舞的機器人閱讀 66,919評論 2 21
  • Redis Cluster介紹 redis cluster是Redis的分布式解決方案季二,在3.0版本推出后有效地解...
    dayspring閱讀 10,982評論 0 3
  • 基本目標(biāo)與設(shè)計基本思想 Redis cluster 目標(biāo) 高性能檩咱,并且能線性擴展到1000個節(jié)點。不需要代理胯舷,使用...
    tafeng閱讀 2,756評論 0 0
  • Redis Cluster Redis Cluster是Redis官方在Redis 3.0版本正式推出的高可用以及...
    Springlin閱讀 3,769評論 1 5
  • 斷斷續(xù)續(xù)跑步已三年有余刻蚯,有一些心得體會想要與你分享。 ? 跑前的準(zhǔn)備: 1.裝備 我比較喜歡夏季跑步桑嘶,因為裝備比較...
    LogicBang閱讀 335評論 5 1