Redis基礎知識(學習筆記5--Redis Cluster)

来源:https://www.cnblogs.com/xuliuzai/p/18250178
-Advertisement-
Play Games

主從複製 官方文檔:https://redis.io/docs/latest/operate/oss_and_stack/management/replication/ 極簡概括:將一個主Redis伺服器的數據複製到其它從Redis伺服器的過程。 角色: 主節點(Master):負責處理客戶端的寫( ...


1.Redis Cluster 是Reids 自己本身提供的Redis 集群方案。

 【此圖來源於 https://www.bilibili.com/video/BV1Gs4y1Q7Ls?p=6&vd_source=0e347fbc6c2b049143afaa5a15abfc1c】

2.Redis 是去中心化的,集群由多個redis節點組成,每個節點負責整個集群的一部分數據,每個節點負責的數據多少可能不一樣。節點之間相互連接組成一個對能的集群,他們呢之間通過一個特殊的二進位協議交換集群信息。

3.Redis Cluster 將所有的數據劃分為16384個槽位,每個節點負責其中一部分槽位。

4.將key映射到hash slot的演算法如下:

HASH_SLOT = CRC16(key) mod 16384

取key進行CRC16計算之後對16384取模運算得到key所在的slot,由於redis cluster在啟動時會對每一臺master節點分配slot空間,那麼當前slot的值在哪台master節點的slot空間範圍內,key就存儲在哪台節點。

 【圖片來自 《Redis cluster集群Hash Tag原理分析》 https://www.51cto.com/article/757391.html

5.正常情況下,每個hash slot只會由一個節點提供服務。

當Redis Cluster 的客戶端來連接集群時,會得到一份集群的槽位配置信息。這樣客戶端要查找某個Key時,可以直接定位到目標節點。(這一點與Codis不同,Codis需要通過Proxy來定位目標節點,Reids Cluster 則直接定位)。

6.數據傾斜的問題

(1) 一種方案時,發現手動遷移;例如一些商品促銷前,檢查下,發現數據集中了,或者嚴重傾斜,可以考慮手動遷移。

(2)另一種方案,自動形式,採用 hash tag方案;在原key上面,添加以{}包圍的首碼名。用不同的首碼名,來進行映射分配。 

7. hash tag 的官方解釋

Hash tags
There is an exception for the computation of the hash slot that is used in order to implement hash tags. 
Hash tags are a way to ensure that multiple keys are allocated in the same hash slot.
This is used in order to implement multi-key operations in Redis Cluster. To implement hash tags, the hash slot for a key is computed in a slightly different way in certain conditions.
If the key contains a "{...}" pattern only the substring between { and } is hashed in order to obtain the hash slot.
However since it is possible that there are multiple occurrences of { or } the algorithm is well specified by the following rules: IF the key contains a { character. AND IF there is a } character to the right of {. AND IF there are one or more characters between the first occurrence of { and the first occurrence of }. Then instead of hashing the key, only what is between the first occurrence of { and the following first occurrence of } is hashed. Examples: The two keys {user1000}.following and {user1000}.followers will hash to the same hash slot since only the substring user1000 will be hashed in order to compute the hash slot. For the key foo{}{bar} the whole key will be hashed as usually since the first occurrence of { is followed by } on the right without characters in the middle. For the key foo{{bar}}zap the substring {bar will be hashed, because it is the substring between the first occurrence of { and the first occurrence of } on its right. For the key foo{bar}{zap} the substring bar will be hashed, since the algorithm stops at the first valid or invalid (without bytes inside) match of { and }. What follows from the algorithm is that if the key starts with {}, it is guaranteed to be hashed as a whole. This is useful when using binary data as key names.

hash tags 是用於計算哈希槽時的一個例外,是一種確保多個鍵分配到同一個哈希槽中的方法。這是為了在Redis集群中實現多鍵操作而使用的。為了實現hash tags,在某些情況下,會以稍微不同的方式計算key的哈希槽。如果key包含"{...}"模式,則僅對{和}之間的子字元串進行散列以獲取哈希槽。但由於可能存在多個{或}出現,因此該演算法遵循以下規則:

  • 如果key包含字元 {
  • 並且如果 } 字元位於 { 的右側
  • 並且在第一個 { 和第一個 } 之間存在一個或多個字元

對於符合上述規則的key,則不會對整個key進行散列處理,而只會對第一次出現 { 和隨後第一次出現 } 之間的內容進行散列。否則,對整個key進行散列處理。

 8.可能下線(PFail)與確定下線(Fail)

因為Redis Cluster 是去中心化的,一個節點認為某個節點失聯了並不代表所有的節點都認為它失聯了,所以集群還得經過一次協商,只有當大多數節點都認為某個節點失聯了,集群才認為該節點需要進行主從切換來容錯。

Redis集群節點採用Gossip協議來廣播自己的狀態以及改變對整個集群的認知。比如一個節點發現某個節點失聯了(PFail,即Possibly Fail),它會將這條信息向整個集群廣播,其它節點就可以收到這點的失聯信息。如果收到某個節點失聯的節點數量(PFail Count)已經達到了集群的大多數,就可以標記該失聯節點為確定下線狀態(Fail),然後向整個集群廣播,強迫其它節點也接受該節點已經下線的事實,並立刻對該節點進行主從切換。

9.網路抖動的容忍性

Redis Cluster 提供了一個選項配置 cluster-node-timeout,表示當某個節點持續timeout的時間失聯時,才可以認定該節點出現故障,需要進行主從切換。

另外還有一個選項 cluster-slave-validity-factor作為倍乘繫數放大這個超時時間來寬鬆容錯的緊急程度。如果這個繫數為零,那麼主從切換是不會抗拒網路抖動的。如果這個繫數大於1,它就成為了主從切換的鬆弛繫數。

 10.集群常用命令

info replication:返回關於 Redis 主從複製的詳細信息

cluster info:獲取 Redis 集群的狀態和統計信息

cluster nodes:獲取關於集群中所有節點的詳細信息。

cluster countkeysinslot <槽位數字編號>:該槽位是否被占用。1占用2未占用

cluster keyslot <keyname> 該key應該存放在哪個槽位上

cluster failover : 將當前redis的身份從slave變成master,原來的master變成slave

 

 

 

1.30張圖 講清楚Redis Cluster

https://cloud.tencent.com/developer/article/2226847

2.Redis cluster specification

https://redis.io/docs/latest/operate/oss_and_stack/reference/cluster-spec/

3.Redis Cluster 深入探究

https://zhuanlan.zhihu.com/p/198963336

4.【譯】Redis集群規範 (Redis Cluster Specification)

https://www.jianshu.com/p/8a2d810402a9

5.Redis-集群(cluster)

https://www.cnblogs.com/mingbo-1/p/17992458

6.Redis——集群(cluster)

https://www.cnblogs.com/caoweixiong/p/14242613.html

 


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

-Advertisement-
Play Games
更多相關文章
  • 目錄makefile 定義變數的方式1.遞歸定義2 直接定義3 條件定義方式4 追加變數值5 引用並修改變數值6 overrideVPATH用法:1 VPATH vpath各種規則1.隱式規則(Implicit Rules)2.靜態規則(Static Pattern Rules)3. 多目標規則(M ...
  • 瞭解更多關於bootloader 的C語言實現,請加我Q扣: 1273623966 (驗證信息請填 bootloader),歡迎咨詢或定製bootloader(線上升級程式)。 不知道為什麼,現在工業控制領域也向汽車領域學習,產品需要帶bootloader, 產品出貨後也要可以通過bootloade ...
  • 虛擬機添加磁碟與linux邏輯捲擴容 1.1 虛擬機添加磁碟 1.1.1. 檢查linux系統的磁碟分區及邏輯捲的相關信息是否正常 (1)cat /etc/redhat-release查看系統版本【適用於RHEL及CentOS】: 我已自己電腦上的虛擬機,50G記憶體2G運行記憶體為例 >>> (2)d ...
  • nslookup 是一個網路診斷工具,用於查詢功能變數名稱系統(DNS)記錄,將功能變數名稱解析為IP地址,或者查詢其他DNS記錄類型,如MX(郵件交換記錄)、CNAME(別名記錄)等。以下是一些常見Linux發行版安裝 及使用nslookup 的方法: Debian/Ubuntu 及其衍生版安裝 使用 apt 包 ...
  • 在學習Hadoop工具中的Flume時,有的小伙伴會遇到這句話: “Flume要想將數據輸出到HDFS,必須持有Hadoop相關jar包” 然後小伙伴就懵逼了,這些包要去什麼地方來找呢? (遠在天邊,近在眼前) 首先,我們需要的包有 commons-configuration-1.6.jar、 ha ...
  • 概述 explain 關鍵字可以模擬執行 sql 查詢語句,輸出執行計劃,分析查詢語句的執行性能 使用方式如下:explain + sql explain select * from t1 執行計劃各欄位含義 1. id 如果 id 序號相同,從上往下執行 如果 id 序號不同,序號大先執行 如果兩 ...
  • 在 MySQL 中,如果我們想查看實例當前正在執行的 SQL,常用的命令是SHOW PROCESSLIST。 但如果 SQL 過長的話,就會被截斷。這時,我們一般會用SHOW FULL PROCESSLIST來查看完整的 SQL。 最近碰到一個 case,發現無論是使用 SHOW PROCESSLI ...
  • 當前GaussDB(for MySQL)的Purge優化功能,通過任務流水線化、線程優先順序調整、二次分發等手段,避免資料庫undo log堆積,極大提升Purge的性能,大幅改善用戶體驗。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...