)
四、主從復(fù)制單機 Redis 存在單點風(fēng)險機器宕機服務(wù)即中斷數(shù)據(jù)也可能丟失。主從復(fù)制通過建立多個相同數(shù)據(jù)的副本為讀寫分離與故障轉(zhuǎn)移提供基礎(chǔ)。4.1 配置在從節(jié)點執(zhí)行 slaveof 命令即可建立復(fù)制關(guān)系新版可使用 replicaof本機示例把 6380 端口實例設(shè)為 6379 的從節(jié)點# 從節(jié)點 6380 執(zhí)行 127.0.0.1:6380 slaveof 127.0.0.1 6379 OK 127.0.0.1:6380 info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up建立復(fù)制的完整過程大致分為六個步驟從保存主節(jié)點信息到命令持續(xù)復(fù)制保存主節(jié)點信息從節(jié)點只記錄主節(jié)點地址此時復(fù)制流程尚未開始master_link_status 為 down主從建立連接從節(jié)點內(nèi)部定時任務(wù)發(fā)現(xiàn)新主節(jié)點后建立基于 TCP 的網(wǎng)絡(luò)連接失敗會持續(xù)重試發(fā)送 ping確認主節(jié)點應(yīng)用層工作正?;貜?fù)超時則斷開重連權(quán)限驗證主節(jié)點要求認證時從節(jié)點發(fā)送密碼同步數(shù)據(jù)集進入數(shù)據(jù)同步階段命令持續(xù)復(fù)制同步完成后主節(jié)點把后續(xù)寫命令持續(xù)發(fā)給從節(jié)點4.2 拓撲結(jié)構(gòu)復(fù)制拓撲支持單層或多層關(guān)系常見的三種結(jié)構(gòu)各有適用場景一主一從最簡單的拓撲主節(jié)點宕機時從節(jié)點提供故障轉(zhuǎn)移支持。寫并發(fā)高且需要持久化時可以只在從節(jié)點開啟 AOF避免持久化干擾主節(jié)點性能一主多從應(yīng)用端利用多個從節(jié)點實現(xiàn)讀寫分離讀比重大的場景可以把讀命令均衡到不同從節(jié)點耗時讀命令可以指定專門的從節(jié)點執(zhí)行樹形主從結(jié)構(gòu)從節(jié)點既能復(fù)制數(shù)據(jù)也能作為下層從節(jié)點的主節(jié)點繼續(xù)向下復(fù)制4.3 原理1復(fù)制偏移量與數(shù)據(jù)集標(biāo)識主從節(jié)點各自維護復(fù)制偏移量主節(jié)點發(fā)送命令后累加自身偏移量從節(jié)點接收執(zhí)行后累加自身偏移量。對比兩個偏移量可以判斷數(shù)據(jù)是否一致replid 與 offset 共同標(biāo)識一個數(shù)據(jù)集兩個節(jié)點的 replid 和 offset 都相同說明持有的數(shù)據(jù)一致。偏移量可以類比“學(xué)習(xí)進度”——主節(jié)點準備了多少內(nèi)容、從節(jié)點學(xué)到哪里一目了然。2psync 與同步流程Redis 使用 psync 命令完成數(shù)據(jù)同步分為全量復(fù)制與部分復(fù)制兩類。psync 攜帶 replid 與 offset 參數(shù)從節(jié)點的響應(yīng)分支有幾種情況回復(fù) FULLRESYNC replid offset進入全量復(fù)制流程回復(fù) CONTINUE進入部分復(fù)制流程回復(fù) -ERR主節(jié)點版本過低不支持 psync可回退使用 syncpsync 由 Redis 在主從模式下自動調(diào)用一般不需要手動執(zhí)行與舊版 sync 相比sync 會阻塞服務(wù)器處理其他請求psync 則不會。3全量復(fù)制全量復(fù)制是主從第一次建立復(fù)制時的必經(jīng)階段代價也最高主節(jié)點 bgsave 生成快照、RDB 文件網(wǎng)絡(luò)傳輸、從節(jié)點清空舊數(shù)據(jù)并加載 RDB期間耗時隨數(shù)據(jù)集增大而拉長。2.8.18 版本起支持無磁盤復(fù)制主節(jié)點不落盤直接把生成的 RDB 數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送給從節(jié)點省去一輪磁盤讀寫。4部分復(fù)制部分復(fù)制針對網(wǎng)絡(luò)閃斷或命令丟失的場景。從節(jié)點斷線重連后攜帶之前的 replid 與 offset 請求補發(fā)主節(jié)點依據(jù) offset 在復(fù)制積壓緩沖區(qū)中查找數(shù)據(jù)緩沖區(qū)是先進先出的定長隊列能保存最近已復(fù)制的數(shù)據(jù)5心跳機制主從之間的長連接靠應(yīng)用層心跳維護區(qū)別于 TCP 自帶心跳。主從節(jié)點彼此模擬對方的客戶端進行通信主節(jié)點定期向從節(jié)點發(fā)送 ping從節(jié)點定期上報復(fù)制偏移量用于監(jiān)控連接狀態(tài)與數(shù)據(jù)一致性。