主從同步可以防止主機壞掉導致網站不能正常運作,這種方法即把從機設置爲主機即可。 Redis支持主從同步,而且配置很簡單。Redis主從同步的優點如下:
- Master可以有多個Slave
- 多個Slave連接到相同Master,Slave還可以連接其他Slave形成圖形結構
- 不會阻塞Master。 當一個或者多個Slave與Master進行初次同步數據時,Master可以繼續處理客戶端的請求。相反,Slave在初次同步數據時會阻塞從而不能處理客戶端的請求
- 主從同步用來提高系統的伸縮性,比如多個Slave專門用於客戶端的讀請求
- 在Master服務器上禁止數據持久化(註釋配置文件中所有save配置選項), 只在Slave服務器上進行數據持久化。
1. 同步原理
Redis主從同步設置很簡單,設置好Slave服務器後,Slave自動和Master建立連接,發送sync命令。
無論是第一次同步建立的連接還是連接斷開後重新建立的連接,Master都啓動一個後臺進程,將內存數據以快照方式寫入文件中,同時Master主進程開始收集新的寫命令並且緩存起來。Master後臺進程完成內存快照操作後,把數據文件發給Slave,後續Master收到的寫命令都通過開始建立的連接發送給Slave。當Master與Slave斷開連接,Slave自動重新建立連接。如果Master同時收到多個Slave發來的同步請求,其只啓動一個進程寫數據庫鏡像,然後發送給所有Slave。
Redis主從同步過程分兩個階段,第一階段如下:
Slave服務器主動連接到Master服務器
Slave服務器發送sync命令到Master服務器請求同步
Master服務器備份數據庫到rdb文件
Master服務器把rdb文件傳輸給Slave服務器
Slave服務器清空數據庫數據,把rdb文件數據導入數據庫中.
完成第一階段,接下來Master服務器把用戶所有更改數據的操作,通過命令的形式轉發給所有Slave服務器,Slave服務器只需執行Master服務器發送過來的命令就可以達到同步的效果。
相對於MySQL來說, Redis主從複製配置很簡單,只需在Slave服務器配置文件中加入以下配置項
slaveof 192.168.1.1 6379 # 指定Master的IP和端口