Redis主從複製
一、什麼是主從複製
主從複製就是主機更新資料之後,根據配置和策略,自動同步到從機的機制,其中Master以寫為主,從機以讀為主.
二、主從複製的目的
讀寫分離、效能擴充套件.
容災快速恢復.
三、主從複製原理
1、每次從機連通後都會給主機發送sync(同步)指令
2、主機接收到指令之後,立即進行存檔操作,傳送RDB檔案給從機
3、從機接收到RDB檔案之後,進行全盤載入
4、載入完成之後,以後主機每次進行寫操作,都會立刻將相同的命令傳送給從機,從機執行相同的命令進行資料備份
四、案例演示
1、一主二從模式演示
一、主從複製配置
準備好配置檔案redis-6379.conf、redis-6380.conf、redis-6381.conf
redis-6379.conf配置檔案
// 沿用Redis原生出廠的配置檔案的內容 include /usr/local/myredis/bin/redis.conf =====下面這些配置會覆蓋掉出廠預設的配置檔案內容===== // 保護模式關閉 protected-mode no // 埠6379 port 6379 // 允許後臺啟動 daemonize yes // 生成的日誌檔案路徑和名稱 logfile /usr/local/myredis/bin/log/redis-6379.log // 生成的RDB檔名稱 dbfilename dump-6379.rdb // 生成的RDB檔案路徑 dir /usr/local/myredis/bin/dump/
redis-6380.conf配置檔案
include /usr/local/myredis/bin/redis.conf
protected-mode no
port 6380
daemonize yes
logfile /usr/local/myredis/bin/log/redis-6380.log
dbfilename dump-6380.rdb
dir /usr/local/myredis/bin/dump/
redis-6381.conf配置檔案
include /usr/local/myredis/bin/redis.conf protected-mode no port 6381 daemonize yes logfile /usr/local/myredis/bin/log/redis-6381.log dbfilename dump-6381.rdb dir /usr/local/myredis/bin/dump/
二、同時啟動redis-6379.conf、redis-6379.conf、redis-6379.conf三臺伺服器.
三、使用命令slaveof <masterip> <masterport> 來建立主從關係,並且使用info replication來檢視主從關係.
四、通過下圖可以看到6379、6380、6381三臺服務均已正常啟動,並且6379作為主機,而6380、6381作為從機.
.
五、一主二從模式相關測試案例步驟
開啟埠為6379的主機---->設定key1、key2----->6380、6381和6379建立主從關係---->6380和6381查詢keys *,結果存在key1、key2---->手動down掉主機6379---->使用info replication查詢6380、6381的狀態,發現他們的主機依然是6379,只不過狀態是down.
1、切入點問題,slave1、slave2是從頭開始備份主機資料,還是從切入點開始複製資料.?
開始6379並沒有與6380和6381建立主從關係就設定了key1、key2,他們建立主從關係之後能查到key1、key2說明只要他們建立關係,就直接能全盤複製到主機的資料,和切入時機沒有關係.
2、主機的讀寫許可權、從機的讀寫許可權?
從下圖中可以看到如下資訊:(error) READONLY You can't write against a read only replica.說明從機只能讀不能寫,主機可以寫也可以讀,但是主機一般只做與寫有關的操作.
3、主機shutdown後情況如何,從機是尚未還是原地待命?
從下圖中可以看出,主機6379shutdown之後,從機6380和6381的角色並沒有轉變,還是slave,並且主機都是6379.
4、主機回來之後,主機新增記錄,從機還能順利複製嗎?
主機回來之後,新增記錄,從機會繼續複製主機資料.
5、其中一臺從機down掉之後,他依舊 能跟上大部隊嗎?
從機6381shutdown之後,重新開啟6381伺服器,這個時候6381的角色變成了master,它不再作為6379的從了,如果想繼續建立主從關係需要再次使用命令slaveof 127.0.0.1 6379這個時候從機6381又會繼續全盤載入6379RDB中的全部資料.