Redis 的主從複製(Master/Slave)
1. 是什麼
行話:也就是我們所說的主從複製,主機資料更新後根據配置和策略自動同步到備機的 master/slave 機制,Master以寫為主,Slave 以讀為主
2. 能幹嘛
- 資料冗餘:主從複製實現了資料的熱備份,是持久化之外的一種資料冗餘方式
- 故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗餘
- 負載均衡:在主從複製的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis資料時應用連線主節點,讀Redis資料時應用連線從節點),分擔伺服器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載
- 高可用基石:由於主從複製是哨兵和叢集能夠實施的基礎,因此說主從複製是Redis高可用的基礎
3. 怎麼玩
Redis主從複製講解
(1). info replication:檢視 目標redis 主從情況
(2) . 配從庫不配主庫
從庫配置:slaveof 主庫IP 主庫埠
注:slaveof 進行配置的話,每次斷開後都需要重新連線,除非配置進redis.conf檔案中
一旦從庫 跟隨了 主庫,從庫可讀不可寫,首次是全量同步 (這裡的首次是執行slaveof命令時 ) 之後是增量,若從庫同步之前存在 與主庫相同的 key的 資料,則主庫的 資料覆蓋從庫
(3). 常用策略
①. 一主二從
此一主二從 可以水平擴充套件為一主多從,主機主要負責寫,從機主要負責讀
主機down掉在沒有哨兵機制的情況下,從機只會靜默等待 直至主機恢復執行狀態
②.薪火相傳
上一個Slave可以是下一個slave的Master,Slave同樣可以接收其他slaves的連線和同步請求,那麼該slave作為了鏈條中下一個的master,可以有效減輕master的寫壓力。
第一個開頭的事master,其他都是slave,只是中間的slave是下一個的master
(4). 複製原理
Slave啟動成功連線到master後會傳送一個sync命令
Master接到命令啟動後臺的存檔程序,同時收集所有接收到的用於修改資料集命令,
在後臺程序執行完畢之後,master將傳送整個資料檔案到slave,以完成一次完全同步
- 全量複製:而slave服務在接收到資料庫檔案資料後,將其存檔並載入到記憶體中。
- 增量複製:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步
但是隻要是重新連線master,一次完全同步(全量複製)將被自動執行
(5). 重要的哨兵模式
能夠後臺監控主機是否故障,如果故障了根據投票數自動將從庫轉換為主庫
以一主二從的策略為例:
自定義的/myredis目錄下新建sentinel.conf檔案,名字絕不能錯
配置哨兵,填寫內容
sentinel monitor 被監控資料庫名字(自己起名字) 127.0.0.1 6379 1
上面最後一個數字1,表示主機掛掉後salve投票看讓誰接替成為主機,得票數多少後成為主機
3.啟動哨兵
Redis-sentinel /myredis/sentinel.conf
4.正常主從演示,原有的master掛了
5.投票新選,重新主從繼續開工,info replication查檢視
6.原有的down掉主機Master恢復運轉,則輪為從機Slave
缺點:複製延時
由於所有的寫操作都是先在Master上操作,然後同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重