一锚扎、redis集群方案-主從同步

研發(fā)工作中我們總是會用到緩存坎拐,redis作為目前互聯(lián)網(wǎng)企業(yè)最流行的緩存中間件担忧,我們這篇文章想跟大家一起討論下它的集群解決方案芹缔。

后續(xù)筆者會從redis的主從同步機(jī)制、哨兵模式(Sentinel)瓶盛、Codis最欠、Cluster幾個方向來逐一闡述自己的觀點(diǎn)。

這篇文章主要討論redis的主從同步機(jī)制惩猫。很多公司未必會有redis集群芝硬,但是使用redis的時候至少都做了主從來保證服務(wù)的可用性。

什么是主從轧房?顧名思義拌阴,一個節(jié)點(diǎn)作為Master,一個節(jié)點(diǎn)作為Slave奶镶,當(dāng)Master作為掛掉的時候迟赃,Slave過來接管,服務(wù)就可以繼續(xù)实辑,否則Master的重啟捺氢、數(shù)據(jù)恢復(fù)過程可能會拖延很長時間,從而影響到業(yè)務(wù)系統(tǒng)的持續(xù)服務(wù)剪撬。


說道集群摄乒,我們就會想到著名的CAP原理。

C:Consistent残黑,一致性

A:Availability馍佑,可用性

P:Partition tolerance,分區(qū)一致性

這里有個術(shù)語需要解釋:網(wǎng)絡(luò)分區(qū)梨水。分布式系統(tǒng)的節(jié)點(diǎn)通常都是分布在不同的機(jī)器上拭荤,機(jī)器之間的網(wǎng)絡(luò)有可能會斷開,當(dāng)網(wǎng)絡(luò)斷開時疫诽,這樣的場景就叫做網(wǎng)絡(luò)分區(qū)舅世。

網(wǎng)絡(luò)分區(qū)發(fā)生時,由于節(jié)點(diǎn)間無法通信奇徒,如果持續(xù)寫入或者修改數(shù)據(jù)雏亚,會導(dǎo)致節(jié)點(diǎn)之間數(shù)據(jù)一致性無法保證。除非當(dāng)分區(qū)發(fā)生時摩钙,我們不在提供服務(wù)罢低,直到網(wǎng)絡(luò)恢復(fù),這樣就犧牲了可用性胖笛。所以CAP的原理是:當(dāng)網(wǎng)絡(luò)分區(qū)發(fā)生時网持,C與A難以兩全宜岛。

redis的主從數(shù)據(jù)是異步同步的,所以分布式的redis只能滿足AP功舀。當(dāng)客戶端在redis的主節(jié)點(diǎn)修改了數(shù)據(jù)后萍倡,立即返回。所以主從的網(wǎng)絡(luò)分區(qū)發(fā)生時日杈,主節(jié)點(diǎn)會繼續(xù)提供服務(wù)遣铝,從節(jié)點(diǎn)的數(shù)據(jù)版本會在網(wǎng)絡(luò)恢復(fù)后,通過多種策略進(jìn)行恢復(fù)莉擒,盡力保持與主節(jié)點(diǎn)一致酿炸。達(dá)成最終一致性

redis支持主從同步與從從同步涨冀。如下圖:


圖1.1 主從復(fù)制/從從復(fù)制

下面我們再談一下主從同步的幾種策略:

1.增量同步

redis同步的是指令流填硕,主節(jié)點(diǎn)會將對自己的狀態(tài)產(chǎn)生修改性影響的指令記錄在本地的內(nèi)存buffer中,然后異步將buffer中的指令同步到從節(jié)點(diǎn)鹿鳖,從節(jié)點(diǎn)一邊執(zhí)行同步的指令流扁眯,一邊向主節(jié)點(diǎn)反饋同步偏移量。

由于buffer的大小有限翅帜,所以是循環(huán)使用的姻檀。如果因?yàn)榫W(wǎng)絡(luò)故障,導(dǎo)致master與slave之間的數(shù)據(jù)不一致涝滴,同時buffer里面的數(shù)據(jù)版本已經(jīng)被覆蓋了绣版,那么redis會觸發(fā)快照同步。

2.快照同步

快照同步因?yàn)樯婕暗酱疟PIO歼疮,所以是一種非常耗費(fèi)資源的操作杂抽。

master通過bgsave操作將內(nèi)存快照存儲到磁盤文件,然后將快照文件發(fā)送到從節(jié)點(diǎn)韩脏,從節(jié)點(diǎn)接收完畢后缩麸,立即執(zhí)行一次全量加載。全量加載操作前需要清空內(nèi)存赡矢,加載完畢后通知master繼續(xù)進(jìn)行增量同步杭朱。

問題:加載快照時間過長或者復(fù)制buffer太小都會導(dǎo)致同步期間的增量指令在復(fù)制buffer中被覆蓋,導(dǎo)致快照同步完成后無法增量復(fù)制吹散,再次發(fā)起快照同步痕檬,陷入死循環(huán)。

解決辦法:配置合適的buffer大小參數(shù)送浊,避免快照復(fù)制死循環(huán)。


增加從節(jié)點(diǎn)

當(dāng)slave剛剛加入到集群丘跌,它必須進(jìn)行一次快照同步袭景,完成后再增量同步

無盤復(fù)制

master在進(jìn)行快照同步時唁桩,io操作會很耗時。當(dāng)磁盤不是ssd的時候耸棒,影響尤其嚴(yán)重荒澡。系統(tǒng)如果正在進(jìn)行AOF的fsync操作時,如果發(fā)生快照同步与殃,fsync將會被推遲執(zhí)行单山。

redis2.8.18版本后,redis的master會通過套接字將快照內(nèi)容發(fā)送到從節(jié)點(diǎn)幅疼,生成快照是一個遍歷的過程米奸,master會一邊遍歷內(nèi)存,一邊講內(nèi)容發(fā)送到slave爽篷。這個過程叫做無盤復(fù)制悴晰。

wait指令

redis的復(fù)制是異步操作,wait指令可以讓異步操作變成同步復(fù)制逐工,確保強(qiáng)一致性铡溪。

wait是在redis3.0之后才出現(xiàn)的。wait命令包含2個參數(shù):從節(jié)點(diǎn)數(shù)量n與時間t(毫秒)

wait 1 0? 代表無限期等待1個slave復(fù)制完成泪喊。

時間為0代表無限期等待棕硫,當(dāng)此時發(fā)生網(wǎng)絡(luò)分區(qū),那么redis會喪失可用性袒啼。


主從同步是redis分布式集群的基礎(chǔ)哈扮,也是高可用的保證。

后續(xù)文章我們會繼續(xù)探討主節(jié)點(diǎn)宕機(jī)后的恢復(fù)機(jī)制:哨兵模式瘤泪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灶泵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子对途,更是在濱河造成了極大的恐慌赦邻,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件实檀,死亡現(xiàn)場離奇詭異惶洲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)膳犹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門恬吕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人须床,你說我怎么就攤上這事铐料。” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵钠惩,是天一觀的道長柒凉。 經(jīng)常有香客問我,道長篓跛,這世上最難降的妖魔是什么膝捞? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮愧沟,結(jié)果婚禮上蔬咬,老公的妹妹穿的比我還像新娘。我一直安慰自己沐寺,他們只是感情好林艘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芽丹,像睡著了一般北启。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拔第,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天咕村,我揣著相機(jī)與錄音,去河邊找鬼蚊俺。 笑死懈涛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泳猬。 我是一名探鬼主播批钠,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼得封!你這毒婦竟也來了埋心?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忙上,失蹤者是張志新(化名)和其女友劉穎拷呆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疫粥,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茬斧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梗逮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片项秉。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖慷彤,靈堂內(nèi)的尸體忽然破棺而出娄蔼,到底是詐尸還是另有隱情怖喻,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布岁诉,位于F島的核電站罢防,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏唉侄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一野建、第九天 我趴在偏房一處隱蔽的房頂上張望属划。 院中可真熱鬧,春花似錦候生、人聲如沸同眯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽须蜗。三九已至,卻和暖如春目溉,著一層夾襖步出監(jiān)牢的瞬間明肮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工缭付, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柿估,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓陷猫,卻偏偏與公主長得像秫舌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绣檬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

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