0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Redis Cluster之故障轉移

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2025-01-20 09:21 ? 次閱讀

1. Redis Cluster 簡介

Redis Cluster 是 Redis 官方提供的 Redis 集群功能。

305b0afc-d4b6-11ef-9310-92fbcf53809c.png

為什么要實現(xiàn) Redis Cluster?

Redis 是單線程的(從網(wǎng)絡 I/O 處理到實際的讀寫命令處理),無論單核CPU 下內存多大,如果需要大量計算能力,還是需要采用分布式以增加 CPU 資源。

隨著公司發(fā)展,用戶數(shù)量增多,并發(fā)越來越多,業(yè)務需要更高的 QPS,而主從復制中單機的 QPS(10W)可能無法滿足業(yè)務需求。

數(shù)據(jù)量的考慮:現(xiàn)有服務器內存不能滿足業(yè)務數(shù)據(jù)的需要時,單純向服務器添加內存不能達到要求,此時需要考慮分布式需求,把數(shù)據(jù)分布到不同服務器上。

網(wǎng)絡流量需求:業(yè)務的流量已經(jīng)超過服務器的網(wǎng)卡的上限值,可以考慮使用分布式來進行分流。

離線計算,需要中間環(huán)節(jié)緩沖等別的需求。

Redis Cluster 缺點

當節(jié)點數(shù)量很多時,性能不會很高。

解決方案:使用smart智能客戶端操作集群達到通信效率最大化??蛻舳藘炔控撠熡嬎憔S護鍵,槽以及節(jié)點的映射,用于快速定位到目標節(jié)點。智能客戶端知道由哪個節(jié)點負責管理哪個槽,而且當節(jié)點與槽的映射關系發(fā)生改變時,客戶端也會知道這個改變,這是一種非常高效的方式。

集群的限制

key 批量操作支持有限:例如 mget、mset 必須在一個 slot。

key 事務和 Lua 支持有限:操作的 key 必須在一個節(jié)點。

key 是數(shù)據(jù)分區(qū)的最小粒度:不支持 bigkey 分區(qū)。

不支持多個數(shù)據(jù)庫:集群模式下只有一個 db0。

復制只支持一層:不支持樹形復制結構。

Redis Cluster 滿足容量和性能的擴展性,很多業(yè)務“不需要”。

大多數(shù)時客戶端性能會“降低”。 命令無法跨節(jié)點使用:mget、keys、scan、flush、sinter 等。 Lua 和事務無法跨節(jié)點使用。

客戶端維護更復雜:SDK 和應用本身消耗(例如更多的連接池)。

數(shù)據(jù)分布

為什么要做數(shù)據(jù)分布?

全量數(shù)據(jù),單機 Redis 節(jié)點無法滿足要求,按照分區(qū)規(guī)則把數(shù)據(jù)分到若干個子集當中。

309a7d5e-d4b6-11ef-9310-92fbcf53809c.png

常用數(shù)據(jù)分布之順序分布

30e51c1a-d4b6-11ef-9310-92fbcf53809c.png

順序分區(qū)常用在關系型數(shù)據(jù)庫的設計。

常用數(shù)據(jù)分布之哈希分布

310c661c-d4b6-11ef-9310-92fbcf53809c.png

31319c3e-d4b6-11ef-9310-92fbcf53809c.png

虛擬槽分區(qū)

虛擬槽分區(qū)是 Redis Cluster 采用的分區(qū)方式。

預設虛擬槽,每個槽就相當于一個數(shù)字,有一定范圍。每個槽映射一個數(shù)據(jù)子集,一般比節(jié)點數(shù)大。

Redis Cluster 中預設虛擬槽的范圍為 0 到 16383

每個key 通過 CRC16 校驗后對 16384 取模來決定這個 key 存放在哪個槽(slot)。

3167c9f8-d4b6-11ef-9310-92fbcf53809c.png

步驟:

把 16384 個槽按照節(jié)點數(shù)量進行平均分配,由節(jié)點進行管理。

對每個 key 按照 CRC16 規(guī)則進行 hash 運算。

把 hash 結果對 16383 進行取余。

把余數(shù)發(fā)送給 Redis 節(jié)點。

節(jié)點接收到數(shù)據(jù),驗證是否在自己管理的槽編號的范圍。

如果在自己管理的槽編號范圍內,則把數(shù)據(jù)保存到數(shù)據(jù)槽中,然后返回執(zhí)行結果。

如果在自己管理的槽編號范圍外,則會把數(shù)據(jù)發(fā)送給正確的節(jié)點,由正確的節(jié)點來把數(shù)據(jù)保存在對應的槽中。

需要注意的是:Redis Cluster 的節(jié)點之間會共享消息,每個節(jié)點都會知道是哪個節(jié)點負責哪個范圍內的數(shù)據(jù)槽。

虛擬槽分布方式中,由于每個節(jié)點管理一部分數(shù)據(jù)槽,數(shù)據(jù)保存到數(shù)據(jù)槽中。當節(jié)點擴容或者縮容時,對數(shù)據(jù)槽進行重新分配遷移即可,數(shù)據(jù)不會丟失。

虛擬槽分區(qū)特點:

使用服務端管理節(jié)點、槽、數(shù)據(jù)。例如 Redis Cluster。

可以對數(shù)據(jù)打散,又可以保證數(shù)據(jù)分布均勻

2. Redis Cluster 架構

1)節(jié)點

Redis Cluster 是分布式架構的:即 Redis Cluster 中有多個節(jié)點,每個節(jié)點都負責進行數(shù)據(jù)讀寫操作。

每個節(jié)點之間會進行通信。

2)meet 操作

meet 操作是節(jié)點之間完成相互通信的基礎,meet 操作有一定的頻率和規(guī)則。

3173f1ec-d4b6-11ef-9310-92fbcf53809c.png

所有的 Redis 節(jié)點彼此互連,內部使用二進制協(xié)議優(yōu)化傳輸速度和帶寬。

客戶端與 Redis 節(jié)點直連,不需要中間 proxy 層??蛻舳瞬恍枰B接集群所有節(jié)點,連接集群中任何一個可用節(jié)點即可。

3)分配槽

把 16384 個槽平均分配給節(jié)點進行管理,每個節(jié)點只能對自己負責的槽進行讀寫操作。

由于每個節(jié)點之間都彼此通信,每個節(jié)點都知道其他節(jié)點負責管理的槽范圍。

31b7f6c6-d4b6-11ef-9310-92fbcf53809c.png

客戶端訪問任意節(jié)點時,對數(shù)據(jù) key 按照 CRC16 規(guī)則進行 hash 運算,然后將運算結果對 16383 進行取余,如果余數(shù)在當前訪問的節(jié)點管理的槽范圍內,則直接返回對應的數(shù)據(jù)
如果不在當前節(jié)點負責管理的槽范圍內,則會告訴客戶端去哪個節(jié)點獲取數(shù)據(jù),由客戶端去正確的節(jié)點獲取數(shù)據(jù)。

4)復制

Cluster 自動做 master+slave 的主從復制和讀寫分離、master+slave 高可用和主備切換、支持多個 master 的 hash slot 即數(shù)據(jù)分布式存儲。

31d26646-d4b6-11ef-9310-92fbcf53809c.png

3. 故障轉移

集群自動故障轉移過程分為故障發(fā)現(xiàn)和節(jié)點恢復。節(jié)點下線分為主觀下線和客觀下線:

當超過半數(shù)的主節(jié)點(master)認為故障節(jié)點為主觀下線時,則標記這個節(jié)點為客觀下線狀態(tài)。

從節(jié)點(slave)負責對客觀下線的主節(jié)點(master)觸發(fā)故障恢復流程,保證集群的可用性。

節(jié)點失效機制:選舉

31ef19da-d4b6-11ef-9310-92fbcf53809c.png

ping/pong 模式

Redis Cluster 通過 ping/pong 消息實現(xiàn)故障發(fā)現(xiàn)。

ping/pong 不僅能傳遞節(jié)點與槽的對應消息,也能傳遞其他狀態(tài),比如:節(jié)點主從狀態(tài),節(jié)點故障等。

故障發(fā)現(xiàn)就是通過這種模式來實現(xiàn),分為主觀下線和客觀下線。

集群中所有 master 參與投票,如果半數(shù)以上 master 節(jié)點與其中一個 master 節(jié)點通信超時(cluster-node-timeout),則認為該 master 節(jié)點掛掉。

什么時候整個集群不可用(cluster_state:fail)?

如果集群任意 master 掛掉,且當前 master 沒有 slave,則集群進入 fail 狀態(tài)。也可以理解成集群的 [0-16383] slot 映射不完全時進入 fail 狀態(tài)。

如果集群超過半數(shù)以上 master 掛掉,無論是否有 slave,集群進入 fail 狀態(tài)。

鏈接:https://www.cnblogs.com/juno3550/p/14840433.html

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Cluster
    +關注

    關注

    0

    文章

    8

    瀏覽量

    9162
  • Redis
    +關注

    關注

    0

    文章

    377

    瀏覽量

    10905

原文標題:3. 故障轉移

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    云服務器 Flexus X 實例,Docker 集成搭建 Redis 集群

    Redis 集群是一種分布式的 Redis 解決方案,能夠在多個節(jié)點之間分片存儲數(shù)據(jù),實現(xiàn)水平擴展和高可用性。與傳統(tǒng)的主從架構不同,Redis 集群支持數(shù)據(jù)自動分片、主節(jié)點故障自動切換
    的頭像 發(fā)表于 01-13 13:37 ?84次閱讀
    云服務器 Flexus X 實例,Docker 集成搭建 <b class='flag-5'>Redis</b> 集群

    華為云Flexus X實例,Redis性能加速評測及對比

    隨著云計算技術的飛速發(fā)展,Redis 作為一種高性能的內存數(shù)據(jù)庫,在各種應用場景中發(fā)揮著越來越重要的作用。為了滿足不同用戶對 Redis 性能的高要求,華為云推出了 Flexus X 實例,并提供了
    的頭像 發(fā)表于 12-29 15:47 ?196次閱讀
    華為云Flexus X實例,<b class='flag-5'>Redis</b>性能加速評測及對比

    Redis緩存與Memcached的比較

    Redis和Memcached都是廣泛使用的內存數(shù)據(jù)存儲系統(tǒng),它們主要用于提高應用程序的性能,通過減少對數(shù)據(jù)庫的直接訪問來加速數(shù)據(jù)檢索。以下是對Redis和Memcached的比較,涵蓋了它們的一些
    的頭像 發(fā)表于 12-18 09:33 ?197次閱讀

    Redis 開源協(xié)議調整,我們怎么辦?

    2 024 年 3 月 20 日, Redis 官方宣布,從 Redis 7.4 版本開始,Redis 將獲得源可用許可證 ( RSALv2 ) 和服務器端公共許可證 ( SSPLv1 ) 的雙重
    的頭像 發(fā)表于 05-09 22:59 ?456次閱讀
    <b class='flag-5'>Redis</b> 開源協(xié)議調整,我們怎么辦?

    Redis 開源社區(qū)持續(xù)壯大,華為云為 Valkey 項目注入新的活力

    華為云云原生中間件產(chǎn)品團隊在過去的幾年里,通過向 Redis 開源社區(qū)提交代碼優(yōu)化、性能改進和安全性增強的建議,以及積極參與社區(qū)討論和貢獻文檔,為 Redis 的發(fā)展做出了積極的貢獻。作為
    的頭像 發(fā)表于 05-09 22:59 ?766次閱讀
    <b class='flag-5'>Redis</b> 開源社區(qū)持續(xù)壯大,華為云為 Valkey 項目注入新的活力

    Redis為什么這么快?

    Redis 是基于內存的數(shù)據(jù)庫,那不可避免的就要與磁盤數(shù)據(jù)庫做對比。對于磁盤數(shù)據(jù)庫來說,是需要將數(shù)據(jù)讀取到內存里的,這個過程會受到磁盤 I/O 的限制。而對于內存數(shù)據(jù)庫來說,本身數(shù)據(jù)就存在于內存里,也就沒有了這方面的開銷。
    發(fā)表于 04-12 10:32 ?228次閱讀
    <b class='flag-5'>Redis</b>為什么這么快?

    【TE Connectivity】泰科電子低溫升 Cluster Block連接器,無懼高溫,“清新”來襲!

    低溫升Cluster Block 連接器 TE Connectivity (以下簡稱“TE”)家電事業(yè)部的 Cluster Block 產(chǎn)品系列專注于為空調壓縮機制造商提供高效、清潔的電氣快速連接
    發(fā)表于 04-10 14:04 ?328次閱讀
    【TE Connectivity】泰科電子低溫升 <b class='flag-5'>Cluster</b> Block連接器,無懼高溫,“清新”來襲!

    Redis開源版與Redis企業(yè)版,怎么選用?

    點擊“藍字”關注我們數(shù)以千計的企業(yè)和數(shù)以百萬計的開發(fā)人員Redis開源版來構建應用程序。但隨著用戶數(shù)量、數(shù)據(jù)量和地區(qū)性的增加,成本、可擴展性、運營和可用性等問題也隨之而來。Redis企業(yè)版
    的頭像 發(fā)表于 04-04 08:04 ?1164次閱讀
    <b class='flag-5'>Redis</b>開源版與<b class='flag-5'>Redis</b>企業(yè)版,怎么選用?

    數(shù)據(jù)安全沒保障?GaussDB(for Redis) 為你保駕護航

    近日,一些用戶反饋,使用的開源 Redis 中新增了幾個未知來源的 Key。通過分析發(fā)現(xiàn),用戶使用的開源 Redis 沒有設置密碼,很可能是遭到了 Redis 擴散病毒的攻擊,表面上只是新增了幾個
    的頭像 發(fā)表于 03-28 22:09 ?697次閱讀
    數(shù)據(jù)安全沒保障?GaussDB(for <b class='flag-5'>Redis</b>) 為你保駕護航

    GaussDB(for Redis) 特性揭秘:多租戶管理

    華為云 GaussDB(for Redis)持續(xù)完善企業(yè)級增強特性,是名副其實的 "Redis Plus" ,其中很經(jīng)典的企業(yè)級特性是 多租戶能力 ,支持添加只讀賬號、讀寫賬號,且具備強大的 DB
    的頭像 發(fā)表于 03-28 22:06 ?769次閱讀
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:多租戶管理

    GaussDB(for Redis) 特性揭秘:大 key 治理

    ? 從 DBA 的視角看,大 Key 無疑是引起 Redis 線上問題的常見原因。為了解決大 Key 隱患,業(yè)務首先要遵守合理的開發(fā)規(guī)范,減少大 Key 的產(chǎn)生和訪問依賴。但有時大 Key 是在程序
    的頭像 發(fā)表于 03-28 22:06 ?688次閱讀
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:大 key 治理

    GaussDB(for Redis) 游戲實踐:玩家下線行為上報

    為保護未成年人的身心健康,2007 年國家推出網(wǎng)絡游戲防沉迷系統(tǒng),對未成年人的游戲時間進行限制,游戲廠家需要及時感知用戶的下線時間并上報。Redis 是游戲數(shù)據(jù)庫重要選型之一,在基于開源 Redis
    的頭像 發(fā)表于 03-28 22:03 ?545次閱讀

    新版 Redis 不再“開源”,對使用者都有哪些影響?

    2024 年 3 月 20 日,Redis Labs 宣布從 Redis 7.4 開始,將原先比較寬松的 BSD 源碼使用協(xié)議修改為 RSAv2和 SSPLv1協(xié)議。該變化意味著 Redis
    的頭像 發(fā)表于 03-27 22:30 ?527次閱讀
    新版 <b class='flag-5'>Redis</b> 不再“開源”,對使用者都有哪些影響?

    中國電信聯(lián)合中興通訊推出Cluster DRS解決方案

    在2024年世界移動通信大會(MWC2024)上,中國電信與中興通訊共同展示了他們的最新創(chuàng)新技術——Cluster DRS(Dynamic Radio Sharing)解決方案。這項新技術基于動態(tài)波束共享技術,為無人機提供了更高效、更穩(wěn)定的通信支持。
    的頭像 發(fā)表于 02-27 10:32 ?788次閱讀

    Redis官方搜索引擎來了,性能炸裂!

    RediSearch 是一個 Redis 模塊,為 Redis 提供查詢、二級索引和全文搜索功能。
    的頭像 發(fā)表于 02-21 10:01 ?2460次閱讀
    <b class='flag-5'>Redis</b>官方搜索引擎來了,性能炸裂!