redis主從

簡介

  1. 主從服務器的功能區(qū)別。
  2. 主從服務器的連接建立福也。
  3. 主從服務器之間的數(shù)據(jù)同步流程工育。
  4. 連接建立時的全量數(shù)據(jù)同步逃默。
  5. 主從狀態(tài)同步后的增量同步更新。

主從服務器的功能

  1. 主服務器接受讀寫請求簇搅,從服務器只接受讀請求完域。通常如果是主從模式,client會通過proxy來訪問redis瘩将,proxy會對請求進行解析吟税,如果是寫請求,轉發(fā)給master_redis姿现,如果是讀請求肠仪,則轉發(fā)給slave_redis。


    redis主從關系圖

主從服務器的連接建立

前提:通過github下載了最新的redis源碼备典,并且通過make的方式編譯好了可執(zhí)行文件异旧。切到redis/src/路徑下。

  1. 啟動所有的redis服務器提佣,包括master和slave服務器吮蛹。假設以如下方式啟動了3個redis-server。
./redis-server --port 6377
./redis-server --port 6378
./redis-server --port 6379

其中以6377服務器作為master拌屏。

  1. 通過redis-cli分別連接到從服務器6378和6379潮针,輸入以下命令。
./redis-cli -p 6378
./redis-cli -p 6379
  1. 在redis-cli中輸入以下命令將6378和6379設為slave服務器倚喂。
slaveof 127.0.0.1 6378
slaveof 127.0.0.1 6379

此時會看到6377的master_redis服務器輸出了以下日志:


master的日志
  1. 測試主從效果每篷,連接主redis 6377,輸入set master 6377端圈。分別連接6378和6379焦读,輸入get master可獲得"6377"
  2. slave服務器和主斷開連接成為新的主舱权,命令:
slaveof no one
  1. 總結:通過使用redis原生的主從功能吨灭,可以發(fā)現(xiàn),主從機制可以有效的分散來自客戶端的數(shù)據(jù)讀取的壓力刑巧,但是寫數(shù)據(jù)依然是瓶頸并且未突破單機上限喧兄,總的存儲功能受限于所在的主機的內存和磁盤。而且需要通過客戶端手動配置主從啊楚,非常的落后吠冤,還需要健全的配套設施輔助主從功能。

主從服務器的數(shù)據(jù)同步流程

  1. 從服務器首次連到主服務器時恭理,主服務器將數(shù)據(jù)全量的同步到從服務器中拯辙,通常使用RDB的方式,將內存數(shù)據(jù)以RDB的方式打包,然后通過網(wǎng)絡傳輸?shù)綇姆掌髦小?/li>
  2. 當從服務器收到了主服務器通過過來的全量數(shù)據(jù)后涯保,后續(xù)的數(shù)據(jù)采用增量的方式將數(shù)據(jù)同步給slave服務器诉濒。
  3. 主從服務器狀態(tài)一致性的判定。
  4. 主從服務器網(wǎng)絡波動導致狀態(tài)不一致時夕春,斷線重連未荒。

主從服務器的連接建立和同步全量數(shù)據(jù)

slave服務器:

  1. 連接建立。在serverCron中定期執(zhí)行replicationCron及志,調用connectWithMaster和master服務器建立連接片排。
  2. 在syncWithMaster 剛建立連接時通過該處理函數(shù)來做一些信息同步。
  3. 在readSyncBulkPayload 建立連接后 首先需要同步一次全量的主的數(shù)據(jù) 通過該函數(shù)來接受master的RDB文件速侈,之后再replicationCreateMasterClient 承接上一步在這里一路設置處理函數(shù)為下面的readQueryFromClient率寡。
  4. 后續(xù)網(wǎng)絡事件處理函數(shù)都調用readQueryFromClient進行處理。由于后續(xù)Master會把寫命令同步給slave服務器倚搬,因此從服務器可以把master服務器作為客戶端進行處理冶共,處理其傳輸過來的每一個命令。
    master服務器:
  5. 始終使用通用的readQueryFromClient處理函數(shù)處理網(wǎng)絡消息每界,將Slave服務器作為特殊的客戶端進行處理比默。

主從服務器增量同步數(shù)據(jù)更新

  1. master定時發(fā)送 "REPLCONF GETACK"獲取slave服務器的一些信息。
  2. slave服務器調用replconfCommand命令處理replconf請求盆犁,該函數(shù)會回發(fā) "REPLCONF ACK c->reploff" 返回其已經接收到的包的字節(jié)數(shù)命咐。
  3. master收到slave的ack后,修改slave服務器收到的字符的長度谐岁,后續(xù)已收到的字節(jié)將不再發(fā)送給slave醋奠。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市伊佃,隨后出現(xiàn)的幾起案子窜司,更是在濱河造成了極大的恐慌,老刑警劉巖航揉,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塞祈,死亡現(xiàn)場離奇詭異,居然都是意外死亡帅涂,警方通過查閱死者的電腦和手機议薪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媳友,“玉大人斯议,你說我怎么就攤上這事〈济” “怎么了哼御?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我恋昼,道長看靠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任液肌,我火速辦了婚禮挟炬,結果婚禮上,老公的妹妹穿的比我還像新娘矩屁。我一直安慰自己辟宗,他們只是感情好爵赵,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布吝秕。 她就那樣靜靜地躺著,像睡著了一般空幻。 火紅的嫁衣襯著肌膚如雪烁峭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天秕铛,我揣著相機與錄音约郁,去河邊找鬼。 笑死但两,一個胖子當著我的面吹牛鬓梅,可吹牛的內容都是我干的。 我是一名探鬼主播谨湘,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼绽快,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了紧阔?” 一聲冷哼從身側響起坊罢,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擅耽,沒想到半個月后活孩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡乖仇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年憾儒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乃沙。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡航夺,死狀恐怖,靈堂內的尸體忽然破棺而出崔涂,到底是詐尸還是另有隱情阳掐,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站缭保,受9級特大地震影響汛闸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜艺骂,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一诸老、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钳恕,春花似錦别伏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至睦番,卻和暖如春类茂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背托嚣。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工巩检, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人示启。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓兢哭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夫嗓。 傳聞我的和親對象是個殘疾皇子迟螺,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349