1. 程式人生 > >【docker】效能優化-redis之【主從複製】,第一次準備

【docker】效能優化-redis之【主從複製】,第一次準備

主從複製說明

 面臨問題

在實際的場景當中單一節點的redis容易面臨風險。

比如:

1、機器故障。我們部署到一臺 Redis 伺服器,當發生機器故障時,需要遷移到另外一臺伺服器並且要保證資料是同步的。而資料是最重要的,如果你不在乎,基本上也就不會使用 Redis 了。

2、容量瓶頸。當我們有需求需要擴容 Redis 記憶體時,從 16G 的記憶體升到 64G,單機肯定是滿足不了。當然,你可以重新買個 128G 的新機器。

要實現分散式資料庫的更大的儲存容量和承受高併發訪問量,我們會將原來集中式資料庫的資料分別儲存到其他多個網路節點上。

Redis 為了解決這個單一節點的問題,也會把資料複製多個副本部署到其他節點上進行復制,實現 Redis的高可用,實現對資料的冗餘備份,從而保證資料和服務的高可用。

什麼是主從複製 ?

主從複製,是指將一臺Redis伺服器的資料,複製到其他的Redis伺服器。前者稱為主節點(master),後者稱為從節點(slave),資料的複製是單向的,只能由主節點到從節點。

 

預設情況下,每臺Redis伺服器都是主節點;且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點。

主從複製的作用 ?

主從複製的作用主要包括:

1、資料冗餘:主從複製實現了資料的熱備份,是持久化之外的一種資料冗餘方式。

2、故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗餘。

3、負載均衡:在主從複製的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis資料時應用連線主節點,讀Redis資料時應用連線從節點),分擔伺服器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis伺服器的併發量。

  1. 讀寫分離:可以用於實現讀寫分離,主庫寫、從庫讀,讀寫分離不僅可以提高伺服器的負載能力,同時可根據需求的變化,改變從庫的數量;

5、高可用基石:除了上述作用以外,主從複製還是哨兵和叢集能夠實施的基礎,因此說主從複製是Redis高可用的基礎。

 

主從複製啟用

從節點開啟主從複製,有3種方式:

(1)配置檔案

在從伺服器的配置檔案中加入:slaveof <masterip> <masterport>

(2)啟動命令

redis-server啟動命令後加入 --slaveof <masterip> <masterport>

(3)客戶端命令

Redis伺服器啟動後,直接通過客戶端執行命令:slaveof <masterip> <masterport>,則該Redis例項成為從節點。

通過  info replication 命令可以看到複製的一些資訊

Log 檔案位置

vi /var/log/redis/redis.log

保護模式

https://www.jianshu.com/p/b36923e65d01

 

主從複製原理

主從複製過程大體可以分為3個階段:連線建立階段(即準備階段)、資料同步階段、命令傳播階段。

在從節點執行 slaveof 命令後,複製過程便開始運作,下面圖示大概可以看到,

從圖中可以看出複製過程大致分為6個過程

儲存主節點(master)資訊。

執行 slaveof 後 Redis 會列印如下日誌:

  1. 從節點(slave)內部通過每秒執行的定時任務維護複製相關邏輯,當定時任務發現存在新的主節點後,會嘗試與該節點建立網路連線。
  2. 從節點與主節點建立網路連線

    從節點會建立一個 socket 套接字,從節點建立了一個埠為51234的套接字,專門用於接受主節點發送的複製命令。從節點連線成功後列印如下日誌:

  3. 如果從節點無法建立連線,定時任務會無限重試直到連線成功或者執行 slaveof no one 取消複製

    關於連線失敗,可以在從節點執行 info replication 檢視 master_link_down_since_seconds 指標,它會記錄與主節點連線失敗的系統時間。從節點連線主節點失敗時也會每秒列印如下日誌,方便發現問題:

    # Error condition on socket for SYNC: {socket_error_reason}

  4. 許可權驗證。如果主節點設定了 requirepass 引數,則需要密碼驗證,從節點必須配置 masterauth 引數保證與主節點相同的密碼才能通過驗證;如果驗證失敗複製將終止,從節點重新發起復制流程。

  5. 同步資料集。主從複製連線正常通訊後,對於首次建立複製的場景,主節點會把持有的資料全部發送給從節點,這部分操作是耗時最長的步驟。
  6. 命令持續複製。當主節點把當前的資料同步給從節點後,便完成了複製的建立流程。接下來主節點會持續地把寫命令傳送給從節點,保證主從資料一致性。

  7. https://gitbook.cn/gitchat/geekbook/5af939544b544674331bce2e/topic/5afa57ae15da5a21f3419db0

    https://juejin.im/entry/5b39c05df265da596e4cf399