Redis集群的三種模式——主從復制、哨兵模式、Cluster


一、主從復制模式

主數據庫可進行讀寫,當寫操作導致數據變化時會自動將數據同步到從數據庫;
從數據庫一般是只讀的,並接受主數據庫同步過來的數據

1、工作原理

在這里插入圖片描述
(1)Slave從節點服務啟動並連接到Master之后,它將主動發送一個SYNC命令
(2)Master服務主節點收到同步命令后,開始執行BGSAVE命令生成快照文件(RDB文件),並使用緩沖區記錄此后執行的所有寫命令
(3)Master服務主節點BGSAVE執行完后,向所有Slave從節點服務發送快照文件,並在發送期間繼續記錄被執行的寫命令
(4)Slave從節點服務收到快照文件后丟棄所有舊數據,載入收到的快照
(5)Master服務主節點快照發送完畢后開始想Slave服務從節點發送緩沖區的寫命令
(6)Slave服務從節點完成對快照的載入,開始后接收命令請求,並執行來自Master服務主節點緩沖區的寫命令
(7)Master服務主節點每執行一個寫命令就會向Slave服務從節點發送相同的寫命令,Slave服務從節點接收並執行收到的寫命令

主從剛剛連接的時候,進行全量同步,全量同步結束后,進行增量同步。
如果Master和Slave之間的鏈接出現斷連現象,Slave可以自動重連Master,但是在連接成功之后,一次完全同步將被自動執行。但在2.8版本之后,斷開重連。回見斷開期間的命令傳給Slave,進行增量同步。

當主服務器宕機后,需要手動把一台從服務器切換為主服務器。
這個需要人工干預,會趙成一段時間服務不可用。

2、特點

(1)讀寫分離,分擔master的讀寫壓力
(2)每台redis服務器存儲的數據是相同的,浪費內存
(3)方便容災恢復
(4)不具備自動容錯和恢復功能,需人工介入
(5)較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜

二、哨兵模式

在這里插入圖片描述

1、工作原理

(1)哨兵是一個獨立的進程,會獨立運行
(2)哨兵通過發送命令,讓redis服務器返回監控其運行狀態,包括主服務器和從服務器
(3)當哨兵檢測到Master宕機,會自動將Slave切換成Master,然后通過發布訂閱模式通知其他從服務器,修改配置文件,讓他們切換主機
故障切換
假設Master宕機,哨兵1先檢測到這個結果,系統不會馬上進行failover【故障轉移】過程,僅僅是哨兵1主觀的認為服務器不可用,這個現象稱為主觀下線。當后面的哨兵也檢測到主服務器不可用,並且數量達到一定值時,那么哨兵之間就會進行一次投票,投票的結果由一個哨兵發起,進行failover操作。切換成功后,會通過發布訂閱模式,讓各個哨兵把自己監控的從服務器實現切換主機,這個過程稱為客觀下線。

2、特點

主從可以自動切換,具備自動容錯和恢復功能

三、Cluster集群模式

在這里插入圖片描述
每一個藍色的圈都代表着一個redis的服務器節點。它們任何兩個節點之間都是相互連通的。客戶端可以與任何一個節點相連接,然后就可以訪問集群中的任何一個節點。對其進行存取和其他操作

Cluster集群模式采用的是分片技術

1、工作原理

Redis集群引入了哈希槽,一共有16384個哈希槽,集群每個節點負責一部分槽每個key通過CRC16檢驗后對16384取模,通過這個值,找到對應的插槽所對應的節點,然后直接自動跳轉到這個對應的節點上進行存取操作。
當要增加新的節點到集群里,就把原來的節點所擁有的槽分一部分給新的節點即可,當移除一個節點是,把這個節點上的槽移給其他槽,再把沒有任何槽的這個節點移除即可(實現動態擴容)

集群如何判斷節點是否掛掉了
在這里插入圖片描述
集群中的每個節點至少一個備用的redis服務。這個備用的redis稱為從節點(slave)
(1)每一個節點都存有這個集群所有主節點以及從節點的信息
(2)它們之間通過互相的ping-pong判斷是否節點可以連接上
(3)如果有一半以上的節點去ping一個節點的時候沒有回應,集群就認為這個節點宕機了,然后去連接它的備用節點
(4)如果某個節點和所有從節點全部掛掉,我們集群就進入faill狀態
(5)如果有一半以上的主節點宕機,那么我們集群同樣進入fail狀態
(6)投票過程是集群中所有master參與,如果半數以上master節點與master節點通信超時,認為當前master節點掛掉.

2、特點

每個redis節點存儲不同的內容

 
 
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/cxh6863/article/details/108566181


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM