上一篇 redis cluster集群部署 洞就, 主要講解 redis cluster 集群 搭建夕膀,本篇主要講解實驗多master寫入功蜓、讀寫分離逝撬、實驗自動故障切換(高可用性)冷溃,下面直接開始吧钱磅。
上一篇我們搭建完了redis cluster 集群,下面進行數(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é)點去進行寫入褪迟,沒錯,這就是多master寫入答憔,以上就驗證了味赃,實際的數(shù)據(jù)寫入是要到相應(yīng)的master 進行操作的,每個master 都可以計算攀唯,然后將請求轉(zhuǎn)發(fā)至真正的操作節(jié)點進行洁桌。
根據(jù)上圖redis 切換到 192.168.43.17:7003 進行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 就在自己本地,那么自己就進行寫入了敢订。但是如果計算出來的 hashslot 在其他 master 上王污,那么就會給客戶端返回一個 moved error,告訴你楚午,你得到哪個 master 上去執(zhí)行這條寫入的命令昭齐。
多master的寫入保持每個master都可以進行數(shù)據(jù)的寫入,每條數(shù)據(jù)只能存在于一個 master 和相應(yīng)的 slave 上矾柜,每條數(shù)據(jù)只能由對應(yīng)的 master 負責(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 進行讀寫了咖城。當(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)載請注明出處)