上一篇 redis cluster集群部署 , 主要講解 redis cluster 集群 搭建,本篇主要講解實驗多master寫入、讀寫分離、實驗自動故障切換(高可用性),下面直接開始吧。
上一篇我們搭建完了redis cluster 集群,下面進(jìn)行數(shù)據(jù)存儲測試
多master寫入 - 海量數(shù)據(jù)的分布式存儲
當(dāng)我們set 數(shù)據(jù)的時候會發(fā)現(xiàn)如下圖問題:

通過上圖發(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 的寫入,如下圖

總結(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 自身自動去做

上圖可以看出,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 是啥

- 192.168.43.16:7002 slave 上讀取數(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,如下圖所示:



通過上圖可以看出,redis cluster 集群自身具備了redis repliction + sentinal 哨兵 的故障切換功能,從而實現(xiàn)了高可用性。
好了,本章 redis cluster 集群暢談二 就到這里。
以上就是本章內(nèi)容,如有不對的地方,請多多指教,謝謝!
為了方便有需要的人,本系列全部軟件都在 https://pan.baidu.com/s/1qYsJZfY
下章預(yù)告:主要講解 redis cluster 集群暢談三 之 水平擴容、slave自動化遷移
作者:逐暗者 (轉(zhuǎn)載請注明出處)