構(gòu)建高可用唠梨、可擴展的redis集群

單個redis實例無論是存儲容量還是請求處理能力最后都會受限于單機的性能,隨著數(shù)據(jù)量和請求量的增長柒昏,必然要尋求redis集群的解決方案凳宙。在redis推出早期,redis自身并沒有集群的方案职祷,但是業(yè)界在使用redis的時候有不少集群方案氏涩。到了redis 3.0,redis內(nèi)建了集群方案有梆,稱之為redis cluster是尖。集群設(shè)計核心是將眾多的key分散存放到多個不同的實例上去,另外要考慮的問題就是高可用以及可擴展泥耀。

為了實現(xiàn)集群的功能饺汹,從服務(wù)端、客戶端的角度來看痰催,可以分為以下三類:

  • 客戶端實現(xiàn): 典型的是支持一致性哈希的客戶端
  • 代理層實現(xiàn): 典型代表twemproxy兜辞、codis
  • redis服務(wù)端實現(xiàn): redis cluster

客戶端實現(xiàn)redis集群

在客戶端實現(xiàn)redis集群,通常的使用場景是把redis單純當作簡單的緩存來使用夸溶,就像使用memcache那樣使用redis逸吵。一般的策略是使用一致性哈希。實際應(yīng)用中缝裁,在客戶端實現(xiàn)redis集群功能并不是一個好方案扫皱,它存在維護管理困難的問題,當需要這么做時請考慮在代理層做捷绑。

代理層實現(xiàn)redis集群

在redis 3.0推出redis cluster之前啸罢,代理層實現(xiàn)redis集群是首選方案,twemproxy和codis是最常見的兩個代理胎食。

twemproxy實現(xiàn)redis集群

twemproxy實現(xiàn)redis集群的方案主要通過twemproxy配置里的distribution來控制的扰才,不同的distribution可以適用于不同的場景,比較如下:

項目 ketama modula random
KEY分布 一致性哈希方式將key分布到不同的redis實例上 通過對key的哈希值求模分布到相應(yīng)的redis實例上 隨機分布key
高可用 可以通過開啟自動屏蔽失效節(jié)點來自動更新一致性哈希環(huán)厕怜,從而實現(xiàn)依賴一致性哈希的高可用 內(nèi)建沒有對高可用的支持衩匣,可以通過外部控制在有節(jié)點失效時更新配置并重啟 開啟自動屏蔽失效節(jié)點功能,或同modula
可擴展 直接添加redis節(jié)點重啟代理即可 只能雙倍擴容粥航,數(shù)據(jù)同步過程中需要重啟twemproxy琅捏,重啟過程中可能丟失一點最新的數(shù)據(jù),擴容后各redis實例里會殘留垃圾數(shù)據(jù)递雀,如果未設(shè)置超時時間的話需要手工清理 直接添加redis節(jié)點重啟代理即可
適用場景 緩存使用 緩存或存儲使用 隊列使用柄延,較少使用
問題 一致性哈希雖然既可以實現(xiàn)高可用也可以實現(xiàn)可擴展,但實際上這兩點做的都不夠好,在一致性哈希環(huán)改變的時候會造成短期的緩存命中率下降搜吧,在大量請求的情況下這可能是不可接受的市俊,有可能瞬間把后端數(shù)據(jù)庫擊垮;在網(wǎng)絡(luò)抖動情況下,哈希環(huán)可能持續(xù)多次改變滤奈,這可能會帶來臟數(shù)據(jù)的問題;在有多個代理的時候摆昧,還可能因為種種原因?qū)е赂鞔砩瞎-h(huán)不一致的問題。 高可用需要額外依賴其它組件來實現(xiàn)蜒程,可擴展問題上面已提出 較少使用

codis實現(xiàn)redis集群

與twemproxy不一樣绅你,codis不單純是一款代理軟件,它包括了好幾個組件昭躺,不過在這里我們不細講忌锯,只介紹其實現(xiàn)redis集群的基本原理。兩個主要的組件是codis-server(redis修改版本)和codis-proxy领炫,codis在邏輯上劃分出1024個slot偶垮,每個codis-server實例可以擁有多個slot,而key則通過計算哈希值來求模分布到這1024個slot中驹吮,codis-proxy知道每個slot位于哪個codis-server里针史。對高可用的支持codis依賴redis-sentinel晶伦,而對可擴展的支持是通過遷移slot到新的codis-server實例上來實現(xiàn)的碟狞。

redis cluster

redis cluster原理上和codis差不多,同樣是引入了slot的概念婚陪,不過redis cluster有16384個slot族沃。redis cluster自身集成了高可用的功能,可擴展也是通過遷移slot來實現(xiàn)的泌参。但是對客戶端來說脆淹,redis cluster和單個redis實例相比它在請求響應(yīng)上帶來了MOVE/ASK語義,也就意味著之前的redis客戶端無法直接獲得全部集群功能沽一,需要增加對MOVE/ASK響應(yīng)的支持才可以訪問整個集群盖溺。

為了讓客戶端透明的訪問redis cluster,可以在中間加一層代理铣缠,predixy是一個不錯的選擇

方案選擇

基于客戶端的方案任何時候都要慎重考慮烘嘱,在此我們不予推薦。

基于twemproxy的方案雖然看起來功能挺全面蝗蛙,但是實際使用中存在的問題同樣很多蝇庭,具體見上述,目前也不推薦再用twemproxy的方案捡硅。

codis在redis cluster出來之前應(yīng)該是最理想的一種redis集群解決方案哮内,但是codis需要采用其自身修改版的redis,因此這和redis社區(qū)版本會有差異壮韭,因此無法及時跟進redis社區(qū)版本更新北发,而對于那些自己對redis有所改動的用戶來講纹因,那更不便使用codis。同時codis-proxy是go語言編寫鲫竞,在性能方面辐怕,尤其是耗時表現(xiàn)損耗較多。

redis cluster自redis 3.0推出以來从绘,目前已經(jīng)在很多生產(chǎn)環(huán)境上得到了應(yīng)用寄疏,目前來講,構(gòu)建redis集群僵井,推薦采用redis cluster搭配一款支持redis cluster的代理方案陕截。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市批什,隨后出現(xiàn)的幾起案子农曲,更是在濱河造成了極大的恐慌,老刑警劉巖驻债,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乳规,死亡現(xiàn)場離奇詭異,居然都是意外死亡合呐,警方通過查閱死者的電腦和手機暮的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淌实,“玉大人冻辩,你說我怎么就攤上這事〔鹌恚” “怎么了恨闪?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長放坏。 經(jīng)常有香客問我咙咽,道長,這世上最難降的妖魔是什么淤年? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任钧敞,我火速辦了婚禮,結(jié)果婚禮上互亮,老公的妹妹穿的比我還像新娘犁享。我一直安慰自己,他們只是感情好豹休,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布炊昆。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凤巨。 梳的紋絲不亂的頭發(fā)上视乐,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音敢茁,去河邊找鬼佑淀。 笑死,一個胖子當著我的面吹牛彰檬,可吹牛的內(nèi)容都是我干的伸刃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逢倍,長吁一口氣:“原來是場噩夢啊……” “哼捧颅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起较雕,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤碉哑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亮蒋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扣典,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年慎玖,在試婚紗的時候發(fā)現(xiàn)自己被綠了贮尖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡凄吏,死狀恐怖远舅,靈堂內(nèi)的尸體忽然破棺而出闰蛔,到底是詐尸還是另有隱情痕钢,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布序六,位于F島的核電站任连,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏例诀。R本人自食惡果不足惜随抠,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望繁涂。 院中可真熱鬧拱她,春花似錦、人聲如沸扔罪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唬复,卻和暖如春矗积,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敞咧。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工棘捣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人休建。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓乍恐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親测砂。 傳聞我的和親對象是個殘疾皇子禁熏,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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

  • 本文針對Redis以及redis的幾種集群方案的調(diào)研日期在2016年8月,后續(xù)如果各框架有更新與本文不符邑彪,請自行甄...
    范安林閱讀 76,304評論 0 35
  • Codis 3.2 部署配置匯總 概念總結(jié) 集群配置前需要了解架構(gòu)瞧毙,集群分片主要分三種: 客戶端分片:這個需要自己...
    三杯水Plus閱讀 5,999評論 0 11
  • 由于Redis出眾的性能,其在眾多的移動互聯(lián)網(wǎng)企業(yè)中得到廣泛的應(yīng)用寄症。Redis在3.0版本前只支持單實例模式宙彪,雖然...
    andyjoe閱讀 59,273評論 3 7
  • 由于Redis出眾的性能,其在眾多的移動互聯(lián)網(wǎng)企業(yè)中得到廣泛的應(yīng)用有巧。Redis在3.0版本前只支持單實例模式释漆,雖然...
    倒帶默寫閱讀 64,640評論 0 17
  • 一. 應(yīng)用場景 redis 作為數(shù)據(jù)結(jié)構(gòu)存儲引擎,有著很多優(yōu)點 高性能單機引擎可以達到5-10W qps 數(shù)據(jù)結(jié)構(gòu)...
    skywalker閱讀 15,855評論 4 29