Redis學習十:Redis的複製(Master/Slave)【重要】
一、是什麼
官網
行話:也就是我們所說的主從複製,主機資料更新後根據配置和策略,自動同步到備機的master/slaver機制,Master以寫為主,Slave以讀為主
二、能幹嘛
讀寫分離 容災恢復
三、怎麼玩
1.配從(庫)不配主(庫)
2.從庫配置:slaveof 主庫IP 主庫埠
說明:
每次與master斷開之後,都需要重新連線,除非你配置進redis.conf檔案
Info replication
3.修改配置檔案細節操作
【1】拷貝多個redis.conf檔案
【2】開啟daemonize yes
【3】Pid檔名字
【4】指定埠
【5】Log檔名字
【6】Dump.rdb名字
4.常用3招
【1】一主二僕
Init
一個Master兩個Slave
日誌檢視
主機日誌
備機日誌
info replication
主從問題演示
1 切入點問題?slave1、slave2是從頭開始複製還是從切入點開始複製?比如從k4進來,那之前的123是否也可以複製 2 從機是否可以寫?set可否? 3 主機shutdown後情況如何?從機是上位還是原地待命 4 主機又回來了後,主機新增記錄,從機還能否順利複製? 5 其中一臺從機down後情況如何?依照原有它能跟上大部隊嗎?
【2】薪火相傳
上一個Slave可以是下一個slave的Master,Slave同樣可以接收其他slaves的連線和同步請求,那麼該slave作為了鏈條中下一個的master,可以有效減輕master的寫壓力
中途變更轉向:會清除之前的資料,重新建立拷貝最新的
Slaveof 新主庫IP 新主庫埠
【2】反客為主
SLAVEOF no one
使當前資料庫停止與其他資料庫的同步,轉成主資料庫
四、複製原理
1.Slave啟動成功連線到master後會傳送一個sync命令
2.Master接到命令啟動後臺的存檔程序,同時收集所有接收到的用於修改資料集命令,在後臺程序執行完畢之後,master將傳送整個資料檔案到slave,以完成一次完全同步
3.全量複製:而slave服務在接收到資料庫檔案資料後,將其存檔並載入到記憶體中。
4.增量複製:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步
5.但是隻要是重新連線master,一次完全同步(全量複製)將被自動執行
五、哨兵模式(sentinel)
1.是什麼
反客為主的自動版,能夠後臺監控主機是否故障,如果故障了根據投票數自動將從庫轉換為主庫
2.怎麼玩(使用步驟)
1)調整結構,6379帶著80、81
2)自定義的/myredis目錄下新建sentinel.conf檔案,名字絕不能錯
3)配置哨兵,填寫內容
sentinel monitor 被監控資料庫名字(自己起名字) 127.0.0.1 6379 1
上面最後一個數字1,表示主機掛掉後salve投票看讓誰接替成為主機,得票數多少後成為主機
4)啟動哨兵
Redis-sentinel /myredis/sentinel.conf
上述目錄依照各自的實際情況配置,可能目錄不同
5)正常主從演示
6)原有的master掛了
7)投票新選
8)重新主從繼續開工,info replication查檢視
9)問題:如果之前的master重啟回來,會不會雙master衝突?
3.一組sentinel能同時監控多個Master
六、複製的缺點
複製延時
由於所有的寫操作都是先在Master上操作,然後同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。