redis主從設置


redis主從設置


redis主從複製

Redis讀取寫入的速度都特別快,但是也會產生讀壓力特別大的場景。

Redis支持主從複製,主從結構可以採用一主多從或者級聯結構。為數據提供多個副本,實現高可用.

Redis可以根據是否是全量分為全量同步和增量同步。


全量同步和增量同步

redis主從設置

全量同步

Redis全量複製一般發生在Slave初始化階段:

  • 從服務器連接主服務器,發送SYNC命令;
  • 主服務器接收到SYNC命名後,開始執行BGSAVE命令生成RDB文件並使用緩衝區記錄此後執行的所有寫命令;
  • 主服務器BGSAVE執行完後,向所有從服務器發送快照文件,並在發送期間繼續記錄被執行的寫命令;
  • 從服務器收到快照文件後丟棄所有舊數據,載入收到的快照;
  • 主服務器快照發送完畢後開始向從服務器發送緩衝區中的寫命令;
  • 從服務器完成對快照的載入,開始接收命令請求,並執行來自主服務器緩衝區的寫命令;

完成上面幾個步驟後就完成了從服務器數據初始化的所有操作,從服務器此時可以接收來自用戶的讀請求。


增量同步

Redis增量複製是指Slave初始化後開始正常工作時主服務器發生的寫操作同步到從服務器的過程。
增量複製的過程主要是主服務器每執行一個寫命令就會向從服務器發送相同的寫命令,從服務器接收並執行收到的寫命令。


同步策略

主從剛剛連接的時候,進行全量同步;

全同步結束後,進行增量同步。

slave 在任何時候都可以發起全量同步。


Redis大概主從同步是怎麼實現的?

全量同步

master服務器會開啟一個後臺進程用於將redis中的數據生成一個rdb文件,同時,服務器會緩存所有接收到的來自客戶端的寫命令(包含增、刪、改)當後臺保存進程處理完畢後,會將該rdb文件傳遞給slave服務器。slave服務器會將rdb文件保存在磁盤並通過讀取該文件將數據加載到內存,在此之後master服務器會將在此期間緩存的命令通過redis傳輸協議發送給slave服務器,然後slave服務器將這些命令依次作用於自己本地的數據集上最終達到數據的一致性。

部分同步

redis 2.8版本以前

不支持部分同步,當主從服務器之間的連接斷掉之後,master服務器和slave服務器之間都是進行全量數據同步。

redis 2.8開始

支持部分同步,當主從服務器之間的連接斷掉之後,也不需要進行全量同步,這個版本開始融入了部分同步的概念。部分同步的實現依賴於在master服務器內存中給每個slave服務器維護了一份同步日誌和同步標識,每個slave服務器在跟master服務器進行同步時都會攜帶自己的同步標識和上次同步的最後位置。當主從連接斷掉之後,slave服務器隔斷時間(默認1s)主動嘗試和master服務器進行連接,如果從服務器攜帶的偏移量標識還在master服務器上的同步備份日誌中,那麼就從slave發送的偏移量開始繼續上次的同步操作,如果slave發送的偏移量已經不再master的同步備份日誌中(可能由於主從之間斷掉的時間比較長或者在斷掉的短暫時間內master服務器接收到大量的寫操作),則必須進行一次全量更新。在部分同步過程中,master會將本地記錄的同步備份日誌中記錄的指令依次發送給slave服務器從而達到數據一致。


無磁盤複製

全量同步需要在磁盤上創建一個RDB文件,如果使用比較低速的磁盤,這種操作會給主服務器帶來較大的壓力。

Redis從2.8.18版本開始嘗試支持無磁盤的複製。使用這種設置時,子進程直接將RDB通過網絡發送給從服務器,不使用磁盤作為中間存儲。


配置

從服務器配置

slaveof [ip] [port]

其他參數

從節點日誌/rdb文件名/log文件名/複製內存緩衝區的優化參數等 。

無磁盤複製參數

啟動無磁盤複製
repl-diskless-sync
傳輸開始的延遲時間
repl-diskless-sync-delay

從服務器只讀

從Redis 2.6開始,從服務器支持只讀模式,並且是默認模式。只讀的從服務器會拒絕所有寫命令,所以對從服務器不會有誤寫操作。但這不表示可以把從服務器實例暴露在危險的網絡環境下,像DEBUG或者CONFIG這樣的管理命令還是可以運行的。不過你可以通過使用rename-command命令來為這些命令改名來增加安全性。

由Redis.conf文件中的slave-read-only 參數控制的,可以在運行中通過CONFIG SET來啟用或者禁用。

安全配置在前面文章我們已經寫過了。


主從設置

這裡的環境是接前面redis安裝和配置的文章,有疑惑可以看前文。這裡配置一主兩從。

當前目錄

<code>cd /usr/local/redis/<code>

主節點配置文件

master-6400.conf,端口6400


redis主從設置

從節點配置文件

slave-6401.conf 端口6401
slave-6402.conf 端口6402


redis主從設置


redis主從設置


啟動reids服務


redis主從設置

啟動狀態


redis主從設置

測試

主節點master

redis主從設置


從節點 6401

redis主從設置


從節點 6402

redis主從設置


注意事項

  • 如果多個Slave斷線重啟的時候,就會發送sync請求和主機全量同步,可能會導致Master IO劇增宕機。
  • 主節點是可讀可寫的,而從節點是隻讀的,不能修改數據。
  • 主節點應該開啟持久化,防止主節點故障,導致重啟後整個主從節點數據丟失。
  • 如果數據比較重要,並且使用主從複製時關閉了主服務器持久化功能,應該禁止實例自動重啟。


分享到:


相關文章: