redis學習五,redis集羣搭建及添加主從節點

redis集羣

在redis3.0之前,出現了sentinel工具來監控各個Master的狀態(可以看上一篇博客)。如果Master異常則會做主從切換。選舉一個slave作爲新的Master,3.0之後出現了集羣。集羣的搭建至少需要3個Master

在這裏我只在一臺裝有linux系統裝3個Master和3個slave作爲測試。

關注公衆號,我們一起學java
關注公衆號,我們一起學java

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節點成功

關注公衆號,我們一起學java
關注公衆號,我們一起學java

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章