10.1圆裕、數(shù)據(jù)分布

Redis cluster是Redis的分布式解決方案,在3.0版本正式推出耗绿,有效地解決了Redis分布式方面的需求。當(dāng)遇到單機(jī)內(nèi)存砾隅、并發(fā)误阻、流量等瓶頸時(shí),可以采用Cluster架構(gòu)方案達(dá)到負(fù)載均衡的目的晴埂。之前究反,Redis分布式方案一般有兩種:

  • 客戶端分區(qū)方案,優(yōu)點(diǎn)是分區(qū)邏輯可控儒洛,缺點(diǎn)是需要自己處理數(shù)據(jù)路由精耐、高可用、故障轉(zhuǎn)移等問(wèn)題琅锻。

  • 代理方案卦停,優(yōu)點(diǎn)是簡(jiǎn)化客戶端分布式邏輯和升級(jí)維護(hù)便利,缺點(diǎn)是家中架構(gòu)部署復(fù)雜度和性能損耗浅浮。

現(xiàn)在官方為我們提供了專有的集群方案:Redis Cluster沫浆,它非常優(yōu)雅地解決了Redis集群方面的問(wèn)題,因此理解好Redis Cluster將極大地解放我們使用分布式Redis的工作量滚秩,同時(shí)他也是學(xué)習(xí)分布式存儲(chǔ)的絕佳案例。

本章將從數(shù)據(jù)分布淮捆、搭建集群郁油、節(jié)點(diǎn)通信、集群伸縮攀痊、請(qǐng)求路由桐腌、故障轉(zhuǎn)移、集群運(yùn)維幾個(gè)方面介紹Redis Cluster苟径。

數(shù)據(jù)分布

  1. 數(shù)據(jù)分布理論

    分布式數(shù)據(jù)庫(kù)首先要解決把整個(gè)數(shù)據(jù)集按照分區(qū)規(guī)則映射到多個(gè)節(jié)點(diǎn)的問(wèn)題案站,即把數(shù)據(jù)集劃分到多個(gè)節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)負(fù)責(zé)整體數(shù)據(jù)的一個(gè)自己

    需要重點(diǎn)關(guān)注的是數(shù)據(jù)分區(qū)規(guī)則棘街。常見(jiàn)的分區(qū)規(guī)則有哈希分區(qū)和順序分區(qū)兩種蟆盐,下表對(duì)這兩種分區(qū)規(guī)則進(jìn)行了對(duì)比承边。

    分區(qū)方式 特點(diǎn) 代表產(chǎn)品
    哈希分區(qū) 1.離散度好;2.數(shù)據(jù)分布業(yè)務(wù)無(wú)關(guān)石挂;3.無(wú)法順序訪問(wèn) Redis Cluster博助;Cassandra;Dynamo
    順序分區(qū) 1.離散度易傾斜痹愚;2.數(shù)據(jù)分布業(yè)務(wù)相關(guān)富岳;3.可順序訪問(wèn) Bigtable;HBase拯腮;Hypertable

    由于Redis Cluster采用哈希分區(qū)規(guī)則窖式,這里我們重點(diǎn)討論哈希分區(qū),常見(jiàn)的哈希分區(qū)規(guī)則有幾種动壤,下面分別介紹:

    1. 節(jié)點(diǎn)取余分區(qū)

      使用特定的數(shù)據(jù)脖镀,如Redis的鍵或用戶ID,再根據(jù)節(jié)點(diǎn)數(shù)量N使用公式:hash(key)%N計(jì)算出哈希值狼电,用來(lái)決定數(shù)據(jù)映射到哪一個(gè)節(jié)點(diǎn)上蜒灰。這種方案存在一個(gè)問(wèn)題:當(dāng)節(jié)點(diǎn)數(shù)量變化時(shí),如擴(kuò)容或收縮節(jié)點(diǎn)肩碟,數(shù)據(jù)節(jié)點(diǎn)映射關(guān)系需要重新計(jì)算强窖,會(huì)導(dǎo)致數(shù)據(jù)的重新遷移。

      這種方式的突出優(yōu)點(diǎn)是簡(jiǎn)單性削祈,常用語(yǔ)數(shù)據(jù)庫(kù)的分庫(kù)分表會(huì)澤翅溺,一般采用預(yù)分區(qū)的方式,提前根據(jù)數(shù)據(jù)量規(guī)劃好分區(qū)數(shù)髓抑,比如劃分為512或1024章表咙崎,保證可支撐未來(lái)一段時(shí)間的數(shù)據(jù)量,再根據(jù)負(fù)載情況將表遷移到其他數(shù)據(jù)庫(kù)中吨拍。擴(kuò)容是通常采用翻倍擴(kuò)容褪猛,避免數(shù)據(jù)映射全部被打亂導(dǎo)致全量遷移的情況。

    2. 一致性哈希分區(qū)

      一致性哈希分區(qū)(Distributed Hash Table)實(shí)現(xiàn)思路是為系統(tǒng)中每個(gè)節(jié)點(diǎn)分配一個(gè)token羹饰,范圍一般在0~2^32伊滋,這些token構(gòu)成一個(gè)哈希環(huán)。數(shù)據(jù)讀寫(xiě)執(zhí)行節(jié)點(diǎn)查找操作時(shí)队秩,先根據(jù)key計(jì)算hash值笑旺,然后順時(shí)針找到第一個(gè)大于等于該哈希值的token節(jié)點(diǎn)。

      這種方式相比節(jié)點(diǎn)取余最大的好處在于加入和刪除節(jié)點(diǎn)只影響哈希環(huán)中相鄰的節(jié)點(diǎn)馍资,對(duì)其他節(jié)點(diǎn)無(wú)影響筒主。但一致性哈希分區(qū)存在幾個(gè)問(wèn)題:

      • 加減節(jié)點(diǎn)會(huì)造成哈希環(huán)中部分?jǐn)?shù)據(jù)無(wú)法命中,需要手動(dòng)處理或者忽略這部分?jǐn)?shù)據(jù),因此一致性哈希常用于緩存場(chǎng)景乌妙。

      • 當(dāng)時(shí)用少量節(jié)點(diǎn)是使兔,節(jié)點(diǎn)變化將大范圍影響哈希環(huán)中數(shù)據(jù)映射,因此這種方式不適合少量數(shù)據(jù)節(jié)點(diǎn)的分布式方案冠胯。

      • 普通的一致性哈希分區(qū)在增減節(jié)點(diǎn)是需要增加一倍或者減去一半節(jié)點(diǎn)才能保證數(shù)據(jù)和負(fù)載的均衡火诸。

      正因?yàn)橐恢滦怨7謪^(qū)的這些缺點(diǎn),一些分布式系統(tǒng)采用虛擬槽對(duì)一致性哈希進(jìn)行改進(jìn)荠察,比如Dynamo系統(tǒng)置蜀。

    3. 虛擬槽分區(qū)

      虛擬槽分區(qū)巧妙地使用了哈希空間悉盆,使用分散度良好的哈希函數(shù)把所有數(shù)據(jù)映射到一個(gè)固定范圍的整數(shù)集合中盯荤,整數(shù)定義為槽(slot)。這個(gè)范圍一般遠(yuǎn)遠(yuǎn)大于節(jié)點(diǎn)數(shù)焕盟,比如Redis Cluster槽范圍是0~16383.槽是集群內(nèi)數(shù)據(jù)管理和遷移的基本單位秋秤。采用大范圍槽的主要目的是為了方便數(shù)據(jù)拆分和集群擴(kuò)展。每個(gè)節(jié)點(diǎn)會(huì)負(fù)責(zé)一定數(shù)量的槽脚翘。

  2. Redis數(shù)據(jù)分區(qū)

    Redis Cluster采用虛擬槽分區(qū)灼卢,所有的鍵根據(jù)哈希函數(shù)映射到0~16383整數(shù)槽內(nèi),計(jì)算公式:slot=CRC16(key)&16383来农。每一個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所映射的鍵值數(shù)據(jù)鞋真。

    Redis虛擬槽的分區(qū)的特點(diǎn):

    • 解耦數(shù)據(jù)和節(jié)點(diǎn)之間的關(guān)系,簡(jiǎn)化了節(jié)點(diǎn)擴(kuò)容和收縮難度沃于。

    • 節(jié)點(diǎn)自身維護(hù)槽的映射關(guān)系涩咖,不需要客戶端或者代理服務(wù)維護(hù)槽分區(qū)元數(shù)據(jù)。

    • 支持節(jié)點(diǎn)繁莹、槽檩互、鍵之間的映射查詢,用于數(shù)據(jù)路由咨演、在線伸縮等場(chǎng)景闸昨。

    數(shù)據(jù)分區(qū)是分布式存儲(chǔ)的核心,理解和靈活運(yùn)用數(shù)據(jù)分區(qū)規(guī)則對(duì)于掌握Redis Cluster非常有幫助雪标。

  3. 集群功能限制

    Redis集群相對(duì)單機(jī)在功能上存在一些限制零院,需要開(kāi)發(fā)人員提前了解,在使用時(shí)做好規(guī)避村刨。限制如下:

    • key批量操作支持有限。如mset撰茎、mget嵌牺,目前只支持具有相同slot值的key執(zhí)行批量操作。對(duì)于映射為不同slot值的key由于執(zhí)行mset、mget等操作可能存在于多個(gè)節(jié)點(diǎn)上因此不被支持逆粹。

    • key事務(wù)操作支持有限募疮。同理只支持多key在同一節(jié)點(diǎn)上的事務(wù)操作,當(dāng)多個(gè)key分布在不同的節(jié)點(diǎn)上時(shí)無(wú)法使用事務(wù)功能僻弹。

    • key作為數(shù)據(jù)分區(qū)的最小粒度阿浓,因此不能將一個(gè)大的鍵值對(duì)象如hash、list等映射到不同的節(jié)點(diǎn)蹋绽。

    • 不支持多數(shù)據(jù)庫(kù)空間芭毙。單機(jī)下的Redis可以支持16個(gè)數(shù)據(jù)庫(kù),集群模式下只能使用一個(gè)數(shù)據(jù)庫(kù)空間卸耘,即 db 0退敦。

    • 復(fù)制結(jié)構(gòu)支持一層,從節(jié)點(diǎn)只能復(fù)制主節(jié)點(diǎn)蚣抗,不支持嵌套樹(shù)狀復(fù)制結(jié)構(gòu)侈百。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市翰铡,隨后出現(xiàn)的幾起案子钝域,更是在濱河造成了極大的恐慌,老刑警劉巖锭魔,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件例证,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赂毯,警方通過(guò)查閱死者的電腦和手機(jī)战虏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)党涕,“玉大人烦感,你說(shuō)我怎么就攤上這事√诺蹋” “怎么了手趣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肥荔。 經(jīng)常有香客問(wèn)我绿渣,道長(zhǎng),這世上最難降的妖魔是什么燕耿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任中符,我火速辦了婚禮,結(jié)果婚禮上誉帅,老公的妹妹穿的比我還像新娘淀散。我一直安慰自己右莱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布档插。 她就那樣靜靜地躺著慢蜓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郭膛。 梳的紋絲不亂的頭發(fā)上晨抡,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音则剃,去河邊找鬼耘柱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忍级,可吹牛的內(nèi)容都是我干的帆谍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼轴咱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼汛蝙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起朴肺,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤窖剑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后戈稿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體西土,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年鞍盗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了需了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡般甲,死狀恐怖肋乍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敷存,我是刑警寧澤墓造,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站锚烦,受9級(jí)特大地震影響觅闽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涮俄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一蛉拙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彻亲,春花似錦刘离、人聲如沸室叉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至野来,卻和暖如春恼除,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曼氛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工豁辉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舀患。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓徽级,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親聊浅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子餐抢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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