Redis 主從復(fù)制原理

姓名:宮松濤

學(xué)號(hào):19021210927

嵌牛導(dǎo)讀:Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)高帖、支持網(wǎng)絡(luò)缰儿、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù)散址,并提供多種語(yǔ)言的API乖阵。在現(xiàn)有企業(yè)中80%公司大部分使用的是redis單機(jī)服務(wù),在實(shí)際的場(chǎng)景當(dāng)中單一節(jié)點(diǎn)的redis容易面臨風(fēng)險(xiǎn)预麸。

嵌牛鼻子:Redis 主從復(fù)制原理

嵌牛提問(wèn):Redis 主從復(fù)制原理是什么瞪浸?如何學(xué)習(xí)它?

轉(zhuǎn)載源:Redis 主從復(fù)制原理

嵌牛正文:

Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)吏祸、支持網(wǎng)絡(luò)对蒲、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API蹈矮。從2010年3月15日起砰逻,Redis的開(kāi)發(fā)工作由VMware主持。從2013年5月開(kāi)始泛鸟,Redis的開(kāi)發(fā)由Pivotal贊助蝠咆。

概述

在現(xiàn)有企業(yè)中80%公司大部分使用的是redis單機(jī)服務(wù),在實(shí)際的場(chǎng)景當(dāng)中單一節(jié)點(diǎn)的redis容易面臨風(fēng)險(xiǎn)北滥。

面臨問(wèn)題

1刚操、機(jī)器故障。我們部署到一臺(tái) Redis 服務(wù)器碑韵,當(dāng)發(fā)生機(jī)器故障時(shí)赡茸,需要遷移到另外一臺(tái)服務(wù)器并且要保證數(shù)據(jù)是同步的。而數(shù)據(jù)是最重要的祝闻,如果你不在乎占卧,基本上也就不會(huì)使用 Redis 了。

2联喘、容量瓶頸华蜒。當(dāng)我們有需求需要擴(kuò)容 Redis 內(nèi)存時(shí),從 16G 的內(nèi)存升到 64G豁遭,單機(jī)肯定是滿足不了叭喜。當(dāng)然,你可以重新買個(gè) 128G 的新機(jī)器蓖谢。

解決辦法

要實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)的更大的存儲(chǔ)容量和承受高并發(fā)訪問(wèn)量捂蕴,我們會(huì)將原來(lái)集中式數(shù)據(jù)庫(kù)的數(shù)據(jù)分別存儲(chǔ)到其他多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上。

Redis 為了解決這個(gè)單一節(jié)點(diǎn)的問(wèn)題闪幽,也會(huì)把數(shù)據(jù)復(fù)制多個(gè)副本部署到其他節(jié)點(diǎn)上進(jìn)行復(fù)制啥辨,實(shí)現(xiàn) Redis的高可用,實(shí)現(xiàn)對(duì)數(shù)據(jù)的冗余備份盯腌,從而保證數(shù)據(jù)和服務(wù)的高可用溉知。

主從復(fù)制

什么是主從復(fù)制

image

主從復(fù)制,是指將一臺(tái)Redis服務(wù)器的數(shù)據(jù)腕够,復(fù)制到其他的Redis服務(wù)器级乍。前者稱為主節(jié)點(diǎn)(master),后者稱為從節(jié)點(diǎn)(slave)帚湘,數(shù)據(jù)的復(fù)制是單向的玫荣,只能由主節(jié)點(diǎn)到從節(jié)點(diǎn)。

默認(rèn)情況下大诸,每臺(tái)Redis服務(wù)器都是主節(jié)點(diǎn)捅厂;且一個(gè)主節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)(或沒(méi)有從節(jié)點(diǎn))材诽,但一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn)。

主從復(fù)制的作用

1恒傻、數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份脸侥,是持久化之外的一種數(shù)據(jù)冗余方式。

2盈厘、故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問(wèn)題時(shí)睁枕,可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù)沸手;實(shí)際上是一種服務(wù)的冗余外遇。

3、負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上契吉,配合讀寫(xiě)分離跳仿,可以由主節(jié)點(diǎn)提供寫(xiě)服務(wù),由從節(jié)點(diǎn)提供讀服務(wù)(即寫(xiě)Redis數(shù)據(jù)時(shí)應(yīng)用連接主節(jié)點(diǎn)捐晶,讀Redis數(shù)據(jù)時(shí)應(yīng)用連接從節(jié)點(diǎn))菲语,分擔(dān)服務(wù)器負(fù)載;尤其是在寫(xiě)少讀多的場(chǎng)景下惑灵,通過(guò)多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載山上,可以大大提高Redis服務(wù)器的并發(fā)量。

4英支、讀寫(xiě)分離:可以用于實(shí)現(xiàn)讀寫(xiě)分離佩憾,主庫(kù)寫(xiě)、從庫(kù)讀干花,讀寫(xiě)分離不僅可以提高服務(wù)器的負(fù)載能力妄帘,同時(shí)可根據(jù)需求的變化,改變從庫(kù)的數(shù)量池凄。

5抡驼、高可用基石:除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ)修赞,因此說(shuō)主從復(fù)制是Redis高可用的基礎(chǔ)婶恼。

主從復(fù)制啟用

從節(jié)點(diǎn)開(kāi)啟主從復(fù)制桑阶,有3種方式:

1柏副、配置文件:在從服務(wù)器的配置文件中加入 slaveof。

2蚣录、啟動(dòng)命令:redis-server啟動(dòng)命令后加入 --slaveof割择。

3、客戶端命令:Redis服務(wù)器啟動(dòng)后萎河,直接通過(guò)客戶端執(zhí)行命令 slaveof荔泳,則該Redis實(shí)例成為從節(jié)點(diǎn)蕉饼。

通過(guò) info replication 命令可以看到復(fù)制的一些信息。

主從復(fù)制原理

主從復(fù)制過(guò)程大體可以分為3個(gè)階段:連接建立階段(即準(zhǔn)備階段)玛歌、數(shù)據(jù)同步階段昧港、命令傳播階段。

在從節(jié)點(diǎn)執(zhí)行 slaveof 命令后支子,復(fù)制過(guò)程便開(kāi)始運(yùn)作创肥,下面圖示可以看出復(fù)制過(guò)程大致分為6個(gè)過(guò)程。

image

主從配置之后的日志記錄也可以看出這個(gè)流程值朋。

1叹侄、保存主節(jié)點(diǎn)(master)信息

執(zhí)行 slaveof 后 Redis 會(huì)打印如下日志:

image

2、從節(jié)點(diǎn)與主節(jié)點(diǎn)建立網(wǎng)絡(luò)連接

從節(jié)點(diǎn)(slave)內(nèi)部通過(guò)每秒運(yùn)行的定時(shí)任務(wù)維護(hù)復(fù)制相關(guān)邏輯昨登,當(dāng)定時(shí)任務(wù)發(fā)現(xiàn)存在新的主節(jié)點(diǎn)后趾代,會(huì)嘗試與該節(jié)點(diǎn)建立網(wǎng)絡(luò)連接。

image

從節(jié)點(diǎn)與主節(jié)點(diǎn)建立網(wǎng)絡(luò)連接丰辣。

從節(jié)點(diǎn)會(huì)建立一個(gè) socket 套接字撒强,從節(jié)點(diǎn)建立了一個(gè)端口為51234的套接字,專門(mén)用于接受主節(jié)點(diǎn)發(fā)送的復(fù)制命令笙什。從節(jié)點(diǎn)連接成功后打印如下日志:

image

如果從節(jié)點(diǎn)無(wú)法建立連接尿褪,定時(shí)任務(wù)會(huì)無(wú)限重試直到連接成功或者執(zhí)行 slaveofnoone 取消復(fù)制。

關(guān)于連接失敗得湘,可以在從節(jié)點(diǎn)執(zhí)行 info replication 查看 master_link_down_since_seconds 指標(biāo)杖玲,它會(huì)記錄與主節(jié)點(diǎn)連接失敗的系統(tǒng)時(shí)間。從節(jié)點(diǎn)連接主節(jié)點(diǎn)失敗時(shí)也會(huì)每秒打印如下日志淘正,方便發(fā)現(xiàn)問(wèn)題:

3摆马、發(fā)送 ping 命令

連接建立成功后從節(jié)點(diǎn)發(fā)送 ping 請(qǐng)求進(jìn)行首次通信, ping 請(qǐng)求主要目的如下:

檢測(cè)主從之間網(wǎng)絡(luò)套接字是否可用鸿吆。

檢測(cè)主節(jié)點(diǎn)當(dāng)前是否可接受處理命令囤采。

如果發(fā)送 ping 命令后,從節(jié)點(diǎn)沒(méi)有收到主節(jié)點(diǎn)的 pong 回復(fù)或者超時(shí)惩淳,比如網(wǎng)絡(luò)超時(shí)或者主節(jié)點(diǎn)正在阻塞無(wú)法響應(yīng)命令蕉毯,從節(jié)點(diǎn)會(huì)斷開(kāi)復(fù)制連接,下次定時(shí)任務(wù)會(huì)發(fā)起重連思犁。

image

image

從節(jié)點(diǎn)發(fā)送的 ping 命令成功返回代虾,Redis 打印如下日志,并繼續(xù)后續(xù)復(fù)制流程:

image

4激蹲、權(quán)限驗(yàn)證

如果主節(jié)點(diǎn)設(shè)置了 requirepass 參數(shù)棉磨,則需要密碼驗(yàn)證,從節(jié)點(diǎn)必須配置 masterauth 參數(shù)保證與主節(jié)點(diǎn)相同的密碼才能通過(guò)驗(yàn)證学辱。如果驗(yàn)證失敗復(fù)制將終止乘瓤,從節(jié)點(diǎn)重新發(fā)起復(fù)制流程环形。

5、同步數(shù)據(jù)集

主從復(fù)制連接正常通信后衙傀,對(duì)于首次建立復(fù)制的場(chǎng)景抬吟,主節(jié)點(diǎn)會(huì)把持有的數(shù)據(jù)全部發(fā)送給從節(jié)點(diǎn),這部分操作是耗時(shí)最長(zhǎng)的步驟统抬。

6拗军、命令持續(xù)復(fù)制

當(dāng)主節(jié)點(diǎn)把當(dāng)前的數(shù)據(jù)同步給從節(jié)點(diǎn)后,便完成了復(fù)制的建立流程蓄喇。接下來(lái)主節(jié)點(diǎn)會(huì)持續(xù)地把寫(xiě)命令發(fā)送給從節(jié)點(diǎn)发侵,保證主從數(shù)據(jù)一致性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妆偏,一起剝皮案震驚了整個(gè)濱河市刃鳄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钱骂,老刑警劉巖叔锐,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異见秽,居然都是意外死亡愉烙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)解取,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)步责,“玉大人,你說(shuō)我怎么就攤上這事禀苦÷希” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵振乏,是天一觀的道長(zhǎng)蔗包。 經(jīng)常有香客問(wèn)我,道長(zhǎng)慧邮,這世上最難降的妖魔是什么调限? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮误澳,結(jié)果婚禮上耻矮,老公的妹妹穿的比我還像新娘。我一直安慰自己脓匿,他們只是感情好淘钟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布宦赠。 她就那樣靜靜地躺著陪毡,像睡著了一般米母。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毡琉,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天铁瞒,我揣著相機(jī)與錄音,去河邊找鬼桅滋。 笑死慧耍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丐谋。 我是一名探鬼主播芍碧,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼号俐!你這毒婦竟也來(lái)了泌豆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吏饿,失蹤者是張志新(化名)和其女友劉穎踪危,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體猪落,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贞远,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笨忌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓝仲。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖官疲,靈堂內(nèi)的尸體忽然破棺而出杂曲,到底是詐尸還是另有隱情,我是刑警寧澤袁余,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布擎勘,位于F島的核電站,受9級(jí)特大地震影響颖榜,放射性物質(zhì)發(fā)生泄漏棚饵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一掩完、第九天 我趴在偏房一處隱蔽的房頂上張望噪漾。 院中可真熱鬧,春花似錦且蓬、人聲如沸欣硼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诈胜。三九已至豹障,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焦匈,已是汗流浹背血公。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缓熟,地道東北人累魔。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像够滑,于是被迫代替她去往敵國(guó)和親垦写。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 本篇就一下方面展開(kāi)分析 如何使用主從復(fù)制彰触? 主從復(fù)制的原理(重點(diǎn)是全量復(fù)制和部分復(fù)制梯澜、以及心跳機(jī)制) 實(shí)際應(yīng)用中需...
    lucode閱讀 994評(píng)論 0 5
  • 作者:LoyaltyLu鏈接:https://segmentfault.com/a/119000001826835...
    碼農(nóng)小光閱讀 468評(píng)論 0 12
  • 主從復(fù)制的作用主要包括: 1、數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份渴析,是持久化之外的一種數(shù)據(jù)冗余方式晚伙。 2、故障恢復(fù)...
    firstsecret閱讀 616評(píng)論 0 1
  • 梁總回上海之后俭茧,給我們帶來(lái)良好的消息咆疗,一個(gè)五千萬(wàn)的項(xiàng)目準(zhǔn)備與我們合作。真是令人振奮不已母债!不過(guò)午磁,我在QQ簽名上發(fā)現(xiàn),...
    JamesMow閱讀 301評(píng)論 0 0
  • 1.自己的立場(chǎng)非常重要 在復(fù)雜的機(jī)關(guān)當(dāng)中毡们,每個(gè)人都有自己的立場(chǎng)領(lǐng)導(dǎo)有領(lǐng)導(dǎo)的立場(chǎng)迅皇。二級(jí)單位有二級(jí)單位的立場(chǎng),但是要時(shí)...
    stardust二零二三閱讀 216評(píng)論 0 0