Redis 主從複製原理

FLaravel發表於2020-04-28

主從複製的作用:

  • 資料冗餘:主從複製實現了資料的熱備份,是持久化之外的一種資料冗餘方式
  • 故障恢復:當主節點出現問題的時候,可以自由從節點提供服務,實現快速故障恢復
  • 讀寫分離:主庫寫,從庫讀,讀寫分離不僅僅可以提高伺服器的負載能力,同事可根據需求的變化,改變從庫的數量
  • 負載均衡:在主從複製的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis資料時應用連線主節點,讀Redis資料時應用連線從節點),分擔伺服器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis伺服器的併發量。

主從複製的執行流程

連線建立階段(即準備階段)、資料同步階段、命令傳播階段。
Laravel

  1. 從節點儲存主節點(master)資訊

  2. 從節點會建立一個socket套接字,開啟埠監聽,專門接收主節點傳遞的複製命令,如果從節點連線失敗,那麼會一直迴圈建立連線
    Redis 主從複製原理

Laravel

  1. 主從節點建立成功後,從傳送PING命令,主返回PONG,如果傳送 PING 命令後,從節點沒有收到主節點的 PONG 回覆或者超時,比如網路超時或者主節點正在阻塞無法響應命令,從節點會斷開復制連線,下次定時任務會發起重連。
    Laravel

  2. 進行許可權驗證,如果主節點設定了 requirepass 引數,則需要密碼驗證,從節點必須配置 masterauth 引數保證與主節點相同的密碼才能通過驗證;如果驗證失敗複製將終止,從節點重新發起復制流程。

  3. 開始同步資料,主從複製連線正常通訊後,對於首次建立複製的場景,主節點會把持有的資料全部傳送給從節點,這部分操作是耗時最長的步驟。

  4. 命令持續複製,當主節點把當前的資料同步給從節點後,便完成了建立流程,接下來主節點會持續將寫命令給從伺服器,進行資料一致性

配置主從伺服器

  • 分別開啟多臺Redis服務容器,並在從節點配置檔案配置主節點的ip即可,分別三臺Redis容器
    Laravel

  • 分別進去兩臺從伺服器進行配置資訊,首先要知道主伺服器的ip地址和埠,然後,關閉守護模式
    Laravel

  • 然後重啟兩臺Redis伺服器即可,檢視是否配置好,info replication檢視
    Laravel
    Laravel
    Laravel

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章