說明:
Redis集群搭建完成之后,對于后續的操作和使用中進程需要對進群中的服務節點Node進行新增、刪除、修改之類的操作,以下記錄了在具體環境中對Node的處理:
# 1 ?節點配置管理
### 1.1 ?參數說明
創建集群的操作可以通過使用位于Redis安裝文件夾內的redis-trib.rb來完成,redis-trib.rb是使用ruby開發的Redis集群管理程序,具有創建集群,檢查集群的上線情況和槽指派情況、對集群進行重新分片、向集群添加新節點或者從集群中移除節點等功能;
redis-trib.rb參數:
[]( "復制代碼")
[root@node01src]$ **./redis-trib.rb**
Usage:redis-trib <command> <options> <arguments ...>
create????????? host1:port1 ... hostN:portN
???????????????? --replicas <arg>
check?????????? host:port
fix???????????? host:port
reshard???????? host:port
???????????????? --from <arg>
???????????????? --to <arg>
???????????????? --slots <arg>
???????????????? --yes
add-node??????? new_host:new_portexisting_host:existing_port
???????????????? --slave
???????????????? --master-id <arg>
del-node??????? host:port node_id
set-timeout???? host:port milliseconds
call??????????? host:port command arg arg .. arg
import????????? host:port
???????????????? --from <arg>
help??????????? (show this help)
[]( "復制代碼")
### 1.2??????主節點增加
./redis-trib.rb add-node 127.0.0.1:7006**127.0.0.1:7000**
可以看到.使用addnode命令來添加節點,第一個參數是新節點的地址,第二個參數是任意一個已經存在的節點的IP和端口.
我們可以看到新的節點已經添加到集群中:
新節點現在已經連接上了集群,成為集群的一份子,并且可以對客戶端的命令請求進行轉向了,但是和其他主節點相比,新節點還有兩點區別:
新節點沒有包含任何數據,因為它沒有包含任何哈希槽.
盡管新節點沒有包含任何哈希槽,但它仍然是一個主節點,所以在集群需要將某個從節點升級為新的主節點時,這個新節點不會被選中。.
接下來,只要使用redis-trib程序,將集群中的某些哈希桶移動到新節點里面,新節點就會成為真正的主節點了。
### 1.3從節點增加
有兩種方法添加從節點,可以像添加主節點一樣使用redis-trib命令,也可以像下面的例子一樣使用 --slave選項:
./redis-trib.rb add-node --slave 127.0.0.1:7006127.0.0.1:7000
此處的命令和添加一個主節點命令類似,此處并沒有指定添加的這個從節點的主節點,這種情況下系統會在其他的復制集中的主節點中隨機選取一個作為這個從節點的主節點。
你可以通過下面的命令指定主節點:
./redis-trib.rb add-node --slave --master-id3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000
也可以使用CLUSTERREPLICATE?命令添加.這個命令也可以改變一個從節點的主節點。
例如,要給主節點127.0.0.1:7005添加一個從節點,該節點哈希槽的范圍1423-16383,節點 ID 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e,我們需要鏈接新的節點(已經是空的主節點)并執行命令:
redis 127.0.0.1:7006> cluster replicate3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
我們新的從節點有了一些哈希槽,其他的節點也知道(過幾秒后會更新他們自己的配置),可以使用如下命令確認:
$ redis-cli -p 7000 cluster nodes | grep slave | grep3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
./redis-cli -h 172.168.63.202 -p 7000 cluster nodes |grep slave | grep e0d02d64b9c14db140daef9b4d2489bbde25fe42
f093c80dde814da99c5cf72a7dd01590792b783b 127.0.0.1:7006slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617702 3 connected
2938205e12de373867bf38f1ca29d31d0ddb3e46 127.0.0.1:7002slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617198 3 connected
節點 3c3a0c...有兩個從節點,7002 (已經存在的)和 7006 (新添加的).
### 1.4??????節點移除
只要使用redis-tribdel-node?命令即可:
./redis-trib del-node 127.0.0.1:7000 `<node-id>`
第一個參數是任意一個節點的地址,第二個節點是你想要移除的節點地址。
使用同樣的方法移除主節點,不過在移除主節點前,需要**確保這個主節點是空的**.如果不是空的,需要將這個節點的數據重新分片到其他主節點上.
替代移除主節點的方法是手動執行故障恢復,被移除的主節點會作為一個從節點存在,不過這種情況下不會減少集群節點的數量,也需要重新分片數據.
### 1.5??????從節點轉移
在Redis集群中會存在改變一個從節點的主節點的情況,需要執行如下命令 :
cluster replicate <new-master-node-id>
在特定的場景下,不需要系統管理員的協助下,自動將一個從節點從當前的主節點切換到另一個主節的自動重新配置的過程叫做復制遷移(從節點遷移),從節點的遷移能夠提高整個Redis集群的可用性.
### 1.6??????節點重新分片
重新分片操作基本上就是將某些節點上的哈希槽移動到另外一些節點上面,和創建集群一樣,重新分片也可以使用 redis-trib程序來執行。執行以下命令可以開始一次重新分片操作:
./redis-trib.rb reshard 127.0.0.1:7000
需要指定集群中其中一個節點的地址, redis-trib就會自動找到集群中的其他節點。
目前redis-trib只能在管理員的協助下完成重新分片的工作,要讓 redis-trib自動將哈希槽從一個節點移動到另一個節點,目前來說還做不到
How many slots do you want to move (from 1 to 16384)?
輸入:100
嘗試從將100個槽重新分片,除了移動的哈希槽數量之外, redis-trib還需要知道重新分片的目標,也即是,負責接收這 1000個哈希槽的節點。
What is the receivingnode ID?
輸入:e0d02d64b9c14db140daef9b4d2489bbde25fe42
我得目標節點是 e0d02d64b9c14db140daef9b4d2489bbde25fe42.
現在需要指定從哪寫節點來移動keys到目標借調我輸入的是all?,這樣就會從其他每個master上取一些哈希槽。
Do you want to proceedwith the proposed reshard plan (yes/no)?
輸入:**yes**
最后確認后你將會看到每個redis-trib移動的槽的信息,每個key的移動的信息也會打印出來
在重新分片的過程中,你得例子程序是不會受到影響的,你可以停止或者重新啟動多次。
在重新分片結束后你可以通過如下命令檢查集群狀態:
172.168.63.204:7001> cluster slots
