Redis集群模式

来源:https://www.cnblogs.com/JaxYoun/archive/2020/02/20/12336930.html
-Advertisement-
Play Games

1、常見的三種數據的集群存儲模式 1. full mirror:全量鏡像模式,單純備份模式,各個節點數據相同,都包含了全量數據,僅主節點可寫,保證了數據冗餘和讀的負載均衡。數據安全性高,橫向擴展能力差,資源利用率不高。 2. pure sharding:數據分片,每個節點的數據不相同,所有節點中數據 ...


1、常見的三種數據的集群存儲模式

  1. full-mirror:全量鏡像模式,單純備份模式,各個節點數據相同,都包含了全量數據,僅主節點可寫,保證了數據冗餘和讀的負載均衡。數據安全性高,橫向擴展能力差,資源利用率不高。

  2. pure-sharding:數據分片,每個節點的數據不相同,所有節點中數據的並集就是全量數據。橫向擴展能力強,資源利用率高,但是數據安全性低。

  3. mirrored-sharding:結合兩種模式的優點,既滿足高數據安全性要求,又能實現規模的橫向擴展。

2、Redis集群的必要性和分類

  • 必要性:單實例服務存在單點故障,集群模式能提高服務的整體可用性。

  • 分類:

    • 主從複製(Replication):數據在主從間全量鏡像,僅主節點可寫,所有節點都可讀,但仍不具備橫向擴展能力。

      • 靜態主從:在啟動服務時,在配置文件中指定,給slave指定其從屬的master,可以實現數據的備份和讀操作的負載均衡,但是缺乏對master實例的高可用保障。

        redis-server --port 6380 slavaof 127.0.0.1 6379 //將6379配置為本實例的master

        還可以在服務運行過程中通過客戶端命令手動改變實例的角色:

        redis > slaveof 127.0.0.1 6381 //將本實例的master改為6381

        redis > slaveof no one //將本實例從主從結構中獨立出來,但會保留之前的數據

      • 利用哨兵(Sentinel )實現高可用:每個服務實例都啟動一個哨兵守護進程,負責集群中節點狀態的監控和主節點的選舉,此時主節點也就實現了高可用。哨兵可以單實例管理單集群,也可以單實例管理多集群,還可以組成無中心哨兵集群,哨兵集群內部使用paxos理論進行協調管理。

    • 分散式集群(Cluster):

      • twemproxy:twitter開發的一個針對key提供路由功能的代理曾,代理層上方時客戶端,下方是多個Redis服務實例,形成分片集群,客戶端針對key的讀寫操作都必須經過代理層路由到分片集群中指定的服務實例上(key的hashcode對節點數量取模),這就實現了集群的橫向擴展。

        • 缺點:
        1. 存在數據傾斜問題,一旦發生傾斜將不能成分利用集群資源,消除傾斜需要額外設計演算法,耗時耗力。
        2. 代理層存在單點缺陷。
        3. 節點數量變動後必須對歷史數據全量再分發。
      • 官方集群方案(3.x後):將整個集群劃分為16384個邏輯slot,每個服務實例集群構成master-slave分片,各分片各自來認領一批邏輯slot。所有的key都會被路由到某個邏輯slot上,計算公式為【slot_num = crc16(key) % 16384】,式中crc16函數是16位迴圈冗餘校驗和函數。

        1. 當需要橫向擴容時,舊節點讓出一部分slot給新節點,這部分數據也隨slot遷移到新節點上,這就避免了全量數據的重分發。

        2. 當發生數據傾斜時可以手動瓜分較重節點上的slot,實現數據的分攤,從而解決了傾斜問題。

        3. 每個分片都是一個master-slave結構,保證本分片內的高可用(當前模式將sentinel進程融合到了server進程中,方便分片內節點的狀態和角色管理)。
        4. 每個分片的主節點都具有slot計算能力,當某個主節點接收到一個key的添加時,都會計算其應該歸屬的slot,如果恰好命中本分片,就存儲數據,如果未命中則會告訴客戶端讓其重新計算。讀數據時,分片主節點會計算key的slot,如果恰好命中則返回value,如果未命中則會返給正確的存儲節點位置。
        5. 部署時至少要啟動6各節點,三個分片,每個分片內一主一從。

3、Redis主從複製(哨兵模式)

  1. 一個Redis主服務擁有多個副本服務,形成master-slave結構。
  2. 只要網路正常,master會一直將自己的數據更新同步給slave,保持主從數據一致。
  3. 只有master能接收寫命令,master和slave都可以接收讀命令,實現讀操作的負載均衡。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • linux上的進程查看及管理工具: pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,nice,renice,killall。。。 linux開機時,會啟動第一個進程,由這個進程去啟 ...
  • 1. 使用Navicat工具,優先將整個資料庫的表和數據導出。 2. 如果遇到 文件損壞 錯誤可以在 表實例界面 選中所有表,然後將表轉儲為SQL文件(結構和數據)。 3. 在目標資料庫執行導出的SQL文件,導入數據和結構。 4. 如果個別表因為各種原因(比如使用federated引擎建立了DB L ...
  • 1、KeyBy 操作後,只有當 Key 的數量大於運算元的併發實例數才能獲得較好的計算性能。 A.而若Key 的數量比實例數量少,就會導致部分實例收不到數據,這些實例就得不到執行,這些實例的計算能力得不到充分發揮。 ~~B.當Key個數多餘並行實例數時,由於同一個 Key 對應的所有數據都能發送到同一 ...
  • 邏輯計劃 1. logicGraph或者jobGraph,其端點為operator,edge為數據流向。 2. operator往往代表一個函數。 3. 同一個分區內的具有連續上下游關係的函數組成operator chain,一個operator chain內的數據來流動過程中不會出現序列化和分區間 ...
  • 在早期版本的Spark中,shuffle過程沒有磁碟讀寫操作,是純記憶體操作,後來發現效率較低,且極易引發OOME,較新版本的Shuffle操作都加入了磁碟讀寫進行了改進。 1、未經優化的HashShuffleManager:上一個stage中每一個task會對下一個stage的每一個task寫一份數 ...
  • 1、Spark組件之間使用RPC機制進行通信。RPC的客戶端在本地編寫並調用業務介面,介面在本地通過RPC框架的動態代理機制生成一個對應的實現類,在這個實現類中完成soket通信、遠程調用等功能的邏輯包裝,而在RPC的服務端既編寫業務介面也編寫了具體的業務實現類,通過RPC框架以介面的方式暴露出來, ...
  • 1、spark的一大特性就是基於記憶體計算,Driver只保存任務的巨集觀性的元數據,數據量較小,且在執行過程中基本不變,不做重點分析,而真正的計算任務Task分佈在各個Executor中,其中的記憶體數據量大,且會隨著計算的進行會發生實時變化,所以Executor的記憶體管理才分析的重點。 2、在執行Sp ...
  • 1、Redis數據持久化的必要性 由於redis是基於記憶體的資料庫,面臨數據掉電易失的風險,要避免數據丟失,最好將記憶體數據持久化到磁碟等永久存儲介質上。服務重啟時,會先載入磁碟文件內的數據到記憶體,完成數據恢復。 2、RDB(RedisDB) 對記憶體中的redis全量數據進行 時點快照 並序列化,以文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...