1. 程式人生 > >Redis -主從複製

Redis -主從複製

特點

Redis 的主從複製(master-slave replication)功能簡單易用,特點如下:

  • 一個主伺服器可以有多個從伺服器
  • 從伺服器可以有自己的從伺服器
  • 複製資料時,主伺服器和從伺服器都不會阻塞,可以處理連線請求
  • 複製完成後,從伺服器刪除舊版本資料集並載入新版本資料集時, 連線請求會被阻塞

redis 的預設配置中,從伺服器是隻讀的,這樣在一主多從的結構中,主伺服器負責處理寫請求並將結果同步到所有的從伺服器,從伺服器則只負責讀請求。只讀模式由配置檔案中的 slave-read-only 選項控制, 也可以通過 CONFIG SET 命令來開啟或關閉這個模式。

原理

從伺服器以每秒一次的頻率 PING 主伺服器, 並報告複製流的處理情況。
主伺服器會記錄各個從伺服器最後一次向它傳送 PING 的時間。

如果至少有 min-slaves-to-write 個從伺服器, 並且這些伺服器的延遲值都少於 min-slaves-max-lag 秒, 那麼主伺服器就會執行客戶端請求的寫操作。否則寫操作就不會被執行, 主伺服器會向請求執行寫操作的客戶端返回一個錯誤。

min-slaves-to-write(執行寫操作所需的最少從伺服器數量) 和 min-slaves-max-lag (網路延遲的最大值)兩個選項,可以防止主伺服器在不安全的情況系執行寫命令。

例如,主伺服器設定:

min-slaves-to-write 3
min-slaves-max-lag 10

那麼,從伺服器數量少於3,或者3個從伺服器的延時(lag)值都大於等於10秒時,主伺服器將拒絕執行寫命令。可以通過在主伺服器上執行 info replication 命令檢視lag值。

開啟主從複製

注意:開啟主從複製時,會清空從伺服器原有的資料,並從主伺服器同步新資料過來。注意備份。

可以通過配置檔案開啟,也可以從客戶端傳送命令開啟。

  1. 利用配置檔案開啟
    在配置檔案中開啟下面指令,並填寫正確的 IP 地址和埠號即可:
slaveof 192.168.1.1 6379
  1. 從客戶端傳送命令開啟
    客戶端連線到 redis 伺服器後,可以傳送 slaveof 命令來將當前連線的伺服器配置為從伺服器:
127.0.0.1:6379> SLAVEOF 192.168.1.1 10086
OK

主從切換

當主伺服器宕機時,需要將某個從伺服器切換為主伺服器。對從伺服器執行 SLAVEOF NO ONE

將使這個從伺服器關閉複製功能,變成主伺服器,且原來同步所得的資料集不會被丟棄。

利用這個特性,可以在主伺服器失敗的時候,將從伺服器用作新的主伺服器,從而實現無間斷執行。

主伺服器開啟密碼認證時

如果主伺服器設定了密碼,需要修改配置檔案的 masterauth 引數。之後重啟 slave 的 Redis 服務即可。