12 redis cluster 集群暢談二

上一篇 redis cluster集群部署 , 主要講解 redis cluster 集群 搭建,本篇主要講解實驗多master寫入、讀寫分離、實驗自動故障切換(高可用性),下面直接開始吧。

上一篇我們搭建完了redis cluster 集群,下面進(jìn)行數(shù)據(jù)存儲測試

多master寫入 - 海量數(shù)據(jù)的分布式存儲

當(dāng)我們set 數(shù)據(jù)的時候會發(fā)現(xiàn)如下圖問題:

多master寫入數(shù)據(jù)問題

通過上圖發(fā)現(xiàn),當(dāng)插入key1、key2、key3 時報錯,它要求我們到相應(yīng)的master 節(jié)點去進(jìn)行寫入,沒錯,這就是多master寫入,以上就驗證了,實際的數(shù)據(jù)寫入是要到相應(yīng)的master 進(jìn)行操作的,每個master 都可以計算,然后將請求轉(zhuǎn)發(fā)至真正的操作節(jié)點進(jìn)行。

根據(jù)上圖redis 切換到 192.168.43.17:7003 進(jìn)行key1 1 的寫入,如下圖

move err

總結(jié):redis cluster寫入數(shù)據(jù)的時候,可以將請求發(fā)送到任意一個master上去執(zhí)行,但是每個 master 都會計算這個 key 對應(yīng)的 CRC16 值,然后對16384個 hashslot 取模,找到 key 對應(yīng)的 hashslot,根據(jù) hashslot 尋找對應(yīng)的master。如果對應(yīng)的master就在自己本地的話,set key4 4,key4 這個 key 對應(yīng)的 hashslot 就在自己本地,那么自己就進(jìn)行寫入了。但是如果計算出來的 hashslot 在其他 master 上,那么就會給客戶端返回一個 moved error,告訴你,你得到哪個 master 上去執(zhí)行這條寫入的命令。

多master的寫入保持每個master都可以進(jìn)行數(shù)據(jù)的寫入,每條數(shù)據(jù)只能存在于一個 master 和相應(yīng)的 slave 上,每條數(shù)據(jù)只能由對應(yīng)的 master 負(fù)責(zé)。

上面說了,每次寫入一條數(shù)據(jù),如果不在本地 master ,還需要手動切換到對應(yīng)的master 上去執(zhí)行,這就相當(dāng)麻煩了。能不能將手動的方式交給redis 自動切換執(zhí)行呢 ?

redis-cli -h 192.168.43.16 -p 7001 -c // -c 表示將數(shù)據(jù)寫入move err 手動切換的方式讓 redis 自身自動去做

move err redis 自動切換

上圖可以看出,redis 做了redirected 重定向,讀取數(shù)據(jù)也是一樣的。

slave數(shù)據(jù)讀取 - 讀寫分離

前面說過,redis cluster 支持讀寫分離,實際上這個概念在cluster 中已經(jīng)不是那么重要了,因為水平擴容(多master就已經(jīng)解決或者實現(xiàn)了 redis replication 主從架構(gòu) 一主多從的讀寫分離效果),我們在生產(chǎn)環(huán)境中都會發(fā)現(xiàn),直接使用 master 進(jìn)行讀寫了。當(dāng)然redis cluster 還是支持 slave 讀的(默認(rèn)是不支持slave節(jié)點讀,在讀的時候我們需要先執(zhí)行下 readonly,如下圖所示:

  • 先看下 192.168.43.16:7001 對應(yīng)的 slave 是啥
查看 info Replication 信息
  • 192.168.43.16:7002 slave 上讀取數(shù)據(jù)
slave 讀取 master 寫入的數(shù)據(jù)

上圖可以看出,redis cluster 默認(rèn)slave 也是不能讀的,如果要讀取,需要執(zhí)行 readonly,就可以了。

注意:在redis cluster的核心的理念里,slave 主要是用做高可用的,每個master掛一兩個slave,主要是做數(shù)據(jù)的熱備,還有master故障時的主備切換,實現(xiàn)高可用的。

自動故障切換 - 高可用性

查看集群信息

redis-trib.rb check 192.168.43.16:7001

下面我們來測試將 192.168.43.16:7001 master kill 掉,看看 192.168.43.16:7002 slave 是否自動切換為master,如下圖所示:

kill 前
kill 后
192.168.43.16:7001 重新啟動后,變?yōu)榱?slave

通過上圖可以看出,redis cluster 集群自身具備了redis repliction + sentinal 哨兵 的故障切換功能,從而實現(xiàn)了高可用性。

好了,本章 redis cluster 集群暢談二 就到這里。

以上就是本章內(nèi)容,如有不對的地方,請多多指教,謝謝!

為了方便有需要的人,本系列全部軟件都在 https://pan.baidu.com/s/1qYsJZfY

下章預(yù)告:主要講解 redis cluster 集群暢談三 之 水平擴容、slave自動化遷移

作者:逐暗者 (轉(zhuǎn)載請注明出處)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容