redis集群
在redis3.0之前,出現了sentinel工具來監控各個Master的狀態(可以看上一篇博客)。如果Master異常則會做主從切換。選舉一個slave作為新的Master,3.0之后出現了集群。集群的搭建至少需要3個Master
在這里我只在一台裝有linux系統裝3個Master和3個slave作為測試。
linux主機的ip為192.168.1.229
第一步
1.下載redis安裝包解壓並安裝到linux系統中。
第二步
2.創建redis集群文件夾,用於存放6個redis集群的文件
mkdir /usr/local/redis-cluster
mkdir 7001 ,mkdir 7002,mkdir 7003,mkdir 7004,mkdir 7005,mkdir 7006
創建好上面的6個文件夾。
第三步
3將redis的redis-conf這個文件夾使用cp命令copy到每一個redis文件夾中
然后分別修改每一個700*文件夾中redis-conf文件。
(1)daemonize yes 說明:開啟redis的后台啟動
(2)port 7001到7006 說明:更改6個文件夾中的redis.conf文件的每一個端口號。
(3)bind 192.168.1.229 700*(*代表對應的1到6)說明:綁定每一個redis的機器的ip和端口號(根據自己的機器ip對應修改)。
(4)dir /usr/local/redis-cluster/700*/ 指定數據文件存放的位置,每個redis對應自己的文件夾就好。每個redis必須指定不同的文件夾位置,不然會丟失數據。
(5)cluster-enabled yes 說明:啟動集群模式。
(6)cluster-conf-file nodes700*.conf 說明:集群配置文件,最好分別命名為自己的端口號,方便以后查看。
(7)cluster-node-timeout 5000 說明:集群的生效時間
(8)appendonly yes 說明:開啟aof模式。
把6個文件夾中每個文件夾中的文件都做相對應的修改之后。
第四步
4.由於redis集群需要使用ruby命令,所以我們需要在linux中安裝ruby。
(1)yum install ruby
(2)yum install rubygems
(3)gem install redis (安裝redis和ruby的接口)
第五步
5.分別啟動6個redis實例,然后檢查是否啟動成功
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7001/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7002/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7003/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7004/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7005/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7006/redis.conf
都啟動后用ps -ef | grep redis檢查是否6個redis實例都啟動成功

出現上面的提示證明所以實例都啟動成功了。但是這一步成功只能說明我們redis的配置是沒問題的,然是我們還沒有把這6個redis實例設置成一個集群
6.創建集群
到redis3.0安裝目錄下找到src文件夾,然后執行redis-trib.rb命令
redis-trib.rb create --replicas 1 192.168.1.229:7001 192.168.1.229:7002 192.168.1.229:7003 192.168.1.229:7004 192.168.1.229:7005 192.168.1.229:7006
這個命令就代表把這些個redis實例創建為一個集群 上面命令中的1代表主節點和從節點的比值是多少,如果12個主節點,6個從節點那么我們的比值就是2,那么我們是3主3從,所以這個比值是1,而且前三個一定是主節點,redis就是這樣規定的。
執行這個命令后,會出現個提示問你是否確定創建集群。我們直接輸入yes,我們的集群環境就搭建好了。
7.測試集群,登錄到集群的客戶端
/usr/local/redis/bin/redis-cli -c -h 192.168.1.229 -p 7001 c代表集群模式 h代表地址 p代表端口號
我們進入客戶端之后,查看下集群信息cluster nodes

這樣就說明我們的集群已經搭建好了
我們發現上面的信息中說7001,7002,7003分別為master 而且都有對應的hash槽。
此時我們在集群的任何一個客戶端中進行set,然后在其他的客戶端中都可以get到。
redis集群添加一個新的主從節點7007為主7008為從
我們同樣在redis-cluster文件夾下葯創建7007和7008文件夾,同樣要把redis.conf文件copy過去並且像上面一樣修改對應參數。
然后分別啟動這兩個實例,然后啟動7007和7008,但是此時7007和7008雖然啟動了,但是是不屬於我們集群里面的。
同樣適用redis安裝文件夾下src文件夾下的redis-trib.rb這個命令。
redis-trib.rb add-node 192.168.1.229:7007 192.168.1.229:7001前面的ip和端口號為新添加的節點,后面的為集群中任意一個節點。
此時我們就把7007這個新的節點加入到了集群中,但是此時7007作為一個Master還沒有分配hash槽,我們還要為他分配hash槽。
redis-trib.rb reshard 192.168.1.229:7001 這個命令的意思是未7007分配hash槽 這個ip要是集群中任意一個主節點的ip和端口。
然后出現一堆提示之后會讓你選擇添加的槽數,
填寫你想添加的槽數然后回車。
然后會讓你輸入想要被分配槽的節點的id
選擇分配槽的方式是all還是done,我們選擇all
分配成功
redis-trib.rb add-node 192.168.1.229:7008 192.168.1.229:7001同樣把7008添加到集群中。
7008為7007的從節點
我們需要登錄到redis集群客戶端
/usr/local/redis/bin/redis-cli -c -h 192.168.1.229 -p 7001
cluster replicate 7007的id 意思就是把7008添加為7007的從節點。
從集群中刪除主節點和從節點
最后我們嘗試刪除剛剛添加的主節點7007和從節點7008
刪除主節點會相對麻煩一些,因為我們需要把刪除主節點的hash槽分配到其他節點中去!然后再進行移除節點操作
redis-trib.rb reshard 192.168.1.229:7007 我們直接使用這個命令即可
提示填寫你移動的槽的個數。
提示輸入要移動到的節點的id,輸入一個7003的id
選擇分配槽的方式是all還是done,我們選擇done
最后刪除redis-trib.rb del-node 192.168.1.229:7007 7007的id
redis-trib.rb del-node 192.168.1.229:7008 7008的id
刪除7007和7008節點成功