【Redis 進階】集群

思維導圖:


一、Redis集群概述

(一)廣義集群與狹義集群的定義

  • ??廣義集群??:指由多個機器組成的分布式系統,例如前面提到的主從模式和哨兵模式。
  • ??狹義集群??:Redis提供的集群模式,主要用于解決存儲空間不足的問題。

(二)Redis集群的核心思想

Redis集群通過引入多組Master/Slave架構,每組Master/Slave負責存儲數據全集的一部分,從而實現數據的分布式存儲和高可用性。

圖片中的每一個紅框,都可以稱作一個分片,也就是說,理論上如果數據量進一步增加,只要繼續增加分片的數量即可。

那么接下來的問題就是,給定一個數據,這個數據應該放在哪個分片上呢,取數據的時候又應該到哪個片段讀取?

二、數據分片算法

(一)哈希求余算法

  • ??原理??:通過哈希函數對數據key進行映射,得到的整數再對分片數量求余,確定數據所在分片。
    節點位置 = hash(key) % 節點數量
  • ??缺點??:由于數據的分布是隨機的,在加入一個切片后,所有的數據需要重新分配區間,大量的數據需要遷移。數據遷移成本高,尤其在數據量過大時。

(二)一致性哈希算法

  • ??原理??:

1.將1 ~ 2^32 - 1均勻分布在一個圓環上。

2.將整個圓劃分為三個分片

3.找到相應分片的方法就是找到數據的 hash 值,落到某個點,然后順時針旋轉,對應的分片就是所屬分片

  • ??缺點??:在這種情況下,如果想進行擴容操作,那就可以在 0 號分片和 2 號分片中間插入 3 號分片,然后把原屬于 0?號 和 2 號的部分數據遷移到 3 號,這樣數據遷移的數量就會大大降低。但是同時也帶來了一個問題,那就是分片的數據不均勻,導致數據傾斜。

(三)哈希槽分區算法

  • ??原理??:
    • Redis集群采用哈希槽分區算法,將整個數據集劃分為16384個槽位,每個節點負責一部分槽位。
    • 假設當前有三個分片,一種可能的分配方式:
      • 0號分片: [0, 5461],共5462個槽位。
      • 1號分片: [5462, 10923],共5462個槽位。
      • 2號分片: [10924, 16383],共5460個槽位。

這里的分片規則是很靈活的,每個分片持有的槽位不一定連續。每個分片的節點使用位圖來表示自己持有哪些槽位。對于16384個槽位來說,需要2048個字節(2KB)大小的內存空間表示。

  • 如果需要進行擴容,比如新增一個3號分片,就可以針對原有的槽位進行重新分配。例如一種可能的分配方式:
    • 0號分片: [0, 4095],共4096個槽位。
    • 1號分片: [5462, 9557],共4096個槽位。
    • 2號分片: [10924, 15019],共4096個槽位。
    • 3號分片: [4096, 5461] + [9558, 10923] + [15019, 16383],共4096個槽位。

在實際使用Redis集群分片的時候,不需要手動指定哪些槽位分配給某個分片,只需要告訴某個分片應該持有多少個槽位即可,Redis會自動完成后續的槽位分配,以及對應的key搬運的工作。

  • ??優點??:擴展性強,數據分布均勻。
數據分片相關問題
  1. ??Redis集群最多時有16384個分片嗎???

    • 雖然理論上可以支持16384個分片,但實際應用中建議不超過1000個分片,以避免數據傾斜和系統不穩定。
    • 分片過多會導致服務程序涉及的機器數量激增,增加系統不穩定性。
  2. ??為什么是16384個槽位???

    • 節點間通過心跳包通信,心跳包需包含分片對應的槽位信息。
    • 使用位圖表示槽位信息,占用2KB大小,適合頻繁交互的心跳包,減少網絡帶寬消耗。

三、基于Docker在云服務器上搭建Redis集群

(一)創建目錄和配置

  • ??YAML文件??:使用Docker Compose定義集群節點和服務配置。
  • ??Shell腳本??:批量創建每個節點的配置文件。

(二)創建Redis節點

  • 使用Docker創建11個Redis節點(9個集群節點,2個擴容節點)。

(三)創建集群

  • 使用redis-cli --cluster create命令創建集群。
  • cluster nodes命令查看集群信息。

四、故障轉移機制

(一)故障判定

Redis集群中的故障判定依賴于節點間的心跳包通信。每個節點每秒會隨機向部分節點發送心跳包(避免全量發送導致的指數級增長)。心跳包包含節點ID、所屬分片、包含的槽位等信息。

  1. ??主觀下線(PFAIL)??
    • 當一個節點(如A)向另一個節點(如B)發送ping包后,如果在規定時間內未收到B的pong包回復,A會重置與B的連接并再次發送ping包。
    • 若再次發送后仍未收到回復,A就會主觀地認為B下線了,將B標記為PFAIL狀態。
  2. ??客觀下線(FAIL)??
    • 當一個節點將某個節點標記為PFAIL后,它會通過Redis內置的Gossip協議與其他節點進行通信,詢問它們對目標節點狀態的看法。
    • 如果超過半數的節點都認為該目標節點處于PFAIL狀態,那么這個目標節點就會被判定為FAIL狀態,此時故障轉移流程將被觸發。

(二)故障遷移

當主節點發生故障被判定為FAIL后,故障遷移過程如下:

  1. ??從節點參選資格判斷??
    • 故障主節點的從節點會根據自身與主節點的數據差異等因素判斷是否有參選資格。
  2. ??休眠與拉票??
    • 具有參選資格的從節點會進入休眠狀態,休眠時間計算方式為:500ms基礎時間+【0 - 500】隨機時間+排名 * 1000ms(offset越大,排名越靠前,即越小)。
    • 當某個從節點先醒來后,會向其他節點發送拉票請求,但只有主節點能夠參與投票。
  3. ??新主節點選舉??
    • 當某個從節點的票數超過當前主節點(故障主節點)的半數時,該從節點就會晉升為新主節點。
    • 新主節點確定后,會將其信息同步給其他節點,同時哨兵節點會通知客戶端更新連接信息,以確保后續操作指向新的主節點。

(三)集群宕機情況

  1. 某個分片的主從節點全部掛掉。
  2. 主節點掛掉且無從節點。
  3. 超過半數的master節點故障。

五、集群擴容

(一)新主節點加入與槽位重分配

  • ??新主節點加入??:將新的Redis節點加入到集群中。
  • ??槽位重分配??:通過redis-cli --cluster reshard命令重新分配槽位,將部分槽位從現有節點遷移到新節點。
  • 在這個過程中,對于集群中的key,大部分是不用搬運的,在搬運的過程中,未搬運的key可以被客戶端訪問。對于正在搬運的key,可能就會出現訪問出錯的情況。就比如你正重定向到某個切片,但這個切片上的對應數據已經被搬運走了。所以為了更高的可用性,除了擴容,也可以搭建新的集群(一組新的機器),然后從舊的集群中克隆數據,使用新的集群代替舊的集群。(成本高)

(二)添加從節點

  • 給新的主節點添加從節點以提高數據冗余和高可用性。

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

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

相關文章

第二十八節:直方圖處理- 直方圖計算與繪制

直方圖是數字圖像處理的基石工具,在計算機視覺領域扮演著關鍵角色。通過本文,您將深入掌握使用OpenCV進行直方圖計算的底層原理,并學會多種專業的直方圖可視化方法。無論您是剛入門的新手還是希望提升技能的開發者,這里都有值得探索的進階技巧。 一、直方圖基礎理論 1.1 什…

傳奇游戲跟奇跡游戲的區別

前言 對傳奇和奇跡游戲背景感興趣的,可以去瀏覽以下相關博客: 傳奇與奇跡的發源 傳奇游戲跟奇跡游戲的區別 區別1:畫面 奇跡游戲畫面更為美觀(圖1:奇跡游戲畫面) 傳奇游戲畫面相對簡陋(圖2&am…

佰力博科技準靜態d33測試的注意事項

準靜態d33測試是測量壓電材料縱向壓電應變常數的重要方法,其注意事項包括以下幾個方面: 選擇合適的測量設備 準靜態d33測試需要使用專用的壓電測試儀,如佰力博PEAI1000高精度壓電分析儀、準靜態d33測量儀或PCA1000壓電陶瓷綜合參數分析儀。這…

歸并排序~

歸并排序是經典的排序算法之一,是分治思想的體現。雖然在排序大多用sort就能搞定,但是有些題用可以用歸并順帶就解決掉了(比如求逆序對)。 歸并排序大概就是先將整個序列分為足夠小的片段,然后在每個小片段里面進行排序,然后再依…

UUG杭州站 | 團結引擎1.5.0 OpenHarmony新Feature介紹

PPT下載地址:https://u3d.sharepoint.cn/:b:/s/UnityChinaResources/EaZmiWfAAdFFmuyd6c-7_3ABhvZoaM69g4Uo2RrSzT3tZQ?e2h7RaL 在2025年4月12日的Unity User Group杭州站中,Unity中國OpenHarmony技術負責人劉偉賢帶來演講《團結引擎1.5.0 OpenHarmony新…

有效的聚水潭數據集成到MySQL案例

聚水潭數據集成到MySQL的技術案例分享 在本次技術案例中,我們將探討如何通過輕易云數據集成平臺,將聚水潭的采購退貨單數據高效、準確地集成到MySQL數據庫中的BI云妃秀采購退貨表。這個過程不僅需要處理大量的數據,還要確保數據的完整性和實…

win11 VSCode 強制彈窗微軟登錄

今天在一臺新電腦上配置VSCode同步的時候,用了微軟賬號,因為這臺電腦比較特殊,不方便科學上網,所以一開始用的微軟賬戶登錄,導致和GitHub賬號登錄的配置、擴展等等不同步。 后面準備改用GitHub賬號登錄發現不行&#…

Milvus 全面解析

Milvus是鷹科鷹屬的一種猛禽,以飛行速度快、視力敏銳和適應能力強而聞名。 Zilliz 以其開源高性能、高可擴展性矢量數據庫 Milvus 命名,該數據庫可在從筆記本電腦到大型分布式系統等各種環境中高效運行。它既可以作為開源軟件使用,也可以作為云服務使用。 Milvus 由 Zilli…

【復刻】人工智能技術應用如何影響企業創新(2007-2023年)

AI 技術如何推動企業創新,是新質生產力形成與發展的核心問題。深入研究這一議題,有助于為當前的創新管理實踐提供有效方案,進而助力中國經濟實現高質量發展。參照李玉花(2024)的做法,對來自中國工業經濟《人…

快消零售AI轉型:R2AIN SUITE如何破解效率困局

引言 快消零售行業正經歷從“規模擴張”到“精益運營”的轉型陣痛,消費者需求迭代加速、供應鏈復雜度攀升、人力成本持續走高,倒逼企業通過技術升級實現業務重塑[1]。RAIN SUITE以AI應用中臺為核心,針對快消零售場景打造全鏈路提效方案&…

計算機網絡八股文--day1

從瀏覽器輸入url到顯示主頁的過程? 1. 瀏覽器查詢域名的IP地址 2. 瀏覽器和服務器TCP三次握手 3. 瀏覽器向服務器發送一個HTTP請求 4. 服務器處理請求,返回HTTP響應 5. 瀏覽器解析并且渲染頁面 6. 斷開連接 其中使用到的協議有DNS協議&#xff08…

Vector和list

一、Vector和list的區別——從“它們是什么”到“區別在哪兒” 1. 它們是什么? Vector:類似于一排排整齊的書架(數組),存放元素時,元素排成一條線,連續存儲。可以很快通過編號(索引…

VCS X-PROP建模以及在方針中的應用

VCS X-PROP建模以及在方針中的應用 摘要:VCS X-Prop(X-Propagation)是 Synopsys VCS 仿真工具中的一種高級功能,用于增強 X 態(未知態)和 Z 態(高阻態)在 RTL 仿真中的建模和傳播能力…

HPE ProLiant DL360 Gen11 服務器,配置 RAID 5 教程!

今天的任務,是幫客戶的一臺HPE ProLiant DL360 Gen11 服務器,配置RAID 5。依然是按照我的個人傳統習慣,順便做一個教程,分享給有需要的粉絲們。如果你在實際操作中,遇到了什么問題,歡迎在評論區留言&#x…

PyTorch深度神經網絡(前饋、卷積神經網絡)

文章目錄 神經網絡概述神經元模型多層感知機前饋神經網絡網絡拓撲結構數學表示基本傳播公式符號說明整體函數視角 卷積神經網絡卷積神經網絡發展簡史第一代(1943-1980)第二代(1985-2006)第三代(2006-至今)快…

三軸云臺之控制算法協同技術篇

三軸云臺的控制算法協同技術是確保云臺在復雜動態環境下實現高精度、高穩定性運動控制的核心,其技術體系涵蓋多傳感器融合、多算法協同以及多目標優化三個關鍵維度。以下從技術架構與實現路徑展開分析: 一、多傳感器融合:構建環境感知基礎 三…

Adobe DC 2025安裝教程

一.軟件下載 點此下載 二.軟件安裝

[Java實戰]Spring Boot 整合 Freemarker (十一)

[Java實戰]Spring Boot 整合 Freemarker (十一) 引言 Apache FreeMarker 作為一款高性能的模板引擎,憑借其簡潔語法、卓越性能和靈活擴展性,在 Java Web 開發中占據重要地位。結合 Spring Boot 的自動化配置能力,開發者能快速構建動態頁面、…

DeepSeek:開啟能源領域智能化變革新時代

目錄 一、DeepSeek 與能源領域變革的邂逅1.1 DeepSeek 在人工智能領域的地位與特點1.2 能源行業面臨的挑戰與變革需求1.3 DeepSeek 在能源領域應用的重要性和意義 二、能源政策解讀與科普新助手2.1 能源政策解讀的深度變革2.2 能源科普的創新使者 三、能源項目可行性分析新利器…

uniapp設置 overflow:auto;右邊不顯示滾動條的問題

設置了overflow:auto;或者其它overflow的屬性不顯示滾動條是因為在uniapp中默認隱藏了滾動條 解決方法: //強制顯示滾動條 ::-webkit-scrollbar {width: 8px !important;background: #ccc !important;display: block !important;}//設置滾動條顏色.cu-…