主從節點的數據複製是Redis高可用和高負載的重要基礎,本篇介紹數據的主從複製流程。網絡
數據複製策略:異步
全量複製:通常用於初次複製場景,Redis早期支持的複製功能只有全量複製,它會把主節點所有數據一次性發送給從節點,當數據量較大時,會對主從節點和網絡形成很大的開銷。blog
部分複製(2.8開始支持):用於處理在主從複製中因網絡閃斷等緣由形成的數據丟失場景,當從節點再次連上主節點後,若是條件容許,主節點會補發丟失數據給從節點(補發數據從複製積壓緩衝區獲取)。由於補發的數據遠遠小於全量數據,能夠有效避免全量複製的太高開銷。隊列
參與複製的主從節點都會維護自身複製偏移量。主節點(master)在處理完寫入命令後,會把命令的字節長度作累加記錄,統計信息在info relication中的master_repl_offset指標中,如圖:io
從節點(slave)每秒鐘上報自身的複製偏移量給主節點,所以主節點也會保存從節點的複製偏移量, 從節點在接收到主節點發送的命令後,也會累加記錄自身的偏移量。統計信息在info relication中的slave_repl_offset指標中。ast
經過對比主從節點的複製偏移量,能夠判斷主從節點數據是否一致。基礎
複製積壓緩衝區:高可用
複製積壓緩衝區是保存在主節點上的一個固定長度的隊列,默認大小爲1MB,當主節點有鏈接的從節點(slave)時被建立,這時主節點(master)響應寫命令時,不但會把命令發送給從節點,還會寫入複製積壓緩衝區。請求
主接到操做請求當即返回,將命令寫入複製積壓緩衝區,異步將命令發送給從機。im
當主從節點網絡中斷後,從節點再次連上主節點時會發送psync{offset}{runId}命令請求部分複製,若是請求的偏移量不在主節點的積壓緩衝區內,則沒法提供給從節點數據,所以部分複製會退化爲全量複製。
下一篇會介紹Redis阻塞的緣由分析