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
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...