Redis講解主從復(fù)制和哨兵模式

Redis講解主從復(fù)制和哨兵模式

推薦(免費):redis

文章目錄

  • 主從復(fù)制
    • 命令
    • 配置
  • 復(fù)制原理
    • 全量復(fù)制
    • 增量復(fù)制
    • 測試
  • 嵌套主從
  • 哨兵模式
    • 配置哨兵
    • 測試

主從復(fù)制


主從復(fù)制指的是把一臺redis服務(wù)器的數(shù)據(jù)復(fù)制到其他Redis服務(wù)器上,前者稱為主節(jié)點Master,后者稱為從節(jié)點Slave,只能從Master單向復(fù)制到Slave,一般Master以寫操作為主,Slave以讀操作為主,實現(xiàn)讀寫分離。

作用

數(shù)據(jù)冗余:主從復(fù)制實現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。故障恢復(fù):當(dāng)主節(jié)點出現(xiàn)問題時,可以由從節(jié)點提供服務(wù),實現(xiàn)快速的故障恢復(fù);實際上是一種服務(wù)的冗余。負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫分離,可以由主節(jié)點提供寫服務(wù),由從節(jié)點提供讀服務(wù)(即寫Redis數(shù)據(jù)時應(yīng)用連接主節(jié)點,讀Redis數(shù)據(jù)時應(yīng)用連接從節(jié)點),分擔(dān)服務(wù)器負(fù)載;尤其是在寫少讀多的場景下,通過多個從節(jié)點分擔(dān)讀負(fù)載,可以大大提高Redis服務(wù)器的并發(fā)量。高可用基石:除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說主從復(fù)制是Redis高可用的基礎(chǔ)。

命令

命令 作用
slaveof host port 將當(dāng)前服務(wù)器轉(zhuǎn)變?yōu)橹付ǚ?wù)器的從屬服務(wù)器。如果已是slave則停止對舊主服務(wù)器的同步,丟棄舊數(shù)據(jù)集,轉(zhuǎn)而開始對新主服務(wù)器進(jìn)行同步。SLAVEOF NO ONE將使得這個從屬服務(wù)器關(guān)閉復(fù)制功能,并從從屬服務(wù)器轉(zhuǎn)變回主服務(wù)器,原來同步所得的數(shù)據(jù)集不會被丟棄。
info [section] INFO命令以一種易于理解和閱讀的格式,返回關(guān)于Redis服務(wù)器的各種信息和統(tǒng)計數(shù)值。通過給定可選的參數(shù)section,可以讓命令只返回某一部分的信息:

配置

以單機(jī)多服務(wù)為例(正常是多機(jī)多服務(wù),然我只有一臺服務(wù)器)

首先每個redis客戶端都默認(rèn)是主機(jī),可以通過info replication命令查看。
Redis講解主從復(fù)制和哨兵模式

那么我們現(xiàn)在要同時開三個客戶端,模擬一主兩從,所以要修改配置:

  1. 修改端口號
  2. 修改pid名字
  3. 修改log名字
  4. 修改rdb名字
  5. 設(shè)置主機(jī)連接(可不選,用命令行)

先拷貝兩份配置文件作為從機(jī)配置,主機(jī)可使用默認(rèn)。
Redis講解主從復(fù)制和哨兵模式
以redis80.conf為例依次修改上述五點配置,81只改前四點。
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
然后啟動他們(79、80、81)
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
設(shè)置主從:

  1. 80是在配置文件設(shè)置(永久式)好的,直接查看:
    Redis講解主從復(fù)制和哨兵模式
  2. 81沒有配置,可以手動命令行設(shè)置
    Redis講解主從復(fù)制和哨兵模式

此時查看79(master):
Redis講解主從復(fù)制和哨兵模式

復(fù)制原理


全量復(fù)制

從機(jī)每次連接主機(jī)時會全量復(fù)制,把主機(jī)的全部數(shù)據(jù)復(fù)制到從機(jī)。

增量復(fù)制

從機(jī)連上主機(jī)后,對于主機(jī)后面更新的數(shù)據(jù),會只針對這部分?jǐn)?shù)據(jù)同步更新給從機(jī)。

測試

  1. 從機(jī)默認(rèn)只讀,會增量復(fù)制同步主機(jī)的數(shù)據(jù):
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
  2. 主機(jī)宕機(jī)情況:
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
    3.從機(jī)宕機(jī)情況:
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式
    Redis講解主從復(fù)制和哨兵模式

嵌套主從


如圖79是80的主機(jī),而80又是81的主機(jī),這種嵌套主從關(guān)系。
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式

Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式

哨兵模式


上面的80上位和嵌套主從都是我們手動命令行輸入的,其目的就是避免主機(jī)宕機(jī)后寫操作的空窗期,這些都是需要人工干預(yù)。
哨兵Sentinel會作為一個獨立的進(jìn)程獨立運(yùn)行,其原理是哨兵通過發(fā)送命令,等待Redis服務(wù)器響應(yīng),從而監(jiān)控運(yùn)行的多個Redis服務(wù)器。
如果哨兵檢測到主機(jī)下線,則會選一個從機(jī)「上位」(自動故障遷移)成為新的主機(jī)。如果原主機(jī)上線,原主機(jī)將變成新主機(jī)的從機(jī)。其原理是通過發(fā)布訂閱模式通知其他服務(wù)器,修改配置文件,從而切換主機(jī)。
Redis講解主從復(fù)制和哨兵模式
如果哨兵宕機(jī)怎么辦?可以使用多哨兵模式來互相監(jiān)控。
Redis講解主從復(fù)制和哨兵模式
圖片摘自https://www.jianshu.com/p/06ab9daf921d,侵刪

  • 主觀下線(Subjectively Down, 簡稱 SDOWN)指的是單個哨兵實例對服務(wù)器做出的下線判斷。
  • 客觀下線(Objectively Down, 簡稱 ODOWN)指的是多個哨兵實例在對同一個服務(wù)器做出主觀下線判斷, 并且通過 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服務(wù)器下線判斷。

當(dāng)主機(jī)客觀下線后,哨兵會投票出新的主機(jī)(具體算法略 ),進(jìn)行自動故障遷移(failover),通過發(fā)布訂閱通知其他服務(wù)器切換主機(jī)。

配置哨兵

首先在安裝目錄下有一個詳細(xì)注解的哨兵配置:
Redis講解主從復(fù)制和哨兵模式
新建sentinel.conf來監(jiān)視6379,其余默認(rèn)即可:
Redis講解主從復(fù)制和哨兵模式
啟動哨兵:
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式

測試

Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
Redis講解主從復(fù)制和哨兵模式
多哨兵模式,配置不同端口的配置文件來開啟多個哨兵客戶端,然后照葫蘆畫瓢即可(偷懶 )

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊11 分享