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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...