天天看點

redis學習4:redis主從複制

目錄

概述 

修改配置檔案

設定主從關系

測試主從關系

實作原理

1)全量同步

2)增量同步

哨兵機制

缺點

概述 

前面介紹Redis,我們都在一台伺服器上進行操作的,也就是說讀和寫以及備份操作都是在一台Redis伺服器上進行的,那麼随着項目通路量的增加,對Redis伺服器的操作也越加頻繁,雖然Redis讀寫速度都很快,但是一定程度上也會造成一定的延時,那麼為了解決通路量大的問題,通常會采取的一種方式是主從架構Master/Slave,Master 以寫為主,Slave 以讀為主,Master 主節點更新後根據配置,自動同步到從機Slave 節點。

  接下來我們就來介紹如何進行主從架構的搭建。

  ps:這裡我是在一台機器上模拟多個Redis伺服器,與實際生産環境中相比,基本配置都是一樣,僅僅是IP位址和端口号變化。

  

redis學習4:redis主從複制

修改配置檔案

  首先将redis.conf 配置檔案複制三份,通過修改端口分别模拟三台Redis伺服器。

  

redis學習4:redis主從複制

  然後我們分别對這三個redis.conf 檔案進行修改。

  ①、修改 daemonize yes

  

redis學習4:redis主從複制

  表示指定Redis以守護程序的方式啟動(背景啟動)

  ②、配置PID檔案路徑 pidfile

  

redis學習4:redis主從複制

  表示當redis作為守護程序運作的時候,它會把 pid 預設寫到 /var/redis/run/redis_6379.pid 檔案裡面

  ③、配置端口 port

  

redis學習4:redis主從複制

  ④、配置log 檔案名字

  

redis學習4:redis主從複制

  ⑤、配置rdb檔案名

  

redis學習4:redis主從複制

  依次将 6380redis.conf 、6381redis.conf 配置一次,則配置完畢。

  接下來我們分别啟動這三個服務。

  

redis學習4:redis主從複制

  通過指令檢視Redis是否啟動:

  

redis學習4:redis主從複制

  接下來通過如下指令分别進入到這三個Redis用戶端:

redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381
           

設定主從關系

  ①、通過  info replication 指令檢視節點角色

  

redis學習4:redis主從複制
redis學習4:redis主從複制

  我們發現這三個節點都是扮演的 Master 角色。那麼如何将 6380 和 6381 節點變為 Slave 角色呢?

  ②、選擇6380端口和6381端口,執行指令:SLAVEOF 127.0.0.1 6379

  

redis學習4:redis主從複制
redis學習4:redis主從複制

  我們再看 6379 節點資訊:

  

redis學習4:redis主從複制

  這裡通過指令來設定主從關系,一旦服務重新開機,那麼角色關系将不複存在。想要永久的儲存這種關系,可以通過配置redis.conf 檔案來配置。

slaveof 127.0.0.1 6379
           

測試主從關系

  ①、增量複制

  主節點執行 set k1 v1 指令,從節點 get k1 能擷取嗎?

  

redis學習4:redis主從複制

  

redis學習4:redis主從複制

  

redis學習4:redis主從複制

  由上圖可知是可以擷取的。

  ②、全量複制

  通過執行 SLAVEOF 127.0.0.1 6379,如果主節點 6379 以前還存在一些 key,那麼執行指令之後,從節點會将以前的資訊也都複制過來嗎?

  答案也是肯定的,這裡我就不貼測試結果了。

  ③、主從讀寫分離

  主節點能夠執行寫指令,從節點能夠執行寫指令嗎?

  

redis學習4:redis主從複制

  這裡的原因是在配置檔案 6381redis.conf 中對于 slave-read-only 的配置

  

redis學習4:redis主從複制

  如果我們将其修改為 no 之後,執行寫指令是可以的。

  

redis學習4:redis主從複制

  但是從節點寫指令的資料從節點或者主節點都不能擷取的。

  ④、主節點當機

  主節點 Maste 挂掉,兩個從節點角色會發生變化嗎?

  

redis學習4:redis主從複制

  

redis學習4:redis主從複制

  上圖可知主節點 Master 挂掉之後,從節點角色還是不會改變的。

  ⑤、主節點當機後恢複

  主節點Master挂掉之後,馬上啟動主機Maste,主節點扮演的角色還是 Master 嗎?

  

redis學習4:redis主從複制

  也就是說主節點挂掉之後重新開機,又恢複了主節點的角色。

實作原理

Redis的主從同步,分為全量同步和增量同步。隻有從機第一次連接配接上主機是全量同步,斷線重連有可能觸發全量同步也有可能是增量同步(master 判斷 runid 是否一緻),除此之外的情況都是增量同步。

redis學習4:redis主從複制

1)全量同步

Redis 的全量同步過程主要分三個階段:

(1)同步快照階段:Master 建立并發送快照給 Slave,Slave 載入并解析快照。Master 同時将此階段所産生的新的寫指令存儲到緩沖區。

(2)同步寫緩沖階段:Master 向 Slave 同步存儲在緩沖區的寫操作指令。

(3)同步增量階段:Master 向 Slave 同步寫操作指令。

redis學習4:redis主從複制

2)增量同步

(1)Redis 增量同步主要指 Slave 完成初始化後開始正常工作時,Master 發生的寫操作同步到 Slave 的過程。

(2)通常情況下,Master 每執行一個寫指令就會向 Slave 發送相同的寫指令,然後 Slave接收并執行。

哨兵機制

通過前面的配置,主節點Master 隻有一個,一旦主節點挂掉之後,從節點沒法擔起主節點的任務,那麼整個系統也無法運作。如果主節點挂掉之後,從節點能夠自動變成主節點,那麼問題就解決了,于是哨兵模式誕生了。

  哨兵模式就是不時地監控redis是否按照預期良好地運作(至少是保證主節點是存在的),若一台主機出現問題時,哨兵會自動将該主機下的某一個從機設定為新的主機,并讓其他從機和新主機建立主從關系。

  

redis學習4:redis主從複制

  使用步驟:

       1、在Master對應redis.conf同目錄下建立sentinel.conf檔案,名字絕對不能錯;

       2、配置哨兵,在sentinel.conf檔案中填入内容:

             sentinel monitor 被監控資料庫名字(自己起名字) ip port 1

             說明:上面最後一個數字1,表示主機挂掉後slave投票看讓誰接替成為主機,得票數多少後成為主機。

      3、啟動哨兵模式:

            指令鍵入:redis-sentinel  /myredis/sentinel.conf

           注:上述sentinel.conf路徑按各自實際情況配置

缺點

 主從複制雖然解決了主節點的單點故障問題,但是由于所有的寫操作都是在 Master 節點上操作,然後同步到 Slave 節點,那麼同步就會有一定的延時,當系統很繁忙的時候,延時問題就會更加嚴重,而且會随着從節點slave的增多而愈加嚴重。

主要參考文章https://www.cnblogs.com/ysocean/p/9143118.html 以及 https://zhuanlan.zhihu.com/p/44376199

繼續閱讀