【Redis集群原理專題】介紹一下常用的Redis集群機(jī)制方案的介紹和分析

集群化的方案

Redis的Sentinel解決了主從復(fù)制故障不能自動(dòng)遷移的問題儿咱,但是主節(jié)點(diǎn)的寫性能和存儲(chǔ)能力依然是受到了Redis單機(jī)容量有限的限制庭砍,所以使用Redis集群去解決這個(gè)問題,將Redis的數(shù)據(jù)根據(jù)一定的規(guī)則分配到多臺(tái)機(jī)器混埠。

Redis集群方案

Redis Cluster 集群模式通常具有:高可用怠缸、可擴(kuò)展性、分布式钳宪、容錯(cuò)等特性揭北。Redis分布式方案一般有兩種:

客戶端分區(qū)方案

客戶端就已經(jīng)決定數(shù)據(jù)會(huì)被存儲(chǔ)到哪個(gè) redis 節(jié)點(diǎn)或者從哪個(gè) redis 節(jié)點(diǎn) 讀取數(shù)據(jù)。其主要思想是采用 哈希算法 將 Redis 數(shù)據(jù)的 key 進(jìn)行散列吏颖,通過 hash 函數(shù)搔体,特定的 key會(huì) 映射 到特定的 Redis 節(jié)點(diǎn)上。

image

客戶端分區(qū)方案 的代表為 Redis Sharding半醉,Redis Sharding 是 Redis Cluster 出來之前疚俱,業(yè)界普遍使用的 Redis 多實(shí)例集群方法。Java 的 Redis 客戶端驅(qū)動(dòng)庫(kù) Jedis缩多,支持 Redis Sharding 功能呆奕,即 ShardedJedis 以及 結(jié)合緩存池 的 ShardedJedisPool。

優(yōu)點(diǎn)

不使用第三方中間件衬吆,分區(qū)邏輯可控梁钾,配置簡(jiǎn)單,節(jié)點(diǎn)之間無關(guān)聯(lián)逊抡,容易線性擴(kuò)展姆泻,靈活性強(qiáng)。

缺點(diǎn)

客戶端 無法 動(dòng)態(tài)增刪 服務(wù)節(jié)點(diǎn)冒嫡,客戶端需要自行維護(hù) 分發(fā)邏輯拇勃,客戶端之間無連接共享,會(huì)造成連接浪費(fèi)孝凌。

代理分區(qū)方案

客戶端發(fā)送請(qǐng)求到一個(gè)代理組件潜秋,代理解析客戶端的數(shù)據(jù),并將請(qǐng)求轉(zhuǎn)發(fā)至正確的節(jié)點(diǎn)胎许,最后將結(jié)果回復(fù)給客戶端峻呛。

  • 優(yōu)點(diǎn):簡(jiǎn)化 客戶端 的分布式邏輯,客戶端 透明接入辜窑,切換成本低钩述,代理的 轉(zhuǎn)發(fā) 和 存儲(chǔ) 分離。

  • 缺點(diǎn):多了一層 代理層穆碎,加重了 架構(gòu)部署復(fù)雜度 和 性能損耗牙勘。

image

代理分區(qū) 主流實(shí)現(xiàn)的有方案有 Twemproxy 和 Codis。

Twemproxy

Twemproxy 也叫 nutcraker,是twitter 開源的一個(gè) redis 和 memcache 的 中間代理服務(wù)器 程序方面。Twemproxy 作為 代理放钦,可接受來自多個(gè)程序的訪問,按照 路由規(guī)則恭金,轉(zhuǎn)發(fā)給后臺(tái)的各個(gè) Redis 服務(wù)器操禀,再原路返回。Twemproxy 存在 單點(diǎn)故障 問題横腿,需要結(jié)合 Lvs 和 Keepalived 做 高可用方案颓屑。


image
  • 優(yōu)點(diǎn):應(yīng)用范圍廣,穩(wěn)定性較高耿焊,中間代理層 高可用揪惦。

  • 缺點(diǎn):無法平滑地 水平擴(kuò)容/縮容,無 可視化管理界面罗侯,運(yùn)維不友好器腋,出現(xiàn)故障,不能 自動(dòng)轉(zhuǎn)移钩杰。

Codis

Codis 是一個(gè) 分布式 Redis 解決方案纫塌,對(duì)于上層應(yīng)用來說,連接 Codis-Proxy 和直接連接 原生的 Redis-Server 沒有的區(qū)別榜苫。Codis 底層會(huì) 處理請(qǐng)求的轉(zhuǎn)發(fā)护戳,不停機(jī)的進(jìn)行 數(shù)據(jù)遷移 等工作翎冲。Codis 采用了無狀態(tài)的 代理層垂睬,對(duì)于 客戶端 來說,一切都是透明的抗悍。

image
優(yōu)點(diǎn)

實(shí)現(xiàn)了上層 Proxy 和底層 Redis 的 高可用驹饺,數(shù)據(jù)分片和自動(dòng)平衡,提供 命令行接口 和 RESTful API缴渊,提供 監(jiān)控 和 管理 界面赏壹,可以動(dòng)態(tài) 添加 和 刪除 Redis 節(jié)點(diǎn)。

缺點(diǎn)

部署架構(gòu) 和 配置復(fù)雜衔沼,不支持 跨機(jī)房 和 多租戶蝌借,不支持 鑒權(quán)管理。

Cluster集群方案

Cluster模式是Redis3.0開始推出指蚁,由多個(gè)節(jié)點(diǎn)群組成的分布式服務(wù)集群菩佑,Redis的數(shù)據(jù)分布在這些節(jié)點(diǎn)中。集群不需要Sentinel哨兵也可以完成故障自動(dòng)遷移凝化。 使用集群時(shí)需要將redis配置文件中的cluster-enable配置打開稍坯。

采??中?結(jié)構(gòu),每個(gè)節(jié)點(diǎn)保存數(shù)據(jù)和整個(gè)集群狀態(tài), 各個(gè)節(jié)點(diǎn)會(huì)互相通信搓劫,采?gossip協(xié)議交換節(jié)點(diǎn)元數(shù)據(jù)信息瞧哟,每個(gè)節(jié)點(diǎn)都和其他所有節(jié)點(diǎn)連接混巧。一個(gè)集群?少需要6個(gè)節(jié)點(diǎn)才可以保證?可?,即3主3從勤揩。

客戶端隨機(jī)地 請(qǐng)求任意一個(gè) Redis 實(shí)例咧党,然后由 Redis 將請(qǐng)求 轉(zhuǎn)發(fā) 給 正確 的 Redis 節(jié)點(diǎn)。Redis Cluster 實(shí)現(xiàn)了一種 混合形式 的 查詢路由雄可,但并不是 直接 將請(qǐng)求從一個(gè) Redis 節(jié)點(diǎn) 轉(zhuǎn)發(fā) 到另一個(gè) Redis 節(jié)點(diǎn)凿傅,而是在 客戶端 的幫助下直接 重定向( redirected)到正確的 Redis 節(jié)點(diǎn)。

image
核心原理

redis cluster集群采?數(shù)據(jù)分?中的哈希槽來進(jìn)?數(shù)據(jù)存儲(chǔ)與讀取的数苫,Cluster會(huì)預(yù)分好16384個(gè)槽聪舒,每個(gè)節(jié)點(diǎn)負(fù)責(zé)其中的一部分槽位。當(dāng)需要在 Redis集群中放置?個(gè)數(shù)據(jù)時(shí)虐急,Cluster默認(rèn)會(huì)根據(jù) CRC16算法CRC16(key) mod 16384 的值箱残,決定將?個(gè)key放到哪個(gè)槽位中。

常見的配置
  • cluster-enabled yes:開啟集群模式(cluster)

  • cluster-config-file:該參數(shù)指定了集群配置文件的位置止吁,記錄集群節(jié)點(diǎn)信息被辑。以集群模式啟動(dòng)時(shí),會(huì)首先尋找是否有集群配置文件敬惦,如果有則使用文件中的配置啟動(dòng)盼理,如果沒有,則初始化配置并將配置保存到文件中

  • cluster-node-timeout time:節(jié)點(diǎn)連接超時(shí)時(shí)間

  • cluster-announce-ip ip:集群節(jié)點(diǎn)的ip俄删,當(dāng)前節(jié)點(diǎn)的ip

  • cluster-announce-port port:集群節(jié)點(diǎn)映射端?

優(yōu)點(diǎn)

無中心節(jié)點(diǎn)宏怔,數(shù)據(jù)按照 槽 存儲(chǔ)分布在多個(gè) Redis 實(shí)例上,可以平滑的進(jìn)行節(jié)點(diǎn) 擴(kuò)容/縮容畴椰,支持 高可用 和 自動(dòng)故障轉(zhuǎn)移臊诊,運(yùn)維成本低。

缺點(diǎn)

嚴(yán)重依賴 Redis-trib 工具斜脂,缺乏監(jiān)控管理抓艳,需要依賴 Smart Client (維護(hù)連接,緩存路由表帚戳,MultiOp 和 Pipeline 支持)玷或。

  • Failover 節(jié)點(diǎn)的 檢測(cè)過慢,不如 中心節(jié)點(diǎn) ZooKeeper 及時(shí)片任。
  • Gossip 消息具有一定開銷偏友。
  • 無法根據(jù)統(tǒng)計(jì)區(qū)分 冷熱數(shù)據(jù)。
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚂踊,一起剝皮案震驚了整個(gè)濱河市约谈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖棱诱,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泼橘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡迈勋,警方通過查閱死者的電腦和手機(jī)炬灭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靡菇,“玉大人重归,你說我怎么就攤上這事∠梅铮” “怎么了鼻吮?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)较鼓。 經(jīng)常有香客問我椎木,道長(zhǎng),這世上最難降的妖魔是什么博烂? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任香椎,我火速辦了婚禮,結(jié)果婚禮上禽篱,老公的妹妹穿的比我還像新娘畜伐。我一直安慰自己,他們只是感情好躺率,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布玛界。 她就那樣靜靜地躺著,像睡著了一般肥照。 火紅的嫁衣襯著肌膚如雪脚仔。 梳的紋絲不亂的頭發(fā)上勤众,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天舆绎,我揣著相機(jī)與錄音,去河邊找鬼们颜。 笑死吕朵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窥突。 我是一名探鬼主播努溃,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼阻问!你這毒婦竟也來了梧税?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎第队,沒想到半個(gè)月后哮塞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凳谦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年忆畅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尸执。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡家凯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出如失,到底是詐尸還是另有隱情绊诲,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布褪贵,位于F島的核電站驯镊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏竭鞍。R本人自食惡果不足惜板惑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偎快。 院中可真熱鬧冯乘,春花似錦、人聲如沸晒夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丐怯。三九已至喷好,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間读跷,已是汗流浹背梗搅。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留效览,地道東北人无切。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丐枉,于是被迫代替她去往敵國(guó)和親哆键。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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