13. Redis主從複製
13.1 簡介
主從複製,是指將一臺Redis伺服器的資料,複製到其他的Redis伺服器。前者稱為主節點(master/leader),後者稱為從節點(slave/follower)
資料的複製是單向的,只能由主節點到從節點。Master以寫為主,Slave 以讀為主。
預設情況下,每臺Redis伺服器都是主節點,且一個主節點可以有多個從節點(或沒有),但是一個從節點只能有一個主節點。
主從複製的主要作用:
- 資料冗餘:主從複製實現了資料的熱備份,是持久化之外的一種資料冗餘方式
- 故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗餘
- 負載均衡:在主從複製的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis資料時應用連線主節點,讀Redis資料時應用連線從節點),分擔伺服器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis伺服器的併發量。
- 高可用(叢集)基石:除了上述作用之外,主從複製還是哨兵和叢集能夠實施的基礎,因此說主從複製是Redis高可用的基礎。
一般來說,要將Redis運用於實際專案中,只使用一臺Redis伺服器是不可能的(宕機),原因如下:
- 從結構上來說,單個Redis伺服器會發生單點故障,並且一臺伺服器需要處理所有的請求負載,壓力較大;
- 從容量上來說,單個Redis伺服器記憶體容量優先,就算一臺Redis伺服器記憶體容量為256G,也不能將所有的記憶體用作Redis儲存,一般來說,單臺Redis最大使用記憶體不應該超過20G。
以電商網站為例,一般都是一次上傳,無數次瀏覽,也就是所謂的“多讀少寫”
對於這種場景,我們可以使用如下這種結構:
主從複製,讀寫分離!80%的情況都是在進行讀操作,減緩伺服器的壓力,架構中經常使用,一主二從!
13.2 配置
按照這個連結配置完之後,在主機中會查到有兩個從機
13.3 分析
主機只能寫入,從機只能讀取
測試1:主機斷開連線,從機依舊可以獲取到主機寫的資訊,主機重新連線,從機依舊可以獲取到主機寫的資訊。
測試2:如果是用命令列指定主機,假設斷開從機之後,主機設定資料,從機重新啟動,將無法獲取到資料,因為從機一旦關機,就會斷開與主機的關係,但使用配置檔案則可以保持主機與從機一直關聯,就算是從機關機,等開機以後,也可以獲取到關機期間主機設定的資料。
13.4 複製原理
Slave啟動成功連線到master之後會發送一個sync命令
Master接到命令後,啟動後臺的存檔程序,同時收集所有接收到的用於修改資料集命令,在後臺程序執行完畢之後,master將傳送整個資料檔案到slave,並完成一次完全同步。
全量複製: 而slave服務在接受到資料庫檔案資料後,將其存檔並載入到記憶體中。
增量複製: Master繼續將新收集到的修改命令一次傳給slave,完成同步
但是隻要是重新連線master,一次完全同步(全量複製)將被自動執行!資料就一定會在從機中看到。
13.5 級聯複製
上一個M連結下一個 S!
此時79設定的值,不管是80還是81依舊可以獲取
13.6 宕機後手動配置主機
如果主機斷開連線,可以使用slaveof no one
,使自己變成主機!其它的節點就可以手動連線到這個最新的主機點,如果這個時候以前的主機修復了,那之前的配置也無效了。