Redis的主從複製(Master/Slave)
-
主從複製:主機數據更新後根據配置和策略,
自動同步到備機的master/slaver機制,Master以寫爲主,Slave以讀爲主,可以進行讀寫分離、容災恢復。 -
配置主從數據庫:
-
配從(庫)不配主(庫)
-
修改配置文件:
- 拷貝三份
redis.conf
,分別爲6379.conf
、6380.conf
、6381.conf
,並修改各配置文件的pidfile "/var/run/redis63**.pid"
、port 63**
、logfile "63**.log"
、dbfilename "dump63**.rdb"
的**爲79、80、81。
- 拷貝三份
-
各redis服務器和客戶端以不同端口啓動
[root@iz2zeewd5q2wfzj9hhfyntz bin]# redis-server /myredis/redis6379.conf [root@iz2zeewd5q2wfzj9hhfyntz bin]# redis-cli -p 6379
-
-
常見組合:
- 一主二從:
- 一個Master兩個Slave,Slave啓動成功連接到master後可以共享Master的數據(複製原理);
- Master可以寫數據讀數據,Slave不可以寫數據只能讀數據;
- 可以通過
info replication
查看當前狀態;
- Master掛了之後,各個Slave原地待命,仍然可以使用原數據
- Master重新開啓之後還原爲Master
- 主—從主—從
- Slaveof 新主庫IP 新主庫端口
- 上一個Slave可以是下一個slave的Master,Slave同樣可以接收其他slaves的連接和同步請求,那麼該slave作爲了鏈條中下一個的master,可以有效減輕master的寫壓力;
- 中途變更轉向:會清除之前的數據,重新建立拷貝最新的;
- 自己做主庫
- SLAVEOF no one
- 使當前數據庫停止與其他數據庫的同步,轉成主數據庫
- 一主二從:
-
複製原理:
- Slave啓動成功連接到master後會發送一個sync命令;
- Master接到命令啓動後臺的存盤進程,同時收集所有接收到的用於修改數據集命令,在後臺進程執行完畢之後,master將傳送整個數據文件到slave,以完成一次完全同步;
- 全量複製:而slave服務在接收到數據庫文件數據後,將其存盤並加載到內存中;
- 增量複製:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步;
- 但是隻要是重新連接master,一次完全同步(全量複製)將被自動執行;
-
哨兵模式(sentinel)
- 自動將自己作爲主庫:能夠後臺監控主機是否故障,如果故障了根據投票數自動將從庫轉換爲主庫;
- 配置過程:
- 在
/myredis/
下創建sentinel.conf
文件; - 配置哨兵: sentinel monitor host6379 127.0.0.1 6379 1(host6379爲哨兵名,可任意;1表示大於這個票數且票數最多的可以當Master)
- 啓動哨兵:在
/usr/local/bin
下執行Redis-sentinel /myredis/sentinel.conf
- 當master掛了之後,投票選舉:
- 在
- 一組sentinel能同時監控多個Master
- 複製延時問題:
由於所有的寫操作都是先在Master上,再同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。