亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Redis > 正文

Redis Cluster集群數據分片機制原理

2020-10-28 21:28:00
字體:
來源:轉載
供稿:網友

Redis Cluster數據分片機制

Redis 集群簡介

Redis Cluster 是 Redis 的分布式解決方案,在 3.0 版本正式推出,有效地解決了 Redis 分布式方面的需求。

Redis Cluster 一般由多個節點組成,節點數量至少為 6 個才能保證組成完整高可用的集群,其中三個為主節點,三個為從節點。三個主節點會分配槽,處理客戶端的命令請求,而從節點可用在主節點故障后,頂替主節點。

如上圖所示,該集群中包含 6 個 Redis 節點,3主3從,分別為M1,M2,M3,S1,S2,S3。除了主從 Redis 節點之間進行數據復制外,所有 Redis 節點之間采用 Gossip 協議進行通信,交換維護節點元數據信息。

一般來說,主 Redis 節點會處理 Clients 的讀寫操作,而從節點只處理讀操作。

數據分片策略

分布式數據存儲方案中最為重要的一點就是數據分片,也就是所謂的 Sharding。

為了使得集群能夠水平擴展,首要解決的問題就是如何將整個數據集按照一定的規則分配到多個節點上,常用的數據分片的方法有:范圍分片,哈希分片,一致性哈希算法和虛擬哈希槽等。

范圍分片假設數據集是有序,將順序相臨近的數據放在一起,可以很好的支持遍歷操作。范圍分片的缺點是面對順序寫時,會存在熱點。比如日志類型的寫入,一般日志的順序都是和時間相關的,時間是單調遞增的,因此寫入的熱點永遠在最后一個分片。

對于關系型的數據庫,因為經常性的需要表掃描或者索引掃描,基本上都會使用范圍的分片策略。

Redis Cluster 采用虛擬哈希槽分區,所有的鍵根據哈希函數映射到 0 ~ 16383 整數槽內,計算公式:slot = CRC16(key) & 16383。每一個節點負責維護一部分槽以及槽所映射的鍵值數據。

Redis 虛擬槽分區的特點:

解耦數據和節點之間的關系,簡化了節點擴容和收縮難度。節點自身維護槽的映射關系,不需要客戶端或者代理服務維護槽分區元數據支持節點、槽和鍵之間的映射查詢,用于數據路由,在線集群伸縮等場景。

Redis 集群提供了靈活的節點擴容和收縮方案。在不影響集群對外服務的情況下,可以為集群添加節點進行擴容也可以下線部分節點進行縮容??梢哉f,槽是 Redis 集群管理數據的基本單位,集群伸縮就是槽和數據在節點之間的移動。

下面我們就先來看一下 Redis 集群伸縮的原理。然后再了解當 Redis 節點數據遷移過程中或者故障恢復時如何保證集群可用。

擴容集群

為了讓讀者更好的理解上線節點時的擴容操作,我們通過 Redis Cluster 的命令來模擬整個過程。

當一個 Redis 新節點運行并加入現有集群后,我們需要為其遷移槽和數據。首先要為新節點指定槽的遷移計劃,確保遷移后每個節點負責相似數量的槽,從而保證這些節點的數據均勻。

1) 首先啟動一個 Redis 節點,記為 M4。

2) 使用 cluster meet 命令,讓新 Redis 節點加入到集群中。新節點剛開始都是主節點狀態,由于沒有負責的>槽,所以不能接受任何讀寫操作,后續我們就給他遷移槽和填充數據。

3) 對 M4 節點發送 cluster setslot { slot } importing { sourceNodeId } 命令,讓目標節點準備導入槽的數據。

4) 對源節點,也就是 M1,M2,M3 節點發送 cluster setslot { slot } migrating { targetNodeId } 命令,讓源節>點準備遷出槽的數據。

5) 源節點執行 cluster getkeysinslot { slot } { count } 命令,獲取 count 個屬于槽 { slot } 的鍵,然后執行步驟>六的操作進行遷移鍵值數據。

6) 在源節點上執行 migrate { targetNodeIp} " " 0 { timeout } keys { key... } 命令,把獲取的鍵通過 pipeline 機制>批量遷移到目標節點,批量遷移版本的 migrate 命令在 Redis 3.0.6 以上版本提供。

7) 重復執行步驟 5 和步驟 6 直到槽下所有的鍵值數據遷移到目標節點。

8) 向集群內所有主節點發送 cluster setslot { slot } node { targetNodeId } 命令,通知槽分配給目標節點。為了>保證槽節點映射變更及時傳播,需要遍歷發送給所有主節點更新被遷移的槽執行新節點。

收縮集群

收縮節點就是將 Redis 節點下線,整個流程需要如下操作流程。

1) 首先需要確認下線節點是否有負責的槽,如果是,需要把槽遷移到其他節點,保證節點下線后整個集群槽節點映射的完整性。

2) 當下線節點不再負責槽或者本身是從節點時,就可以通知集群內其他節點忘記下線節點,當所有的節點忘記改節點后可以正常關閉。

下線節點需要將節點自己負責的槽遷移到其他節點,原理與之前節點擴容的遷移槽過程一致。

遷移完槽后,還需要通知集群內所有節點忘記下線的節點,也就是說讓其他節點不再與要下線的節點進行 Gossip 消息交換。

Redis 集群使用 cluster forget { downNodeId } 命令來講指定的節點加入到禁用列表中,在禁用列表內的節點不再發送 Gossip 消息。

客戶端路由

在集群模式下,Redis 節點接收任何鍵相關命令時首先計算鍵對應的槽,在根據槽找出所對應的節點,如果節點是自身,則處理鍵命令;否則回復 MOVED 重定向錯誤,通知客戶端請求正確的節點。這個過程稱為 MOVED 重定向。

需要注意的是 Redis 計算槽時并非只簡單的計算鍵值內容,當鍵值內容包括大括號時,則只計算括號內的內容。比如說,key 為 user:{10000}:books時,計算哈希值只計算10000。

MOVED 錯誤示例顯示的信息如下,鍵 x 所屬的哈希槽 3999 ,以及負責處理這個槽的節點的 IP 和端口號 127.0.0.1:6381 。 客戶端需要根據這個 IP 和端口號, 向所屬的節點重新發送一次 GET 命令請求。

<codeclass="hljs"></code>

由于請求重定向會增加 IO 開銷,這不是 Redis 集群高效的使用方式,而是要使用 Smart 集群客戶端。Smart 客戶端通過在內部維護 slot 到 Redis 節點的映射關系,本地就可以實現鍵到節點的查找,從而保證 IO 效率的最大化,而 MOVED 重定向負責協助客戶端更新映射關系。

Redis 集群支持在線遷移槽( slot ) 和數據來完成水平伸縮,當 slot 對應的數據從源節點到目標節點遷移過程中,客戶端需要做到智能遷移,保證鍵命令可正常執行。例如當 slot 數據從源節點遷移到目標節點時,期間可能出現一部分數據在源節點,而另一部分在目標節點。

所以,綜合上述情況,客戶端命令執行流程如下所示:

  • 客戶端根據本地 slot 緩存發送命令到源節點,如果存在鍵對應則直接執行并返回結果給客戶端。
  • 如果節點返回 MOVED 錯誤,更新本地的 slot 到 Redis 節點的映射關系,然后重新發起請求。
  • 如果數據正在遷移中,節點會回復 ASK 重定向異常。格式如下: ( error ) ASK { slot } { targetIP } : { targetPort }

客戶端從 ASK 重定向異常提取出目標節點信息,發送 asking 命令到目標節點打開客戶端連接標識,再執行鍵命令。

ASK 和 MOVED 雖然都是對客戶端的重定向控制,但是有著本質區別。ASK 重定向說明集群正在進行 slot 數據遷移,客戶端無法知道什么時候遷移完成,因此只能是臨時性的重定向,客戶端不會更新 slot 到 Redis 節點的映射緩存。但是 MOVED 重定向說明鍵對應的槽已經明確指定到新的節點,因此需要更新 slot 到 Redis 節點的映射緩存。

故障轉移

當 Redis 集群內少量節點出現故障時通過自動故障轉移保證集群可以正常對外提供服務。

當某一個 Redis 節點客觀下線時,Redis 集群會從其從節點中通過選主選出一個替代它,從而保證集群的高可用性。這塊內容并不是本文的核心內容,感興趣的同學可以自己學習。

但是,有一點要注意。默認情況下,當集群 16384 個槽任何一個沒有指派到節點時整個集群不可用。執行任何鍵命令返回 CLUSTERDOWN Hash slot not served 命令。當持有槽的主節點下線時,從故障發現到自動完成轉移期間整個集群是不可用狀態,對于大多數業務無法忍受這情況,因此建議將參數 cluster-require-full-coverage 配置為 no ,當主節點故障時只影響它負責槽的相關命令執行,不會影響其他主節點的可用性。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产高清久久久久久久久| 成人a级免费视频| 亚洲精品福利在线观看| 91av在线网站| 精品国产31久久久久久| 国产精品免费一区豆花| 日韩网站在线观看| 69视频在线播放| 美女久久久久久久| 国产日韩在线亚洲字幕中文| 日韩亚洲精品电影| 亚洲精品国产精品久久清纯直播| 亚洲成人精品久久久| 国产第一区电影| 亚洲一区二区三区毛片| 欧美老女人xx| 欧美高清电影在线看| 中文字幕日韩有码| 欧美专区在线播放| 91亚洲精品久久久| 国产综合色香蕉精品| 亚洲一区二区免费在线| 精品无人区太爽高潮在线播放| 欧美日韩高清在线观看| 亚洲国产精品久久久久秋霞不卡| 疯狂做受xxxx欧美肥白少妇| 日韩一区二区欧美| 日本精品视频在线观看| 国产精品福利无圣光在线一区| 精品一区二区三区四区在线| 亚洲成年网站在线观看| 成人黄色在线观看| 亚洲性猛交xxxxwww| 欧美日韩福利在线观看| 黑人狂躁日本妞一区二区三区| 亚洲aaa激情| 国产精品美女在线观看| 欧美视频一区二区三区…| 久久久噜久噜久久综合| 亚洲国产婷婷香蕉久久久久久| 亚洲图片欧洲图片av| 神马国产精品影院av| 欧美xxxx综合视频| 久久6精品影院| 欧美在线www| 亚洲影影院av| 97在线视频免费看| 亚洲国产小视频在线观看| 国产日韩欧美一二三区| 亚洲少妇激情视频| 国产z一区二区三区| 欧美小视频在线| 国产精品私拍pans大尺度在线| 欧亚精品在线观看| 国产手机视频精品| 久久艹在线视频| 国产成人免费av电影| 日本久久精品视频| 国产亚洲精品美女久久久久| 一级做a爰片久久毛片美女图片| 亚洲国产精品字幕| 伊人一区二区三区久久精品| 欧美一级视频免费在线观看| 国产精品6699| 美女福利精品视频| 欧美成人激情图片网| 久久久久久国产| 久久99国产精品久久久久久久久| 国内精品久久久| 欧美资源在线观看| 亚洲一区二区三区视频播放| 亚洲精选在线观看| 中文字幕日韩欧美在线视频| 欧美一级视频免费在线观看| 亚洲一区二区福利| 狠狠躁天天躁日日躁欧美| 曰本色欧美视频在线| 亚洲va久久久噜噜噜| 福利微拍一区二区| 韩国19禁主播vip福利视频| 亚洲成av人乱码色午夜| 欧美日韩精品国产| 中文字幕国产亚洲2019| 国产国产精品人在线视| 亚洲免费一在线| 5566日本婷婷色中文字幕97| 亚洲第一级黄色片| 午夜精品久久久久久99热软件| 中文字幕欧美精品日韩中文字幕| 国产视频999| 国内外成人免费激情在线视频网站| 日韩在线视频观看正片免费网站| 国外成人免费在线播放| 91高清免费在线观看| 欧美日韩国产精品一区二区不卡中文| 中文字幕亚洲一区二区三区五十路| 国产精品午夜一区二区欲梦| 精品五月天久久| 97国产精品视频人人做人人爱| 亚洲第一色中文字幕| 国产在线视频2019最新视频| 96sao精品视频在线观看| 亚洲国产精品久久91精品| 国产精品视频一| 91亚洲精品在线| 亚洲а∨天堂久久精品喷水| 国产精品欧美久久久| 精品视频一区在线视频| 国产精品亚洲第一区| 国产精品极品尤物在线观看| 国产精品日日做人人爱| 成人信息集中地欧美| 久久久99久久精品女同性| 久久久999国产精品| 亚洲综合小说区| 欧美性色视频在线| 中文字幕精品一区二区精品| 欧美日韩国产一区二区三区| 国产精品大陆在线观看| 中文字幕日韩av综合精品| 国产精品一区二区女厕厕| 精品中文字幕在线2019| 午夜剧场成人观在线视频免费观看| 国产精品久久久久影院日本| 亚洲精品久久在线| 亚洲国产精品999| 一区二区三区视频免费| 欧美在线精品免播放器视频| 亚洲国产一区自拍| 亚洲精品自拍偷拍| 国产日韩欧美在线看| 欧美寡妇偷汉性猛交| 亚洲美女福利视频网站| 久久香蕉频线观| 中日韩美女免费视频网址在线观看| 国产一区二区黑人欧美xxxx| 亚洲综合第一页| 亚洲欧美制服中文字幕| 在线日韩日本国产亚洲| 欧美电影在线观看完整版| 国产成人97精品免费看片| 久久久亚洲成人| 亚洲成人a级网| 中文字幕欧美日韩精品| 亚洲自拍另类欧美丝袜| 国产一区欧美二区三区| 国产精品视频自在线| 国产一区二区三区18| 日韩欧美视频一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 亚洲专区中文字幕| 国产在线精品播放| 日本人成精品视频在线| 国产欧美va欧美va香蕉在线| 亚洲精品成人免费| 68精品国产免费久久久久久婷婷| 亚洲深夜福利视频| 日韩精品极品视频| 欧美精品在线看| 亚洲激情国产精品| 国产精品欧美在线| 国产a∨精品一区二区三区不卡| 第一福利永久视频精品| 久久免费精品视频|