redis常用集群方案

在日常開發(fā)過程中redis是我們比較常用的KV緩存中間件括荡,很多系統(tǒng)只是部署了單節(jié)點或者只是簡單在應(yīng)用層做了resharding,這就導(dǎo)致redis上的數(shù)據(jù)缺少高可用造垛,一旦某個節(jié)點出現(xiàn)問題恢恼,那么數(shù)據(jù)就會丟失而且是無法恢復(fù)的永久丟失,所以今天我們介紹下目前主流的幾種方案想幻,具體的搭建步驟也給了我不得鏈接,大家可以按照步驟去部署迎捺。

redis主從方案

redis主從模式是最簡單的一種集群方案配置起來也比較簡單举畸,它的特點主要有:

  • 一個master可以擁有多個slave
  • 多個slave鏈接同一個master,也可以鏈接其它slave
  • 主從復(fù)制不會阻塞master,在同步數(shù)據(jù)時凳枝,master可以繼續(xù)處理client請求.
  • slave 配置為slave-read-only on需要升級為主節(jié)點或者寫入配置文件中, 而不能在默認slave情況下直接設(shè)置master與slave斷開后會檢測心跳, 從新建立連接.
  • 可以直接copy DUMP文件從新重啟master抄沮,在Master為空以后,slave同步數(shù)據(jù)會抹掉全部數(shù)據(jù).

這種簡單的主從讀寫分離方案的缺點也比較多岖瑰,類似Mysql的主從方案叛买,往Master節(jié)點寫數(shù)據(jù),同時Master節(jié)點會異步寫入slave節(jié)點中蹋订。這種方案目前使用的越來越少率挣,不過對于個體開發(fā)并且對緩存依賴度不高的系統(tǒng)還是可以使用的,畢竟搭建和維護簡單露戒。

redis cluster方案

Redis Cluster是一種服務(wù)器Sharding技術(shù)椒功,3.0版本開始正式提供。
Redis Cluster中智什,Sharding采用slot(槽)的概念动漾,一共分成16384個槽,這有點兒類pre sharding思路荠锭。對于每個進入Redis的鍵值對旱眯,根據(jù)key進行散列,分配到這16384個slot中的某一個中。使用的hash算法也比較簡單删豺,就是CRC16后16384取模共虑。
Redis集群中的每個node(節(jié)點)負責(zé)分?jǐn)傔@16384個slot中的一部分,也就是說呀页,每個slot都對應(yīng)一個node負責(zé)處理妈拌。當(dāng)動態(tài)添加或減少node節(jié)點時,需要將16384個槽做個再分配赔桌,槽中的鍵值也要遷移供炎。
Redis集群,要保證16384個槽對應(yīng)的node都正常工作疾党,如果某個node發(fā)生故障,那它負責(zé)的slots也就失效惨奕,整個集群將不能工作雪位。
為了增加集群的可訪問性,官方推薦的方案是將node配置成主從結(jié)構(gòu)梨撞,即一個master主節(jié)點雹洗,掛n個slave從節(jié)點。這時卧波,如果主節(jié)點失效时肿,Redis Cluster會根據(jù)選舉算法從slave節(jié)點中選擇一個上升為主節(jié)點,整個集群繼續(xù)對外提供服務(wù)港粱,Redis Cluster本身提供了故障轉(zhuǎn)移容錯的能力螃成。
Redis Cluster的新節(jié)點識別能力、故障判斷及故障轉(zhuǎn)移能力是通過集群中的每個node都在和其它nodes進行通信查坪,這被稱為集群總線(cluster bus)寸宏。它們使用特殊的端口號,即對外服務(wù)端口號加10000偿曙。例如如果某個node的端口號是6379氮凝,那么它與其它nodes通信的端口號是16379。nodes之間的通信采用特殊的二進制協(xié)議望忆。
對客戶端來說罩阵,整個cluster被看做是一個整體,客戶端可以連接任意一個node進行操作启摄,就像操作單一Redis實例一樣稿壁,當(dāng)客戶端操作的key沒有分配到該node上時,Redis會返回轉(zhuǎn)向指令鞋仍,指向正確的node常摧。

redis cluster

從這種redis cluster的架構(gòu)圖中可以很容易的看出首先將數(shù)據(jù)根據(jù)hash規(guī)則分配到6個slot中(這里只是舉例子分成了6個槽),然后根據(jù)CRC算法和取模算法將6個slot分別存儲到3個不同的Master節(jié)點中,每個master節(jié)點又配套部署了一個slave節(jié)點落午,當(dāng)一個master出現(xiàn)問題后谎懦,slave節(jié)點可以頂上。這種cluster的方案對比第一種簡單的主從方案的優(yōu)點在于提高了讀寫的并發(fā)溃斋,分散了IO界拦,在保障高可用的前提下提高了性能。

具體的redis cluster的搭建方案可以參考官方的搭建方案梗劫,鏈接中是中文版享甸。
redis cluster官方搭建方案

codis集群方案

Codis是一個豌豆莢團隊開源的使用Go語言編寫的Redis Proxy使用方法和普通的redis沒有任何區(qū)別,設(shè)置好下屬的多個redis實例后就可以了梳侨,使用時在本需要連接redis的地方改為連接codis蛉威,它會以一個代理的身份接收請求 并使用一致性hash算法,將請求轉(zhuǎn)接到具體redis走哺,將結(jié)果再返回codis蚯嫌,和之前比較流行的twitter開源的Twemproxy功能類似,但是相比官方的redis cluster和twitter的Twemproxy還是有一些獨到的優(yōu)勢丙躏,Codis官方功能對比圖如下:

Codis Twemproxy Redis Cluster
resharding without restarting cluster Yes No Yes
pipeline Yes Yes No
hash tags for multi-key operations Yes Yes Yes
multi-key operations while resharding Yes - No(details)
Redis clients supporting Any clients Any clients Clients have to support cluster protocol

從表中我們可以看出Codis一個比較大的優(yōu)點是可以不停機動態(tài)新增或刪除數(shù)據(jù)節(jié)點择示,舊節(jié)點的數(shù)據(jù)也可以自動恢復(fù)到新節(jié)點。并且提供圖形化的dashboard晒旅,方便集群管理栅盲。
Codis Github
下面我們看下如果使用Coids作為緩存集群方案的架構(gòu)圖,簡單畫了這么個架構(gòu)圖废恋,這個架構(gòu)是codis保證HA的前提下的最小級谈秫,從這張架構(gòu)圖可以看到我們最少需要8臺機器,其中一臺機器是codis的dashboard用于通過web界面可視化的配置codis group和proxy拴签,也可以查看各個節(jié)點的狀態(tài)孝常;還有兩臺是用于codis的proxy代理節(jié)點,兩個節(jié)點之間通過pipeline主從互備蚓哩;還需要至少配置一臺zk用于保存slot狀態(tài)信息构灸,也可以通過etcd存儲這些狀態(tài)信息,方便client請求的路由岸梨,也可以配置多臺保證高可用喜颁;最后就是要配置數(shù)據(jù)節(jié)點來存儲數(shù)據(jù)了,在codis中需要將數(shù)據(jù)節(jié)點都放在codis group中進行管理曹阔,每個group至少保留一個節(jié)點半开,該架構(gòu)圖中,為了保證HA赃份,我們每個group都配置了一個master一個slave節(jié)點寂拆,這里配置了兩個group奢米,如果一個group中的master掛了,那么同一個group中的slave節(jié)點通過選舉算法選出新的master節(jié)點纠永,并通知到proxy鬓长,如果為了較好的高可用可以增加group的個數(shù)和每個group中slave節(jié)點的個數(shù)。

codis

codis方案推出的時間比較長尝江,而且國內(nèi)很多互聯(lián)網(wǎng)公司都已經(jīng)使用了該集群方案控硼,所以該方案還是比較適合大型互聯(lián)網(wǎng)系統(tǒng)使用的岳枷,畢竟成功案例比較多窃页,但是codis因為要實現(xiàn)slot切片徙鱼,所以修改了redis-server的源碼,對于后續(xù)的更新升級也會存在一定的隱患惭聂。窗声,但是codis的穩(wěn)定性和高可用確實是目前做的最好的,只要有足夠多的機器能夠做到非常好的高可用緩存系統(tǒng)彼妻。

Codis搭建步驟可以參考官方的 Guide

總結(jié)

從各個集群方案的對比中我們也發(fā)現(xiàn)Codis是目前用的比較多的一種方案嫌佑,Codis在高可用方面做的比較好,不需要重啟節(jié)點和增加刪除節(jié)點后自動Resharding侨歉,但是因為Codis是對redis-server做了改動,如果出現(xiàn)問題或者redis升級小團隊可能應(yīng)付不了揩魂,所以對于小規(guī)模應(yīng)用最好還是使用官方的cluster方案幽邓,在redis3.0后官方社區(qū)也在逐步完善cluster方案,小團隊可以隨著官方版本的升級享受功能和穩(wěn)定性的提升火脉,也便于日后的維護牵舵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市倦挂,隨后出現(xiàn)的幾起案子畸颅,更是在濱河造成了極大的恐慌,老刑警劉巖方援,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件没炒,死亡現(xiàn)場離奇詭異,居然都是意外死亡犯戏,警方通過查閱死者的電腦和手機送火,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來先匪,“玉大人种吸,你說我怎么就攤上這事⊙椒牵” “怎么了坚俗?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵镜盯,是天一觀的道長。 經(jīng)常有香客問我猖败,道長速缆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任辙浑,我火速辦了婚禮激涤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘判呕。我一直安慰自己倦踢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布侠草。 她就那樣靜靜地躺著辱挥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪边涕。 梳的紋絲不亂的頭發(fā)上晤碘,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音功蜓,去河邊找鬼园爷。 笑死,一個胖子當(dāng)著我的面吹牛式撼,可吹牛的內(nèi)容都是我干的童社。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼著隆,長吁一口氣:“原來是場噩夢啊……” “哼扰楼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起美浦,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弦赖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浦辨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹬竖,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年荤牍,在試婚紗的時候發(fā)現(xiàn)自己被綠了案腺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡康吵,死狀恐怖劈榨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晦嵌,我是刑警寧澤同辣,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布拷姿,位于F島的核電站,受9級特大地震影響旱函,放射性物質(zhì)發(fā)生泄漏响巢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一棒妨、第九天 我趴在偏房一處隱蔽的房頂上張望踪古。 院中可真熱鬧,春花似錦券腔、人聲如沸伏穆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枕扫。三九已至,卻和暖如春辱魁,著一層夾襖步出監(jiān)牢的瞬間烟瞧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工染簇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留参滴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓锻弓,卻偏偏與公主長得像卵洗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子弥咪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

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