redis cluster(redis叢集)是redis3.0之後的版本才支援的架構,和其他叢集一樣,redis叢集也是為了解決單台伺服器不夠用的情況。redis cluster是一個分布式的叢集方案,它支援橫向擴充。redis的叢集方案不單止官方的redis cluster,還有第三方的Codis叢集方案。Codis類似于LVS做負載均衡一樣,它用的是路由的技術。而官方的redis cluster則是把所有的節點都互聯,實作資料共享。
redis cluster叢集的特點:
多個redis節點網絡互聯,資料共享
所有的節點都是一主一從(可以是多個從),其中從不提供服務,僅作為備用
不支援同時處理多個鍵(如mset/mget),因為redis需要把鍵均勻分布在各個節點上,并發量很高的情況下同時建立鍵值會降低性能并導緻不可預測的行為。
支援線上增加、删除節點
用戶端可以連任何一個主節點進行讀寫

場景:
由于資源有限,是以隻使用兩台機器做這個實驗,兩台機器上分别開啟三個Redis服務(不同的端口)
A機器的IP:192.168.77.130
B機器的IP:192.168.77.128
A機器上三個端口7000,7002,7004,全部為主
B機器上三個端口7001,7003,7005,全部為從
redis版本:4.0.1
兩台機器的防火牆都是關閉的
兩台機器上都要編譯安裝redis,然後編輯并複制3個不同的redis.conf,分别設定不同的端口号、dir等參數,還需要增加cluster相關參數,然後分别啟動6個redis服務
配置檔案的内容可以在以下網址獲得:
<a href="https://coding.net/u/aminglinux/p/yuanke_centos7/git/tree/master/21NOSQL">https://coding.net/u/aminglinux/p/yuanke_centos7/git/tree/master/21NOSQL</a>
1.A機器上編輯配置檔案:
2.B機器上編輯配置檔案:
3.啟動A機器上的redis服務,并檢查程序和端口:
4.啟動B機器上的redis服務,并檢查程序和端口:
5.在A機器上安裝ruby2.2:
安裝好依賴:
下載下傳源碼包,并把源碼包打包成rpm包進行安裝:
6.拷貝可執行檔案(指令):
7.建立replicas:
列印了兩個OK表示叢集成功。
以叢集的方式登入redis,并建立一個key:
如果不加-c的話,隻會登入目标機器,操作的也隻是目标機器,而不會像叢集那樣重定向資料。任意一個節點都可以建立key,或者檢視key。
檢測叢集狀态:
cluster nodes指令可以列出節點:
cluster info指令可以檢視叢集資訊:
cluster meet ip port 指令可以添加節點,例如我現在在B機器上新增加了一個redis服務,端口為7006,現在我要把這個新增的redis服務加入到叢集節點中來:
可以看到7006成功添加到了節點中,身份是master。
使用以上方式添加的節點,都會是master身份,而 cluster replicate node_id 指令可以将目前節點設定為指定節點的從(slave):
可以看到成功把7006指定為 ef2f571de1d8d1bfa5d96acab297ad857c09d33c 這個節點的slave,這個節點對應的端口是7001。
cluster forget node_id 指令可以移除某個節點,例如我把7006移除掉:
要注意的是,這個指令不能移除master身份的節點,而且目前登入的節點(myself)也不能移除,隻能移除非目前登入的slave節點。如果想要移除master節點,隻能先把這個master指定為slave之後再移除。
cluster saveconfig指令可以把目前叢集的操作儲存到配置檔案裡: