Redis主從復制原理

1部服,舊版本(redis2.8以前)復制實現

1)sync(同步) + command propagate(命令傳播)兩個操作铅搓。
2)當slave向master發(fā)送slaveof命令時,首先執(zhí)行sync同步操作陷寝。
sync執(zhí)行過程
從服務器向主發(fā)送sync命令
主服務器執(zhí)行bgsave命令生成rdb锅很,發(fā)送到從,后續(xù)命令記錄到緩沖區(qū)凤跑。
從服務器載入rdb爆安,主服務器發(fā)送緩沖區(qū)命令到從。
3)命令傳播
主服務器對從服務器執(zhí)行命令傳播操作仔引,將自己執(zhí)行的命令扔仓,發(fā)送給從服務器執(zhí)行。
4)舊版本sync命令咖耘,對斷線重復制效率很低翘簇。斷線之后,會重新使用sync全量同步儿倒。
bgsave命令:耗費master大量的cpu版保、內存、磁盤I/O等
rdb傳輸:耗費網絡資源夫否,并且影響master的響應請求找筝。

2,新版本復制實現

1)使用psync命令替換sync慷吊。
psync分為:完整重同步(同sync)部分重同步(用于斷線后復制)
2)從服務器發(fā)送psync -> 主服務器返回+continue -> 主服務向從服務器發(fā)送斷線期間的寫命令袖裕。
3)部分重同步的實現
復制偏移量:replication offset,主溉瓶、從服務器分別維護offset急鳄。主服務器每次向從傳播n字節(jié)數據時谤民,偏移量+n;從服務器接收n字節(jié)數據疾宏,偏移量+n张足。(通過對比offset可以判斷主從同步狀態(tài))
復制積壓緩沖區(qū)(repl-backlog-size):replication backlog,主服務器命令傳播時坎藐,寫命令發(fā)送給slave的同時为牍,寫入backlog中,并為每個字節(jié)標記offset岩馍。
斷線重同步:slave發(fā)送psync + 自身offset -> master對比offset和backlog -> backlog存在offset則發(fā)送+continue使用部分重同步碉咆。
runID:服務器啟動時生成run id,slave初次復制時蛀恩,master將自己的id發(fā)送給slave保存疫铜。
4)psync命令
slave發(fā)送:psync ? -1 master返回:+fullresync <runid> <offset>
slave發(fā)送:psync <runid> offset master返回:+continue執(zhí)行部分沖同步。

3双谆,slaveof命令的實現

1)client向從服務器執(zhí)行slaveof 127.0.0.1 6379壳咕,從服務器將master的ip和端口保存在redisServer結構的masterHost和masterport中,返回client OK顽馋,異步執(zhí)行復制工作谓厘。
2)從服務器創(chuàng)建連向主服務器的socket,主服務器accept后寸谜,將從服務器作為master的一個client對待庞呕。
3)從服務器發(fā)送ping命令到主服務器,主服務器返回pong程帕。
4)根據從服務器的masterauth選項和主服務器的requirepass選項進行身份驗證住练。
5)從服務器發(fā)送replconf listening-port 12345,向master發(fā)送端口信息愁拭。master記錄在redisClient的slave_listening_port字段中讲逛。
6)從服務器執(zhí)行psync命令,主服務器進行命令傳播岭埠。
7)從服務器發(fā)送心跳檢測(1s一次)replconf ack <replicaton_offfset>盏混,用于檢測主從網絡連接、輔助實現min-slaves惜论、檢測命令丟失许赃。

4,雜項

1)slaveof host port 丟棄舊數據集馆类,向新的服務器進行同步
slaveof no one 關閉復制功能混聊, 不會丟棄舊數據
2)slave不會過期key,只會等待master過期key乾巧。模擬一條del命令發(fā)送給slave句喜。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末预愤,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子咳胃,更是在濱河造成了極大的恐慌植康,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件展懈,死亡現場離奇詭異销睁,居然都是意外死亡,警方通過查閱死者的電腦和手機存崖,發(fā)現死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門冻记,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人金句,你說我怎么就攤上這事檩赢÷类郑” “怎么了违寞?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長偶房。 經常有香客問我趁曼,道長,這世上最難降的妖魔是什么棕洋? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任挡闰,我火速辦了婚禮,結果婚禮上掰盘,老公的妹妹穿的比我還像新娘摄悯。我一直安慰自己,他們只是感情好愧捕,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布奢驯。 她就那樣靜靜地躺著,像睡著了一般次绘。 火紅的嫁衣襯著肌膚如雪瘪阁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天邮偎,我揣著相機與錄音管跺,去河邊找鬼。 笑死禾进,一個胖子當著我的面吹牛豁跑,可吹牛的內容都是我干的。 我是一名探鬼主播泻云,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼贩绕,長吁一口氣:“原來是場噩夢啊……” “哼火的!你這毒婦竟也來了?” 一聲冷哼從身側響起淑倾,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤馏鹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后娇哆,有當地人在樹林里發(fā)現了一具尸體湃累,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年碍讨,在試婚紗的時候發(fā)現自己被綠了治力。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡勃黍,死狀恐怖宵统,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情覆获,我是刑警寧澤马澈,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站弄息,受9級特大地震影響痊班,放射性物質發(fā)生泄漏。R本人自食惡果不足惜摹量,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一涤伐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缨称,春花似錦凝果、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骂删,卻和暖如春掌动,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宁玫。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工粗恢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欧瘪。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓眷射,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妖碉,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容