日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

干货!Redis集群工作原理解析

發布時間:2024/8/23 数据库 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 干货!Redis集群工作原理解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 |?張小盼

頭圖?|?下載于東方IC

出品 | CSDN云計算(ID:CSDNcloud)

Redis 緩存因其訪問性能高、可靠性更高,作為緩存工具在各大互聯網公司中廣泛使用。今天我們就來看看Redis Cluster 的實現原理。

?

集群建立

Redis集群是由多個Redis節點組成,每個Redis節點都是相互獨立的,為了組建一個redis集群,我們需要使用CLUSTER MEET命令把他們連接起來。

節點A通過接收客戶端發來的LUSTER MEET命令將另一個節點B加入到集群中,接收到命令的節點A將與節點B進行握手來來確認彼此的存在。下圖顯示了它們握手的過程。

握手完成后,節點A會將節點B的信息通過Gossip協議傳播給集群中的其他節點,讓其他節點與節點B完成握手,之后節點B就會被集群中的所有節點認識了。

?

槽指派

集群建立之后,那么接下來要解決的就是數據分布問題了。Redis緩存信息是使用 Key-Value 的形式來存儲數據,Redis集群又將整個數據分布16384個槽中。在存儲信息的時候,集群會對每個要存儲的Key計算CRC16 校驗值并對 16384 取模(slot = CRC16(key)%16384)。由于集群中的槽會被指派到不同的節點,從而實現了數據的分布式存儲。

每個節點都保存著一個clusterNode結構,該結構里有一個slots屬性記錄了節點負責處理哪些槽。

1struct?clusterNode{ 2?????//......? 3?????unsigned?char?slots[16384/8];? 4?????//......? 5}

這個slots屬性是個二進制位的數組,數組長度為16384/8=2048個字節,共包含16384個二進制位。每個二進制位代表一個槽,節點會根據二進制位上的值進行判斷該節點是否負責處理這個槽,1代表處理,0代表不處理。

表格中代表的是該節點負責集群中的槽1、3、5、7,這種處理方式可以很快的得出節點是否負責處理某個槽的數據。

?

指令執行

在集群中的16384個槽都進行了指派之后,集群就進入了上線狀態,這時客戶端就可以向集群發送數據命令了。

當客戶端向節點發送GET/SET指令時,收到指令的節點會先對指令操作的key進行計算,得出該key值應該存儲在哪個槽中,并檢查這個槽是否指派給了自己。

?

故障轉移與恢復

Redis集群中的節點分為主節點(master)和從節點(slave),主節點主要負責處理槽,從節點則用于復制某個主節點數據,并在被復制的主節點下線時,代替主節點處理后續的命令請求。

針對節點下線有兩種狀態:

1.主觀下線:當節點A想節點B發送了一條PING消息時,節點B沒有在規定的時間內(設置的cluster-node-timeout參數)返回PONG消息,那么節點A會將節點B標記為主觀下線狀態。

這里的主觀下線只是節點A主觀的認為節點B下線了,有可能是因為節點A和節點B之間的網絡斷了,但是其他節點依然可以和節點B通訊,所以主觀下線并不一定是節點B真的就下線了。

2.客觀下線:由于節點A與集群內的其他節點仍然保持通訊,因此節點B的下線消息也通過Gossip協議傳遍了集群內的其他節點。

當集群內半數以上的節點都認為節點B主觀下線了,那么節點B就會被認為客觀下線了,同時將節點B標記為客觀下線的節點會向集群中發送一條FAIL消息,所有收到這條消息的節點會立即將節點B標記為客觀下線。

如果一個節點被認為客觀下線了,那么就需要從它的從節點當中選出一個節點來代替它成為主節點。選舉過程如下:

a.當從節點發現自己正在復制的主節點被標記為客觀下線時,從節點會向集群中發送一條CLUSTERMSG_TYPE_FAILOVER_AUTH_REQUEST消息,要求所有收到這條消息的具有投票權的主節點向這個從節點投票

b.如果一個主節點具有投票權,并且未投票給其他從節點,那么這個主節點會向要求投票的從節點返回一條CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK消息,表示這個主節點支持該從節點成為新的主節點

c.每個從節點都會接收返回的CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK消息,并會進行統計自己得到了多少主節點的支持

d.每個具有投票權的主節點只能投一次票,當一個從節點獲得了一半以上的主節點的支持票時,那么這個節點就會成為新的主節點,

e.如果沒有任何一個從節點獲取大于半數的投票,那么將進行新的選舉,直到選出新的主節點為止。

f.新的主節點產生后,它會撤銷所有對已下線的主節點的槽指派,并將這些槽指派給自己。

g.新的主節點會向集群中廣播一條PONG消息,讓集群中的其他節點直到這個從節點已經成為了新的主節點,并且接管了原先主節點的所有槽。

h.新的主節點負責接收和自己處理的槽相關的指令,至此故障轉移結束。

?

結束語

本文通過對集群建立、槽指派、指令執行、故障轉移與恢復的實現原理進行分析,一步一步的帶大家認識Redis集群。希望對大家認識和了解Redis集群有所幫助。

作者簡介:張小盼 中國農業銀行研發中心,全棧運維研發工程師。

直播間地址:

https://live.csdn.net/room/csdnnews/B3423dYF

更多精彩推薦 ?三個月前被 K8S 棄用,Docker 火了!獲 2300 萬美元融資?一招上手!這樣設計扛住億級流量活動系統?Kubernetes 穩定性保障手冊(極簡版)點分享點收藏點點贊點在看 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的干货!Redis集群工作原理解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。