一起來聊聊redis中的主從復制

本篇文章帶大家聊聊redis中的主從復制,介紹一下具體使用,注意事項以及哨兵模式,希望對大家有所幫助!

一起來聊聊redis中的主從復制

一:概述

redis主從復制說目前使用最多的一種讀寫分離手段,由一個主Master附帶一個或多個從Slave,

主Master負責寫操作,主要解決的問題是分擔redis讀的壓力,提高數據讀寫效率。【相關推薦:redis

一起來聊聊redis中的主從復制

二:具體使用

1.從庫指定連接主庫:

host為連接地址,port為連接地址的端口號,當然也可以自己復制多個redis.conf文件,通過修改其端口號線程號等信息來啟動多個不同端口的redis服務

SLAVEOF [host] [port]

2.主庫負責寫(讀也可以),從庫只能讀:

主庫中寫的數據能在從庫中獲取:6381為主庫,6380為從庫

一起來聊聊redis中的主從復制

3.使從庫重新成為主庫:

SLAVEOF no one

三:注意事項:

(1)一般情況下,主庫掉線后,從庫會等待主庫重新連線,依舊保持從庫狀態

(2)從庫掉線后,需重新連上主庫,才能作為從庫,否則則為主庫

四:哨兵模式

概述:為了當主庫服務掉線后,使其他從庫能重新選取一個主庫繼續服務運轉作用:當主庫服務掉線之后,哨兵會監聽到主庫掉線,并進行投票操作使其中一個從庫成為主庫替代原主庫運行。

1、在redis服務啟動的目錄下創建一個 sentinel.conf文件,vim編輯此配置文件

`?sentinel?monitor?host6379?127.0.0.1?6381?1??`

2、通過 redis-sentinel 【文件目錄】/sentinel.conf啟動哨兵

注意:哨兵模式下,當原主庫重新連接后,哨兵會對其操作加入到新的主庫下,也就是作為新主庫的一個從庫存在。

五:原理:

?連接建立-->數據同步-->命令持續傳播 ? ?在從節點執行?slaveof?命令后,復制過程便開始運作,下面圖示大概可以看到,

從圖中可以看出復制過程大致分為6個過程

一起來聊聊redis中的主從復制

主從配置之后的日志記錄也可以看出這個流程

1)保存主節點(master)信息。
執行 slaveof 后 Redis 會打印如下日志:

一起來聊聊redis中的主從復制

2)從節點(slave)內部通過每秒運行的定時任務維護復制相關邏輯,當定時任務發現存在新的主節點后,會嘗試與該節點建立網絡連接

一起來聊聊redis中的主從復制

從節點與主節點建立網絡連接

從節點會建立一個 socket 套接字,從節點建立了一個端口為51234的套接字,專門用于接受主節點發送的復制命令。從節點連接成功后打印如下日志:

一起來聊聊redis中的主從復制

如果從節點無法建立連接,定時任務會無限重試直到連接成功或者執行 slaveof no one 取消復制 關于連接失敗,可以在從節點執行 info replication 查看 master_link_down_since_seconds 指標,它會記錄與主節點連接失敗的系統時間。從節點連接主節點失敗時也會每秒打印如下日志,方便發現問題:

#?Error?condition?on?socket?for?SYNC:?{socket_error_reason}

3)發送 ping 命令。
連接建立成功后從節點發送 ping 請求進行首次通信,ping 請求主要目的如下:
·檢測主從之間網絡套接字是否可用。
·檢測主節點當前是否可接受處理命令。
如果發送 ping 命令后,從節點沒有收到主節點的 pong 回復或者超時,比如網絡超時或者主節點正在阻塞無法響應命令,從節點會斷開復制連接,下次定時任務會發起重連。

一起來聊聊redis中的主從復制

一起來聊聊redis中的主從復制

從節點發送的 ping 命令成功返回,Redis 打印如下日志,并繼續后續復制流程:

一起來聊聊redis中的主從復制

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

5)同步數據集。主從復制連接正常通信后,對于首次建立復制的場景,主節點會把持有的數據全部發送給從節點,這部分操作是耗時最長的步驟。

6)命令持續復制。當主節點把當前的數據同步給從節點后,便完成了復制的建立流程。接下來主節點會持續地把寫命令發送給從節點,保證主從數據一致性。

更多編程相關知識,請訪問:redis!!

以上就是一起來聊聊

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享