redis cluster與redis3.0.0同時發布,以此結束了redis無官方集群方案的時代,目前,redis已經發布了3.0.7版本。
redis cluster是去中心化,去中介軟體的,也就是說,集群中的每個節點都是平等的關係,都是對等的,每個節點都儲存各自的資料和整個集群的狀態。每個節點都和其他所有節點連線,而且這些連線保持活躍,這樣就保證了我們只需要連線集群中的任意乙個節點,就可以獲取到其他節點的資料。
那麼redis 是如何合理分配這些節點和資料的呢?
redis 集群沒有並使用傳統的一致性雜湊來分配資料,而是採用另外一種叫做雜湊槽 (hash slot)的方式來分配的。redis cluster 預設分配了 16384 個slot,當我們set乙個key 時,會用crc16演算法來取模得到所屬的slot,然後將這個key 分到雜湊槽區間的節點上,具體演算法就是:crc16(key) % 16384。
注意的是:必須要3個以後的主節點,否則在建立集群時會失敗,我們在後續會實踐到。
所以,我們假設現在有3個節點已經組成了集群,分別是:a, b, c 三個節點,它們可以是一台機器上的三個埠,也可以是三颱不同的伺服器。那麼,採用雜湊槽 (hash slot)的方式來分配16384個slot 的話,它們三個節點分別承擔的slot 區間是:
節點a覆蓋0-5460;
節點b覆蓋5461-10922;
節點c覆蓋10923-16383.
那麼,現在我想設定乙個key ,比如叫my_name:
set my_name wind
按照redis cluster的雜湊槽演算法:crc16(『my_name』)%16384 = 2412。 那麼就會把這個key 的儲存分配到 a 上了。
同樣,當我連線(a,b,c)任何乙個節點想獲取my_name這個key時,也會這樣的演算法,然後內部跳轉到b節點上獲取資料。
這種雜湊槽的分配方式有好也有壞,好處就是很清晰,比如我想新增乙個節點d,redis cluster的這種做法是從各個節點的前面各拿取一部分slot到d上,我會在接下來的實踐中實驗。大致就會變成這樣:
節點a覆蓋1365-5460
節點b覆蓋6827-10922
節點c覆蓋12288-16383
節點d覆蓋0-1364,5461-6826,10923-12287
同樣刪除乙個節點也是類似,移動完成後就可以刪除這個節點了。
redis cluster主從模式:
redis cluster 為了保證資料的高可用性,加入了主從模式,乙個主節點對應乙個或多個從節點,主節點提供資料訪問,從節點則是從主節點拉取資料備份,當這個主節點掛掉後,就會有這個從節點擊取乙個來充當主節點,從而保證集群不會掛掉。
上面那個例子裡, 集群有abc三個主節點, 如果這3個節點都沒有加入從節點,如果b掛掉了,我們就無法訪問整個集群了。a和c的slot也無法訪問。所以我們在集群建立的時候,一定要為每個主節點都新增了從節點, 比如像這樣, 集群包含主節點a、b、c, 以及從節點a1、b1、c1, 那麼即使b掛掉系統也可以繼續正確工作。
所以我們在集群建立的時候,一定要為每個主節點都新增了從節點, 比如像這樣, 集群包含主節點a、b、c, 以及從節點a1、b1、c1, 那麼即使b掛掉系統也可以繼續正確工作。
b1節點替代了b節點,所以redis集群將會選擇b1節點作為新的主節點,集群將會繼續正確地提供服務。 當b重新開啟後,它就會變成b1的從節點。
不過需要注意,如果節點b和b1同時掛了,redis集群就無法繼續正確地提供服務了。
集群的時候,我們可以單機集群也可以多機集群,後面我們分別實驗。
Redis系列 Redis集群搭建
在 usr local下建立redis資料夾 mkdir redis cd redis wget tar xzf redis 5.0.4.tar.gz cd redis 5.0.4 make prefix usr local redis install 將 redis trib.rb 複製到 usr...
redis(14) 集群的搭建
集群搭建 至少需要三個master 第一步 建立以乙個資料夾redis cluster,然後分別在下面建立6個資料夾 1 mkdir p usr local redis cluster 2 mkdir 7001 mkdir7002 mkdir 7003 mkdir 7004 mkdir 7005 m...
Redis學習 (14)Redis 事務
redis 事務可以一次執行多個命令,並且帶有以下兩個重要的保證 乙個事務從開始到執行會經歷以下三個階段 以下是乙個事務的例子,它先以multi開始乙個事務,然後將多個命令入隊到事務中,最後由exec命令觸發事務,一併執行事務中的所有命令 redis 127.0.0.1 6379 multi okr...