一、什麼是主從複製?redis
redis持久化保證了redis服務重啓也不會丟失數據,由於redis服務重啓後會將硬盤上持久化的數據恢復到內存中,可是當redis服務器的硬盤損壞了可能會致使數據丟失,若是經過redis的主從複製機制就能夠避免這種單點故障。主機數據更新後根據配置和策略,自動同步到備機。數據庫
二、主從複製能幹嗎?bash
三、怎麼配?服務器
從庫配置:slaveof [主庫IP] [主庫端口]測試
補充:每次slave與master斷開後,都須要從新鏈接,除非你配置進redis.conf文件;ui
鍵入info replication 能夠查看redis主從信息。spa
redis提供了一個master,多個slave的服務。.net
準備三個redis服務code
依次命名文件夾子master,slave1,slave2server
這裏爲在測試機上,不干擾原來的redis服務,咱們master使用6000端口。
配置文件(redis.conf)
master配置修改端口:
port 6000 requirepass 123456
slave1修改配置:
1
2
3
4
5
6
7
|
port 6001
slaveof 127.0.0.1 6000
masterauth 123456
requirepass 123456
|
slave2修改配置:
1
2
3
4
5
6
7
|
port 6002
slaveof 127.0.0.1 6000
masterauth 123456
requirepass 123456
|
requirepass是認證密碼,應該以後要做主從切換,因此建議全部的密碼都一致, masterauth是從機對主機驗證時,所需的密碼。(即主機的requirepass)
啓動主機:
1
|
redis-server redis.conf
|
啓動從機:
redis-server redis1.conf redis-server redis2.conf
輸入:
ps -ef |grep redis
root 6617 1 0 18:34 ? 00:00:01 redis-server *:6000 root 6647 1 0 18:43 ? 00:00:00 redis-server *:6001 root 6653 1 0 18:43 ? 00:00:00 redis-server *:6002 root 6658 6570 0 18:43 pts/0 00:00:00 grep redis
能夠看到主從機的redis已經相應啓動。
咱們來驗證下 主從複製。
master:
1
2
3
4
5
|
[root@localhost master]
# redis-cli -p 6000
127.0.0.1:6000> auth 123456
OK
127.0.0.1:6000>
set
test
chenqm
OK
|
slave1:
1
2
3
4
5
|
[root@localhost slave2]
# redis-cli -p 6001
127.0.0.1:6001> auth 123456
OK
127.0.0.1:6001> get
test
"chenqm"
|
slave2:
1
2
3
4
5
|
[root@localhost slave2]
# redis-cli -p 6002
127.0.0.1:6002> auth 123456
OK
127.0.0.1:6002> get
test
"chenqm"
|
能夠看到主機執行寫命令,從機能同步主機的值,主從複製,讀寫分離就實現了。
四、怎麼玩?
4.一、一主二從
一個Master,兩個Slave,Slave只能讀不能寫;當Slave與Master斷開後須要從新slave of鏈接纔可創建之。
前的主從關係;Master掛掉後,Master關係依然存在,Master重啓便可恢復
4.二、薪火相傳
上一個Slave能夠是下一個Slave的Master,Slave一樣能夠接收其餘slaves的鏈接和同步請求,那麼該slave做爲了鏈條中下一個slave的Master,如此能夠有效減輕Master的寫壓力。若是slave中途變動轉向,會清除以前的數據,從新創建最新的。
4.三、反客爲主
當Master掛掉後,Slave可鍵入命令 slaveof no one使當前redis中止與其餘Master redis數據同步,轉成Master redis
五、複製原理
一、Slave啓動成功鏈接到master後會發送一個sync命令;
二、Master接到命令啓動後的存盤進程,同時收集全部接收到的用於修改數據集命令,在後臺進程執行完畢以後,master
將傳送整個數據文件到slave,以完成一次徹底同步;
三、全量複製:而slave服務在數據庫文件數據後,將其存盤並加載到內存中;
四、增量複製:Master繼續將新的全部收集到的修改命令依次傳給slave,完成同步;
五、可是隻要是從新鏈接master,一次徹底同步(全量複製)將被自動執行。
六、哨兵模式
反客爲主的自動版,可以後臺監控Master庫是否故障,若是故障了根據投票數自動將slave庫轉換爲主庫。一組sentinel能
同時監控多個Master。
使用步驟:
一、在Master對應redis.conf同目錄下新建sentinel.conf文件,名字絕對不能錯;
二、配置哨兵,在sentinel.conf文件中填入內容:
sentinel monitor 被監控數據庫名字(本身起名字) ip port 1
說明:上面最後一個數字1,表示主機掛掉後slave投票看讓誰接替成爲主機,得票數多少後成爲主機。
三、啓動哨兵模式:
命令鍵入:redis-sentinel /myredis/sentinel.conf
注:上述sentinel.conf路徑按各自實際狀況配置
七、複製的缺點
延時問題,因爲全部的寫操做都是在Master上操做,而後同步更新到Slave上,因此從Master同步到Slave機器有必定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增長也會使得這個問題更加嚴重。
https://blog.csdn.net/zhangguanghui002/article/details/78524533