在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Redis Cluster之故障轉移

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

1. Redis Cluster 簡介

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

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

為什么要實現 Redis Cluster?

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

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

數據量的考慮:現有服務器內存不能滿足業務數據的需要時,單純向服務器添加內存不能達到要求,此時需要考慮分布式需求,把數據分布到不同服務器上。

網絡流量需求:業務的流量已經超過服務器的網卡的上限值,可以考慮使用分布式來進行分流。

離線計算,需要中間環節緩沖等別的需求。

Redis Cluster 缺點

當節點數量很多時,性能不會很高。

解決方案:使用smart智能客戶端操作集群達到通信效率最大化。客戶端內部負責計算維護鍵,槽以及節點的映射,用于快速定位到目標節點。智能客戶端知道由哪個節點負責管理哪個槽,而且當節點與槽的映射關系發生改變時,客戶端也會知道這個改變,這是一種非常高效的方式。

集群的限制

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

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

key 是數據分區的最小粒度:不支持 bigkey 分區。

不支持多個數據庫:集群模式下只有一個 db0。

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

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

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

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

數據分布

為什么要做數據分布?

全量數據,單機 Redis 節點無法滿足要求,按照分區規則把數據分到若干個子集當中。

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

常用數據分布之順序分布

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

順序分區常用在關系型數據庫的設計。

常用數據分布之哈希分布

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

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

虛擬槽分區

虛擬槽分區是 Redis Cluster 采用的分區方式。

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

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

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

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

步驟:

把 16384 個槽按照節點數量進行平均分配,由節點進行管理。

對每個 key 按照 CRC16 規則進行 hash 運算。

把 hash 結果對 16383 進行取余。

把余數發送給 Redis 節點。

節點接收到數據,驗證是否在自己管理的槽編號的范圍。

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

如果在自己管理的槽編號范圍外,則會把數據發送給正確的節點,由正確的節點來把數據保存在對應的槽中。

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

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

虛擬槽分區特點:

使用服務端管理節點、槽、數據。例如 Redis Cluster。

可以對數據打散,又可以保證數據分布均勻

2. Redis Cluster 架構

1)節點

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

每個節點之間會進行通信。

2)meet 操作

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

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

所有的 Redis 節點彼此互連,內部使用二進制協議優化傳輸速度和帶寬。

客戶端與 Redis 節點直連,不需要中間 proxy 層。客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可。

3)分配槽

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

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

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

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

4)復制

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

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

3. 故障轉移

集群自動故障轉移過程分為故障發現和節點恢復。節點下線分為主觀下線和客觀下線:

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

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

節點失效機制:選舉

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

ping/pong 模式

Redis Cluster 通過 ping/pong 消息實現故障發現。

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

故障發現就是通過這種模式來實現,分為主觀下線和客觀下線。

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

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

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

如果集群超過半數以上 master 掛掉,無論是否有 slave,集群進入 fail 狀態。

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

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

    關注

    0

    文章

    9

    瀏覽量

    9246
  • Redis
    +關注

    關注

    0

    文章

    385

    瀏覽量

    11346

原文標題:3. 故障轉移

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    【經驗分享】在Omni3576上編譯Redis-8.0.2源碼,并安裝及性能測試

    本文首先介紹Redis是什么,然后介紹如何在Omni3576上編譯Redis-8.0.2源碼,以及從源碼編譯、安裝Redis,最后介紹如何在Omni3576上運行Redis性能測試,并
    的頭像 發表于 06-05 08:05 ?142次閱讀
    【經驗分享】在Omni3576上編譯<b class='flag-5'>Redis</b>-8.0.2源碼,并安裝及性能測試

    【幸狐Omni3576邊緣計算套件試用體驗】Redis最新8.0.2版本源碼安裝及性能測試

    本文首先介紹Redis是什么,然后介紹如何在Omni3576上編譯Redis-8.0.2源碼,以及從源碼編譯、安裝Redis,最后介紹如何在Omni3576上運行Redis性能測試,并
    發表于 06-03 01:28

    Redis 再次開源!

    “ ?Redis 現已采用 AGPLv3 開源許可證。? ” Redis CEO 的 Blog 以下是 Redis CEO Rowan Trollope 的 Blog: 像 AWS 和 GCP 這樣
    的頭像 發表于 05-06 18:26 ?342次閱讀

    redis三種集群方案詳解

    Redis中提供的集群方案總共有三種(一般一個redis節點不超過10G內存)。
    的頭像 發表于 03-31 10:46 ?614次閱讀
    <b class='flag-5'>redis</b>三種集群方案詳解

    Redis實戰筆記

    在目前的技術選型中,Redis 儼然已經成為了系統高性能緩存方案的事實標準,因此現在?Redis 也成為了后端開發的基本技能樹之一。 ? 基于上述情況,今天給大家分享一份?杰哥?親筆撰寫的內部
    的頭像 發表于 02-09 09:12 ?340次閱讀
    <b class='flag-5'>Redis</b>實戰筆記

    華為云 Flexus X 加速 Redis 案例實踐與詳解

    Redis 加速鏡像,更是為開發者提供了極大的便利。本文將詳細介紹如何利用華為云 Flexus X 實例自帶的 Redis 鏡像,快速部署并配置 Redis,以及通過實際案例展示其便捷性和高效性。 一、華為云 Flexus
    的頭像 發表于 01-23 17:52 ?285次閱讀
    華為云 Flexus X 加速 <b class='flag-5'>Redis</b> 案例實踐與詳解

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

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

    性能與可靠性并重,Flexus X 實例助力 Redis 三主三從集群高效運行

    前言 在追求極致性能與可靠性的道路上,Flexus X 實例以卓越的算力與智能調度,為 Redis 三主三從集群的高效運行保駕護航。此架構不僅實現了數據的高可用性,還通過負載均衡提升了整體性
    的頭像 發表于 01-07 17:21 ?370次閱讀
    性能與可靠性并重,Flexus X 實例助力 <b class='flag-5'>Redis</b> 三主三從集群高效運行

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

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

    華為云 Flexus X 輕松實現 Redis 一主多從高效部署

    前言 ????????華為云 Flexus?X 是一款專為高性能計算設計的云服務器實例,其搭載的 X-Turbo 加速技術和智能應用調優算法,能夠大幅提升 Redis 的處理能力和響應速度。此外
    的頭像 發表于 12-27 13:45 ?462次閱讀
    華為云 Flexus X 輕松實現 <b class='flag-5'>Redis</b> 一主多從高效部署

    Redis使用重要的兩個機制:Reids持久化和主從復制

    今天這篇文章,我們一起了解 Redis 使用中非常重要的兩個機制:Reids 持久化和主從復制。 我們都知道Redis是一個內存數據庫,在學習主從同步之前,我們首先要想到 Redis 是如何做數據
    的頭像 發表于 12-18 10:33 ?372次閱讀
    <b class='flag-5'>Redis</b>使用重要的兩個機制:Reids持久化和主從復制

    Redis緩存與Memcached的比較

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

    CSP LED切割前如何轉移到UV膜上

    倒裝芯片底部與高溫膠膜接觸,封裝后如何將芯片底部與高溫膜分離,然后轉移到UV膜上?
    發表于 10-29 23:23

    恒訊科技分析:云數據庫rds和redis區別是什么如何選擇?

    云數據庫RDS(Relational Database Service)和Redis是兩種不同類型的數據庫服務,它們有各自的特點和適用場景: 1、數據模型:RDS是一種關系型數據庫服務,通常用于存儲
    的頭像 發表于 08-19 15:31 ?771次閱讀

    K8S學習教程(二):在 PetaExpress KubeSphere容器平臺部署高可用 Redis 集群

    前言 Redis 是在開發過程中經常用到的緩存中間件,為了考慮在生產環境中穩定性和高可用,Redis通常采用集群模式的部署方式。 在制定Redis集群的部署策略時,常規部署在虛擬機上的方式配置繁瑣
    的頭像 發表于 07-03 15:30 ?1174次閱讀
    K8S學習教程(二):在 PetaExpress KubeSphere容器平臺部署高可用 <b class='flag-5'>Redis</b> 集群
    主站蜘蛛池模板: 99精品在免费线视频 | 欧洲无线区一二区 | aa2424在线视频看片 | 国产精品第一页在线观看 | 黄色美女网站在线观看 | 一区二区不卡免费视频 | 韩国午夜精品理论片西瓜 | 国产成人高清一区二区私人 | 在线播放你懂 | 国产产一区二区三区久久毛片国语 | 日本欧洲亚洲一区在线观看 | 99久久国产免费福利 | 在线免费看视频 | 18男女很黄的视频 | 国产男女怕怕怕免费视频 | 啪啪在线视频 | 精品国产乱码一区二区三区 | 亚洲一区二区三区精品视频 | 亚洲国产欧美日韩一区二区三区 | 天天在线综合网 | 精品在线视频一区 | bt天堂网www连接 | 性欧美网站 | 久久99久久精品97久久综合 | 性欧美www| 国产在线观看色 | 成人免费精品视频 | 日韩视频 中文字幕 视频一区 | 久久2017| 国产午夜亚洲精品 | 免费被黄网站在观看 | 成人在线天堂 | 毛片网站免费 | 午夜爱爱毛片xxxx视频免费看 | 99久久精品久久久久久婷婷 | 你懂的网址免费国产 | 97影院理论 | 欧美成人3d动漫在线播放网站 | 激情网页 | 精品国产你懂的在线观看 | 国产精品香蕉在线一区 |