redis cluster 的通信機制

在這里插入圖片描述

Redis Cluster 的通信機制是其分布式架構的核心,基于 Gossip 協議Cluster Bus 實現節點間狀態同步與數據協調。以下是其通信機制的核心要點:

  • 二進制協議:數據以字節流形式編碼(如Protobuf、Thrift、MQTT、Gossip)。
  • 文本協議:數據以人類可讀的字符形式表示(如JSON、XML、HTTP/1.1)。

集群元數據的維護有兩種方式:集中式、Gossip 協議

  • 集中式:將集群元數據集中存儲在一個節點上。
    • 優點
      元數據的讀取和更新時效性好,元數據的變更都能立即更新到集中式存儲節點中,其它節點讀取的時候就可以感知到。
    • 缺點
      所有的元數據的更新壓力全部集中在一個地方,可能會導致元數據的存儲有壓力。
  • Gossip:所有節點都持有一份元數據,不同的節點如果出現了元數據的變更,就不斷將元數據發送給其它的節點,讓其它節點也進行元數據的變更。
    • 優點
      元數據的更新比較分散,不是集中在一個節點,降低了壓力。
    • 缺點
      元數據的更新有延時,可能導致集群中的一些操作會有一些滯后。

一、通信協議與方式

  1. Gossip 協議

    • 隨機傳播:每個節點周期性地隨機選擇其他節點發送消息(如 PINGPONGMEETFAIL),傳播集群狀態信息(節點存活、槽位分配、主從角色等)。
    • 低負載擴展:節點通信頻率不隨集群規模線性增長,適合大規模集群(數千節點)。
    • 最終一致性:信息通過多次傳播逐步覆蓋所有節點,可能存在短暫延遲,但最終達成一致。
  2. Cluster Bus 端口

    • 每個節點額外開放一個通信端口(默認 服務端口 + 10000,如服務端口 6379,則 Cluster Bus 端口為 16379)。
    • 通過二進制協議傳輸高效的結構化數據(如槽位映射、節點元數據)和心跳檢測(詳見第二章:核心通信場景)。

二、核心通信場景

  1. 節點握手(Cluster Meet)

    • 新節點加入:通過 CLUSTER MEET <IP> <PORT> 命令或自動發現機制,新節點與現有節點建立連接。
    • 元數據交換:節點間交換 ID、IP、端口、角色(主/從)、負責的槽位等信息。
  2. 心跳檢測(PING/PONG)

    • 健康檢查:節點定期發送 PING,接收方回復 PONG 確認存活。
    • 故障判定:若節點在 cluster-node-timeout(默認 15 秒)內未響應,可能被標記為 FAIL
  3. 槽位分配與遷移

    • 槽位變更廣播:當槽位分配調整時(如擴容/縮容),通過 Gossip 協議通知所有節點更新槽位映射。
    • 遷移協調:遷移過程中,源節點和目標節點通過 ASKING 命令臨時處理跨節點請求。
  4. 故障轉移

    • 主節點下線:從節點通過 Gossip 感知主節點故障,觸發選舉流程(Raft 變種),新主節點廣播自身角色變更。
    • 數據同步:新主節點通過異步復制與從節點同步數據。

三、客戶端與集群通信

  1. 重定向機制

    • MOVED 響應:客戶端請求的 Key 不屬于當前節點槽位時,返回 MOVED <slot> <target_ip:port>,客戶端更新本地槽位緩存。
    • ASK 響應:槽位遷移期間,目標節點可能返回 ASK 臨時重定向,客戶端需向目標節點發送 ASKING 后重試。
  2. 智能客戶端

    • 本地緩存槽位表:客戶端首次連接任一節點獲取全局槽位映射,后續直接路由請求至正確節點。
    • 動態更新:收到 MOVEDASK 時更新緩存,避免重復重定向。

四、優化與挑戰

  1. 性能優化

    • 批量消息:合并多個 Gossip 消息減少網絡開銷。
    • CRC16 分片:通過 CRC16(key) % 16384 快速定位槽位,確保數據均勻分布。
  2. 挑戰

    • 網絡分區:Gossip 的最終一致性可能導致分區時出現腦裂,需依賴 cluster-require-full-coverage 配置權衡可用性。
    • 遷移性能:槽位遷移期間需協調數據復制與流量切換,可能影響吞吐量。

五、實際應用示例

# 節點 A(7000)與節點 B(7001)握手
CLUSTER MEET 127.0.0.1 7001# 查看集群節點信息
CLUSTER NODES
# 輸出示例:
# d4b3... 127.0.0.1:7001 master - 0 1620000000000 1 connected 0-5460
# a1c2... 127.0.0.1:7000 myself,master - 0 0 2 connected 5461-10922

總結

Redis Cluster 通過 Gossip 協議 實現去中心化通信,結合 Cluster Bus 高效傳輸元數據,保障了高可用與動態擴展能力。客戶端通過智能路由與重定向機制直接與集群交互,無需代理層,兼顧性能與靈活性。理解其通信機制是優化集群穩定性與性能的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79044.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CTF web入門之文件上傳

知識點 產生文件上傳漏洞的原因 原因: 對于上傳文件的后綴名(擴展名)沒有做較為嚴格的限制 對于上傳文件的MIMETYPE(用于描述文件的類型的一種表述方法) 沒有做檢查 權限上沒有對于上傳的文件目錄設置不可執行權限,(尤其是對于shebang類型的文件) 對于web server對于上傳…

PhotoShop學習09

1.彎曲鋼筆工具 PhotoShop提供了彎曲鋼筆工具可以直觀地創建路徑&#xff0c;只需要對分段推拉就能夠進行修改。彎曲港幣工具位于工具面板中的鋼筆工具里&#xff0c;它的快捷鍵為P。 在使用前&#xff0c;可以把填充和描邊選為空顏色&#xff0c;并打開路徑選項&#xff0c;勾…

tsconfig.json配置不生效

說明一下我遇到的問題&#xff0c;這是我的配置文件代碼的 {"compilerOptions": {"module": "none","target": "ES5","outFile": "./dist/bundle.js"} } 和我想象不同的是&#xff0c;我編譯成 js 沒…

源代碼加密之零日攻擊

# SDC沙盒&#xff1a;有效防御零日攻擊的多層防護體系 在當今復雜多變的網絡安全環境中&#xff0c;零日攻擊已成為企業面臨的重大威脅之一。零日攻擊利用尚未被公眾發現或尚未被軟件供應商修復的漏洞進行攻擊&#xff0c;具有極高的隱蔽性和破壞性。SDC沙盒作為一種先進的數…

記錄一次TDSQL網關夯住故障

環境信息&#xff1a; TDSQL-MySQL同城雙中心集群&#xff0c;集中式實例&#xff0c;一主三副本&#xff0c;每個中心兩個db副本&#xff0c;每個中心一個VIP&#xff0c;V每個IP通過硬件做負載均衡指向該中心兩個proxy&#xff0c;操作系統為麒麟v10 arm。 故障描述&#xf…

代碼隨想錄八股訓練營完結總結

&#xff01; 40天的訓練營&#xff0c;我總結了自己完整的八股文&#xff0c;后續在面試過程中可以補充 很感謝這次訓練營&#xff0c;真的高頻&#xff0c;在面試中能擊中60%以上&#xff0c;剩下的就靠平時的積累了。 感謝訓練營的小伙伴&#xff0c;很多次想偷懶&#x…

VS Code 的 .S 匯編文件里面的注釋不顯示綠色

1. 確認文件語言模式 打開 .S 文件后&#xff0c;查看 VS Code 右下角的狀態欄&#xff0c;確認當前文件的識別模式&#xff08;如 Assembly、Plain Text 等&#xff09;。如果顯示為 Plain Text 或其他非匯編模式&#xff1a; 點擊狀態欄中的語言模式&#xff08;如 Plain Te…

iphone各個機型尺寸

以下是蘋果&#xff08;Apple&#xff09;歷代 iPhone 機型 的屏幕尺寸、分辨率及其他關鍵參數匯總&#xff08;截至 2023年10月&#xff0c;數據基于官方發布信息&#xff09;&#xff1a; 一、標準屏 iPhone&#xff08;非Pro系列&#xff09; 機型屏幕尺寸&#xff08;英寸…

VSCode寫java時常用的快捷鍵

首先得先安好java插件 1、獲取返回值 這里是和idea一樣的快捷鍵的&#xff0c;都是xxxx.var 比如現在我new一個對象 就輸入 new MbDo().var // 點擊回車即可變成下面的// MbDo mbDo new MbDo()//以此類推get方法也可獲取 mbDo.getMc().var // 點擊回車即可變成下面的 // St…

相機內外參

文章目錄 相機內參相機外參 相機的內外參是相機標定過程中確定的重要參數&#xff0c;用于建立圖像像素坐標與實際世界坐標之間的關系。 相機內參 定義&#xff1a;相機內參是描述相機內部光學和幾何特性的參數&#xff0c;主要包括焦距、主點坐標、像素尺度因子以及畸變系數等…

【視頻目標分割論文集】Efficient Track Anything0000

github 摘要 視頻對象分割和追蹤任意目標領域出現了強大的工具——分割任意模型 2&#xff08;SAM 2&#xff09;。SAM 2 實現令人印象深刻的視頻對象分割性能的關鍵組成部分包括用于幀特征提取的大型多階段圖像編碼器&#xff0c;以及存儲過去幀記憶上下文以輔助當前幀分割的…

CSS學習02 動態列數表格開發,解決多組數據布局與邊框重合問題

概要 在前端開發中&#xff0c;表格常用于展示結構化數據。當數據組的字段數量不統一時&#xff08;如有的行包含 3 組數據&#xff0c;有的行包含 2 組或 1 組&#xff09;&#xff0c;傳統固定列數的表格會出現結構錯位、邊框重合等問題。本文通過 HTML/CSS 規范方法&#x…

Spark-core編程總結

1.reduce? 功能?&#xff1a;聚集RDD中的所有元素&#xff0c;先聚合分區內數據&#xff0c;再聚合分區間數據。 示例?&#xff1a;rdd.reduce(__) 將RDD中的所有整數相加。 2.collect? 功能?&#xff1a;在驅動程序中&#xff0c;以數組Array的形式返回數據集的所有元…

處理Long類型長度超長導致前端精度丟失問題

1&#xff0c;問題場景 后端返回的Long類型的數據&#xff0c;超10000000000000000&#xff0c;前端處理的時候&#xff0c;數據被截斷了。比如tchId: 11073477511443988481&#xff0c; 前端根據tchId獲取下一環節信息的時候&#xff0c;傳的tchId變成了11073477511443988400&…

ONVIF/RTSP/RTMP協議EasyCVR視頻匯聚平臺RTMP協議配置全攻略 | 直播推流實戰教程

在現代化的視頻管理和應急指揮系統中&#xff0c;RTMP協議作為一種高效的視頻流傳輸方式&#xff0c;正變得越來越重要。無論是安防監控、應急指揮&#xff0c;還是物聯網視頻融合&#xff0c;掌握RTMP協議的接入和配置方法&#xff0c;都是提升系統性能和效率的關鍵一步。 今天…

安徽京準:GPS北斗衛星時空信號安全防護裝置(授時)介紹

安徽京準&#xff1a;GPS北斗衛星時空信號安全防護裝置&#xff08;授時&#xff09;介紹 1、主要特點 ★信號加固功能&#xff1a; GPS/BDS單系統信號拒止情況下&#xff08;包含受到GPS L1欺騙干擾、GPS L1壓制干擾、BDS B1欺騙干擾、BDS B1壓制干擾&#xff09;&#xff…

探索原生JS的力量:自定義實現類似于React的useState功能

1.寫在前面 本方案特別適合希望在歷史遺留的原生JavaScript項目中實現簡單輕量級數據驅動機制的開發者。無需引入任何框架或第三方庫&#xff0c;即可按照此方法封裝出類似于React中useState的功能&#xff0c;輕松為項目添加狀態管理能力&#xff0c;既保持了項目的輕量性&am…

02.使用cline(VSCode插件)、continue(IDEA插件)、cherry-studio玩轉MCP

文章目錄 安裝環境uv&#xff08;python&#xff09;為什么不用pip&#xff1f;安裝 nvm&#xff08;nodejs&#xff09; cline插件window配置如下linux配置如下測試MCP&#xff1a;time現在幾點了&#xff1f;倫敦現在幾點了&#xff1f;當紐約是下午四點&#xff0c;那倫敦是…

CSS padding(填充)學習筆記

CSS 中的 padding&#xff08;填充&#xff09;是一個非常重要的屬性&#xff0c;它用于定義元素邊框與元素內容之間的空間&#xff0c;即上下左右的內邊距。合理使用 padding 可以讓頁面布局更加美觀、清晰。以下是對 CSS padding 的詳細學習筆記。 一、padding 的作用 padd…

Spring 單元測試核心注解全解:@InjectMocks、@MockBean、@Mock、@Autowired 的區別與實戰

在編寫 Spring Boot 應用的單元測試過程中,@InjectMocks、@MockBean、@Mock 和 @Autowired 是最常用的幾個注解,但它們經常被混淆或誤用,導致測試失敗或注入錯誤。 本文將從本質區別、使用場景、示例代碼、對比表格等多個維度,全面解析這幾者的使用方法與差異,助你寫出結…