偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Redis集群模式在擴(kuò)容情況下,如何處理客戶端的讀寫請求

數(shù)據(jù)庫 Redis
如果計算出來的槽位還在原先的節(jié)點上,那么源節(jié)點會直接返回數(shù)據(jù)給客戶端;如果源節(jié)點上的槽位已經(jīng)被遷移到新節(jié)點上,那么源節(jié)點會告訴客戶端去新節(jié)點上查詢數(shù)據(jù)。

Redis的高可用方案主要有三種模式,分別主從復(fù)制模式、哨兵模式和集群模式。那么在Redis集群模式下,集群在擴(kuò)容的時候如何處理客戶端的讀寫請求呢?如下所示的Redis的集群:

圖片圖片

    假設(shè)現(xiàn)在將集群中3個節(jié)點擴(kuò)充為4個節(jié)點,那么新加入1個節(jié)點后,節(jié)點的槽分布情況如下圖所示:

圖片圖片

1、集群擴(kuò)容的過程

    使用Redis的命令在Redis集群添加1個新的節(jié)點(假設(shè)為Node_3節(jié)點),如下圖所示:

圖片圖片

    新加入的Node_3節(jié)點由于還沒有分配槽位,所以Node_3節(jié)點不會處理任何請求,整個Redis集群的讀寫操作還是按照原先邏輯執(zhí)行,不會受到新加入節(jié)點的影響。那么新加入的節(jié)點分配槽位的過程如下所示:

    首先要從Node_2節(jié)點上遷移槽位到Node_3節(jié)點上,此時客戶端會發(fā)起migrating指令到Node_2節(jié)點上,如下如所示:

圖片圖片

    此時的Node_2節(jié)點就會處于遷出狀態(tài)(代表有槽位需要從這個節(jié)點上遷移出去),Node_3節(jié)點需要接收遷出的槽位,客戶端會發(fā)送importing命令到Node_3節(jié)點上,如下圖所示:

圖片圖片

    然后Node_2節(jié)點就可以將槽位12288遷移到Node_3節(jié)點上,通過這樣的步驟依次實現(xiàn)集群中所有的槽位遷移工作,最后的遷移結(jié)果如下圖所示:

圖片圖片

2、遷移過程中數(shù)據(jù)的查詢

(1)槽位還在原先的節(jié)點上

    當(dāng)客戶端發(fā)送請求(get longxia),假設(shè)通過CRC16計算出來其槽位是12288,那么就是去Node_2節(jié)點上查詢數(shù)據(jù),此時由于Node_2上的槽位還沒有被遷移出去,那么Node_2會返回對應(yīng)的數(shù)據(jù)給客戶端,如下如所示:

圖片圖片

(2)槽位遷移到新節(jié)點上

    當(dāng)客戶端發(fā)送請求(get longxia),假如其槽位是12288并且Node_2節(jié)點已經(jīng)將槽位12288遷移到了Node_3節(jié)點上了,如下圖所示:

圖片

    當(dāng)客戶端發(fā)起查詢請求的時候,Node_2節(jié)點由于將槽位12288遷移到新節(jié)點Node_3上了,所以Node_2會給客戶端返回臨時的ASK重定向響應(yīng)(也就是告訴客戶端去Node_3節(jié)點上查詢數(shù)據(jù)),客戶端接收到了臨時的ASK后就會發(fā)送請求去目標(biāo)節(jié)點上(Node_3節(jié)點)上查詢。

    客戶端會發(fā)起asking命令到Node_3節(jié)點上(asking命令是告訴Node_3節(jié)點接下來的命令是Node_2節(jié)點轉(zhuǎn)發(fā)的請求,必須要進(jìn)行處理,即使可能槽位暫時不屬于Node_3節(jié)點管理),當(dāng)Node_3節(jié)點收到asking命令之后,會響應(yīng)ok給客戶端。

    最后,客戶端會發(fā)起查詢的請求(get longxia)到Node_3節(jié)點上,Node_3節(jié)點處理請求并返回數(shù)據(jù)給客戶端。

    其實,當(dāng)槽位成功的遷移的新的節(jié)點上后,就會向集群中所有的節(jié)點發(fā)送一個遷移槽位數(shù)據(jù)成功的通知,目的就是后面要查詢(如槽位12288)槽位的數(shù)據(jù)就要去具體的節(jié)點上查詢(如Node_3節(jié)點),而不需要經(jīng)過原來的節(jié)點進(jìn)行重定向了。

    因此,即使在集群槽位遷移的過程中,Redis集群還是可以正常的提供服務(wù)。

總結(jié):

(1)Redis集群遷移中會將源節(jié)點置為遷移狀態(tài),然后將目標(biāo)節(jié)點置為遷移中狀態(tài),最后將槽位數(shù)據(jù)執(zhí)行遷移動作。

(2)遷移過程中,Redis的集群還是可以正常地提供服務(wù)。如果計算出來的槽位還在原先的節(jié)點上,那么源節(jié)點會直接返回數(shù)據(jù)給客戶端;如果源節(jié)點上的槽位已經(jīng)被遷移到新節(jié)點上,那么源節(jié)點會告訴客戶端去新節(jié)點上查詢數(shù)據(jù)。

責(zé)任編輯:武曉燕 來源: 龍蝦編程
相關(guān)推薦

2013-03-20 11:01:37

Redis客戶端連接

2025-01-09 10:20:53

2019-02-27 12:00:09

開源Org模式Emacs

2012-10-11 17:02:02

IBMdw

2023-11-23 23:52:06

options請求瀏覽器

2025-02-21 15:43:29

slotredis集群

2020-06-12 10:03:01

線程安全多線程

2009-03-04 10:27:50

客戶端組件桌面虛擬化Xendesktop

2021-06-22 15:06:13

Redis客戶端 Redis-clie

2011-08-17 16:50:54

2010-09-29 15:05:44

DHCP客戶端故障

2023-03-27 13:00:13

Javascript前端

2018-01-15 13:43:47

LinuxVmware硬盤

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2009-12-22 10:29:59

WCF客戶端處理

2020-12-24 17:10:54

DockerLinux微信

2010-05-31 15:55:42

2010-05-28 09:31:10

修改SVN密碼

2023-10-26 08:33:16

Redis管道技術(shù)

2020-11-24 12:10:22

瀏覽器前端斷網(wǎng)
點贊
收藏

51CTO技術(shù)棧公眾號