redis cluster概述
- redis cluster提供了多個master節(jié)點喇闸,數(shù)據(jù)可以存儲在多個master節(jié)點上可缚;
- 每個master都有一個slave,配置成讀寫分離
- 如果一個master發(fā)生故障匪蟀,就會自動將其slave切換成master
redis cluster的基本功能簡介
1提岔、多master寫入實現(xiàn)海量數(shù)據(jù)的分布式存儲
- 在redis cluster寫入數(shù)據(jù)的時候,其實是將請求發(fā)送到任意一個master上去執(zhí)行主巍。
- 每個master都需要計算這個key對應的CRC16值冠息,然后對16384個hashslot取模,從而找到該key對應的hashslot孕索,以及hashslot對應的master逛艰。
- 如果對應的master就在本服務器master上,執(zhí)行命令set mykey1 v1后搞旭,mykey1這個key對應的hashslot就在本服務器master上自己處理了散怖。
- 如果計算出來的hashslot在其他master上菇绵,那么就會給客戶端返回一個moved error,讓客戶端去其他master上去執(zhí)行這條命令镇眷。
多master寫入
多master寫入涉及分布式的數(shù)據(jù)存儲咬最,每條數(shù)據(jù)只能存在于一個master上,不同的master負責存儲不同的數(shù)據(jù)欠动。
如果100w條數(shù)據(jù)寫入到5個master永乌,那么每個master就只需負責存儲20w條數(shù)據(jù)。
redis cluster可以寫到任意master具伍,任意master計算key的hashslot以后翅雏,通知client重定向路由到其他mater去執(zhí)行,這就是分布式存儲的一個經(jīng)典的做法人芽。
多master讀寫分離
在redis cluster多master讀寫分離架構中望几,如果要在slave中 讀取數(shù)據(jù),那么需要readonly指令萤厅。
redis-cli -h 192.168.201.34 -p 7004
get mykey1
(error) MOVED 1860 192.168.201.33:7001
192.168.201.34:7004> readonly
OK
192.168.201.34:7004> get mykey1
"111"
redis-cli -c啟動橄妆,就會自動進行各種底層的重定向的操作
redis-cli -h 192.168.201.33 -p 7001 -c
192.168.201.33:7001> set mykey6 666
-> Redirected to slot [14243] located at 192.168.201.35:7005
OK
192.168.201.35:7005> get mykey6
"666"
redis cluster讀寫分離架構的限制性:
- 默認情況下,redis cluster核心理念就是用slave做高可用祈坠,每個master掛一兩個slave,主要負責數(shù)據(jù)的熱備矢劲,以及master故障時的主備切換赦拘;
- redis cluster默認不支持slave節(jié)點讀和寫的,這跟基于replication搭建的主從架構不一樣:
因此芬沉,在slave節(jié)點上設置readonly指令躺同,才能執(zhí)行get命令在slave node進行讀取丸逸; - redis cluster支持主從架構蹋艺,也可以做讀寫分離但是比較復雜。jedis客戶端對redis cluster的讀寫分離支持不是太好黄刚;
- 默認的話就是讀和寫都到master上去執(zhí)行捎谨;
- 如果jedis做redis cluster讀寫分離的處理,需要修改一下jedis的源碼:做一個redis cluster的讀寫分離的訪問api憔维。
總結
綜上所述涛救,redis cluster已經(jīng)沒有讀寫分離的概念:
- 首先,讀寫分離通過建立一主多從的架構业扒,橫向任意擴展slave節(jié)點去支撐高并發(fā)的讀吞吐量检吆;
- 但是在redis cluster的架構下,master節(jié)點是可以任意擴展的程储,如果要支撐更大的讀寫吞吐量蹭沛,只需要對master節(jié)點進行橫向擴展臂寝。