redis的主從復制

如何主從復制

向redis服務器發送下面的命令
127.0.0.1:12345> slaveof 127.0.0.1:6379
那么127.0.0.1:12345將成為127.0.0.1:6379的從服務器,也就是說127.0.0.1:6379是127.0.0.1:12345的主服務器。
redis和mysql一樣,也是異步復制。

redis 2.8之前得復制功能

  1. 復制方式
  • 同步(sync)
    從服務器啟動時執行同步操作。
  • 命令傳播(command propagate)
    主服務器有操作命令時會廣播給從服務器;然后從服務器在本地執行操作命令。
  1. 同步
  1. 主從服務器斷開后的恢復


redis 2.8以后恢復功能

psync代替了sync命令來執行復制時的同步操作。

  1. sync的同步模式
  • 完整重同步
    用于初次復制情況,跟sync命令執行步驟一樣。
  • 部分重同步
    用于斷線后重復制情況。
  1. 部分重同步的實現方式
    • 復制偏移量
      主從服務器都會維護一個復制偏移量。主服務器每次向從服務器傳播N個字節數據時,就將自己的復制偏移量的值加上N;從服務器每次收到主服務器傳播來的N個字節的數據庫,就將自己的復制偏移量的值加上N。
  • 復制積壓緩沖區
    積壓緩存區是主服務器維護的一個固定長度先進先出隊列,默認大小為1M。當主服務器進行命令傳播時,它不僅會將寫命令發送給所有的服務器,還會將命令入隊復制到積壓緩沖區,復制緩沖區會記錄每個字節相應的復制偏移量。
    假如從服務器的offset在積壓緩沖區中,就執行部分重同步;假如offset不在積壓緩沖區中,則進行完整重同步。
    復制積壓緩沖區的大小= 從服務器恢復的秒數 * 每秒鐘寫的字節數大小

  • 服務器運行ID
    每個redis服務器都有會自己的運行ID,運行ID在服務器啟動時自動生成,由40個隨機的16進制字符組成。當從服務器對主服務器進行初次復制時,主服務器會把自己的運行ID傳送給從服務器,從服務器則會把主服務器ID存儲下來。短線重連時,會根據主運行ID來判斷主服務器是不是變化了,不變化就繼續執行部分重同步;變化了則進行完整重同步。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容