天天看點

Redis叢集

Redis叢集

本次環境測試是一台ip為192.168.2.11的虛拟機

如果不清楚Redis的基礎知識,可以先浏覽 《Redis簡單介紹與安裝》

一、建立檔案夾,并拷貝執行個體

mkdir redis-cluster
cp -r redis01 redis02
cp -r redis01 redis03
cp -r redis01 redis04
cp -r redis01 redis05
cp -r redis01 redis06
           

二、修改配置檔案redis.cnf

vim redis.conf
port 6379              #端口唯一即可
cluster-enabled yes
cluster-config-file nodes.conf #檔案名唯一即可
cluster-node-timeout 5000
appendonly yes
每個執行個體都要修改
           

本次測試6個執行個體的基本配置如下:

執行個體名 端口 cluster-config-file名稱
redis01 6379 nodes-6379.conf
redis02 6380 nodes-6380.conf
redis03 6381 nodes-6381.conf
redis04 6382 nodes-6382.conf
redis05 6383 nodes-6383.conf
redis06 6384 nodes-6384.conf

三、擷取ruby腳本

在源碼目錄redis/src下找到redis-trib.rb并複制到步驟1建立的檔案夾中
           

四、執行ruby腳本

1) yum install ruby    #ruby運作環境
2) yum install rubygems #ruby管理器
3) gem install redis
4) 啟動所有的reid執行個體(可設定shell腳本統一啟動),腳本截圖如下:
           
Redis叢集
5) ./redis-trib.rb create --replicas 1 ip:port1 ip:port2 ... ip:port6

本次測試執行指令:
./redis-trib.rb create --replicas 1 192.168.2.11:6379 192.168.2.11:6380 192.168.2.11:6381 192.168.2.11:6382 192.168.2.11:6383 192.168.2.11:6384
           
Redis叢集

五、測試

redis01/bin/redis-cli  -h 192.168.2.11 -p 6379 
           
Redis叢集
截圖中看到,在端口為6379的執行個體中無法執行插入的操作,這是因為username的hash資訊在6381上,當我們登陸到端口為6381的執行個體上時,可以正常設定資料。既然是叢集,不管在哪個執行個體上都應該可以設定資料。是以,為了實作這個目的,我們應該在通過用戶端連接配接執行個體的時候,設定重定向配置 -c 。
本次測試執行指令:
redis01/bin/redis-cli  -h 192.168.2.11 -p 6379 -c
           
Redis叢集

六、新增叢集節點

根據步驟1和2配置新的redis執行個體,并啟動
./redis-trib.rb add-node ip:port(新增節點) ip:port(叢集中任意節點)

本次測試執行指令:
./redis-trib.rb add-node 192.168.2.11:6385 192.168.2.11:6379
           
Redis叢集
Redis叢集
如果在執行指令時,報錯:
[ERR] Node 192.168.2.11:6385 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解決:
先删除nodes-6385.conf檔案,再連接配接上192.168.2.11:6385執行個體,鍵入flushdb清空資料庫,再執行新增節點的指令。
           

七、添加插槽數

如果新增的叢集節點為主節點且該主節點的插槽數為0,需要設定插槽數來儲存資料。
本次測試過程中,由于在上一步的操作中,新增的節點都是從節點,是以沒法模拟該步驟的操作,以下是執行的指令

./redis-trib reshard 192.168.2.11:6379 #從192.168.2.11:6379主節點中配置設定插槽數

執行後會提示需要輸入配置設定的插槽數,接收插槽數的節點ID,輸入完畢後再輸入all,回車,redis叢集會重新配置設定所有主節點的插槽數
           

八、删除叢集節點

1.将需要删除的節點上的所有插槽轉移到其他節點上

假設我們要删除192.168.2.11:6379主節點,執行指令:

./redis-trib reshard 192.168.2.11:6379 #和配置設定插槽數的指令一樣

執行後提示需要輸入配置設定的插槽數(由于要删除該節點,輸入該節點插槽數的最大值即可),接收插槽數的節點ID,輸入完成後再輸入done,即可全部轉移插槽數。
           

2.使用redis-trib.rb删除節點

./redis-trib.rb del-node ip:port 節點ID
即  ./redis-trib.rb del-node 192.168.2.11:6379 2b333babc81e70c0c79efa1cacef7d0203baaf3f
           

這兩步必須嚴格執行,否則資料會丢失!