Redis主從復制原理

Redis主從復制

一凯砍、什么是主從復制

主從復制是指用戶可以搭建多個服務器,其中幾個服務器當做主服務器筋现,提供寫功能唐础。其余的服務器當做從服務器,提供讀功能矾飞。每當主服務器收到寫請求時一膨,同時需要把數據發(fā)送給從服務器。保證主從服務器的數據保持最終一致性洒沦。利用這個機制豹绪,可以利用廉價的服務器搭建高可用,高并發(fā)集群微谓。主從復制是搭建高可用集群的必備利器森篷。

二、Redis怎么實現主從復制

2.1 slaveof

在Redis中可以使用slaveof命令讓一個Redis實例去復制另一個Redis實例的內容豺型。這里需要注意當A實例執(zhí)行該命令去復制B實例的內容后仲智,以前A實例的內容都將被B實例的內容覆蓋。同時在從服務器將被設置為只讀姻氨,向從服務器發(fā)送寫命令時钓辆,將被拒絕。(也可以在redis.conf中配置該命令,啟動時就發(fā)起主從同步)

2.2 主從復制的原理V1

當從服務器發(fā)起slaveof命令后前联,主從服務器之間通過TCP長連接進行通信功戚,主要是以下步驟:

image-redis-master-slave-slaveof.png

第一次完整的主從同步就完成了。然后主從之間會維持TCP連接似嗤,每次master收到新的寫命令后啸臀,都會發(fā)給從服務器。

如果期間連接斷了烁落,當從服務器重新連上主服務器后乘粒,上述的步驟會重新來一遍∩怂可以發(fā)現這是很低效的灯萍,因為主服務器只需要把斷連期間的寫入命令發(fā)給從服務器就可以了,不需要重新生成RDB文件每聪。(生成RDB文件是一個耗時操作旦棉,設計磁盤的讀寫)。

注意:從服務器在加載RDB文件過程中是阻塞的药薯,無法處理客戶端的請求绑洛。

2.3 主從復制的原理V2

基于上述原因(特別是斷線時間特別短時),Redis推出了新的同步命令psync果善。

psync將同步過程分為了兩塊:1诊笤、完整同步系谐;2巾陕、部分同步。

完整同步也叫初次同步纪他,也就是第一次主從同步鄙煤。步驟跟v1上述是一致的。

部分同步主要用戶斷線重連后的同步茶袒,它可以將斷線期間的寫入命令發(fā)送給從服務器梯刚,而不需要整個RDB文件,極大的節(jié)約了資源薪寓。當從服務器重新連接了主服務器后亡资,會發(fā)送psync命令,然后主服務器回復continue命名向叉,并且發(fā)送缺少的寫入命令到從服務器锥腻。

2.3.1 部分同步原理

redis完成部分同步功能主要依賴于以下部分:

1、主服務器的復制偏移量

2母谎、從服務器的復制偏移量

3瘦黑、命令緩存區(qū)(FIFO隊列,默認大小1MB)

4、服務器運行Id

每次主服務器向從服務器傳遞N個字節(jié)命令后幸斥,就在把自己的偏移量+N匹摇。從服務器同理。同時主服務器還會將命令寫入到命令緩存區(qū)里甲葬。當從服務器重連是發(fā)生如下步驟:

image-psync命令.png

每個Redis都有自己的唯一標識Id廊勃。在啟動時自動生成,由40個隨機的十六進制字符組成经窖。當發(fā)送第一次主從同步時供搀,master會將自己的id發(fā)送會從服務器,從服務器會將其保存起來钠至。斷線重連時葛虐,從服務器請求同步時還會將這個id發(fā)送給主服務器,主服務器判斷該id與自己的id是否一致棉钧,如果一致則繼續(xù)執(zhí)行部分同步的剩余步驟屿脐。否則執(zhí)行完整同步。

2.4 心跳檢測

主從服務器建立連接后宪卿,默認每隔1秒的诵,從服務器會想主服務器發(fā)送REPLCONF_ACK <offset>報告自己的狀態(tài)。

主服務器可以從這個命令中檢測出幾個問題:

1佑钾、主從之間的網絡連接狀態(tài)

? 如果主服務器在規(guī)則時間內沒有收到從服務器的心跳命令西疤,就可以認為主從之間出現了問題。這個時候如果配置了

min-slaves-to-write 3
min-slaves-max-lag 10

//如果從服務器數小于3或者3個服務器的心跳檢測延遲值都大于等于10秒休溶,主服務器將拒絕寫命令

2代赁、檢測新的寫命令是否丟失

? 每次主服務器收到從服務器心跳命令里的offset時,都會與自己的offset進行比較兽掰,如果小于自己的芭碍。那么可以知道某次傳遞的寫命令在網絡上丟失或者從服務器加載失敗,這個時候主服務器會主動將這部分缺少的命令發(fā)送給從服務器(需要缺失命令還在緩存區(qū)孽尽,如果不在猜測應該是發(fā)起一次完整同步窖壕,未驗證過)。

3杉女、輔助實現min-slaves

2.5 備注

主從服務器建立套接字連接后瞻讽,從服務器首先會發(fā)起Ping命令檢測套接字的讀寫是否正常。收到主服務器的Pong命令后證明正常熏挎。然后在判斷主服務器是否需要身份認證速勇,發(fā)起密碼。然后進行復制流程婆瓜。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末快集,一起剝皮案震驚了整個濱河市贡羔,隨后出現的幾起案子,更是在濱河造成了極大的恐慌个初,老刑警劉巖乖寒,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異院溺,居然都是意外死亡楣嘁,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門珍逸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逐虚,“玉大人,你說我怎么就攤上這事谆膳“劝” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵漱病,是天一觀的道長买雾。 經常有香客問我,道長杨帽,這世上最難降的妖魔是什么漓穿? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮注盈,結果婚禮上晃危,老公的妹妹穿的比我還像新娘。我一直安慰自己老客,他們只是感情好僚饭,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沿量,像睡著了一般浪慌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朴则,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音钓简,去河邊找鬼乌妒。 笑死,一個胖子當著我的面吹牛外邓,可吹牛的內容都是我干的撤蚊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼损话,長吁一口氣:“原來是場噩夢啊……” “哼侦啸!你這毒婦竟也來了槽唾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤光涂,失蹤者是張志新(化名)和其女友劉穎庞萍,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體忘闻,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡钝计,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了齐佳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片私恬。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炼吴,靈堂內的尸體忽然破棺而出本鸣,到底是詐尸還是另有隱情,我是刑警寧澤硅蹦,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布永高,位于F島的核電站,受9級特大地震影響提针,放射性物質發(fā)生泄漏命爬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一辐脖、第九天 我趴在偏房一處隱蔽的房頂上張望饲宛。 院中可真熱鬧,春花似錦嗜价、人聲如沸艇抠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽家淤。三九已至,卻和暖如春瑟由,著一層夾襖步出監(jiān)牢的瞬間絮重,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工歹苦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留青伤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓殴瘦,卻偏偏與公主長得像狠角,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚪腋,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容

  • 本篇就一下方面展開分析 如何使用主從復制丰歌? 主從復制的原理(重點是全量復制和部分復制姨蟋、以及心跳機制) 實際應用中需...
    lucode閱讀 994評論 0 5
  • 姓名:宮松濤 學號:19021210927 嵌牛導讀:Redis是一個開源的使用ANSI C語言編寫、支持網絡立帖、可...
    走不完的叉路口閱讀 192評論 0 0
  • 作者:LoyaltyLu鏈接:https://segmentfault.com/a/119000001826835...
    碼農小光閱讀 468評論 0 12
  • Redis【一】Redis主從復制原理Redis【二】Redis哨兵模式原理 如上圖所示展示了Redis主從復制的...
    楊_同_學閱讀 517評論 0 3
  • 快速決策分析:在時間和信息不充分的條件下迅速做出決策眼溶。 很多人都經常猶豫不決,導致很多事情懸而未決厘惦,拖延了大...
    風青渝閱讀 1,342評論 0 1