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腳本統一啟動),腳本截圖如下:
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
五、測試
redis01/bin/redis-cli -h 192.168.2.11 -p 6379
截圖中看到,在端口為6379的執行個體中無法執行插入的操作,這是因為username的hash資訊在6381上,當我們登陸到端口為6381的執行個體上時,可以正常設定資料。既然是叢集,不管在哪個執行個體上都應該可以設定資料。是以,為了實作這個目的,我們應該在通過用戶端連接配接執行個體的時候,設定重定向配置 -c 。
本次測試執行指令:
redis01/bin/redis-cli -h 192.168.2.11 -p 6379 -c
六、新增叢集節點
根據步驟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
如果在執行指令時,報錯:
[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