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值。
開啟主從複製
注意:開啟主從複製時,會清空從伺服器原有的資料,並從主伺服器同步新資料過來。注意備份。
可以通過配置檔案開啟,也可以從客戶端傳送命令開啟。
- 利用配置檔案開啟
在配置檔案中開啟下面指令,並填寫正確的 IP 地址和埠號即可:
slaveof 192.168.1.1 6379
- 從客戶端傳送命令開啟
客戶端連線到 redis 伺服器後,可以傳送slaveof
命令來將當前連線的伺服器配置為從伺服器:
127.0.0.1:6379> SLAVEOF 192.168.1.1 10086
OK
主從切換
當主伺服器宕機時,需要將某個從伺服器切換為主伺服器。對從伺服器執行 SLAVEOF NO ONE
利用這個特性,可以在主伺服器失敗的時候,將從伺服器用作新的主伺服器,從而實現無間斷執行。
主伺服器開啟密碼認證時
如果主伺服器設定了密碼,需要修改配置檔案的 masterauth
引數。之後重啟 slave 的 Redis 服務即可。