Redis學習筆記——(四)Redis叢集調整
參考:http://www.mamicode.com/info-detail-1866955.html
3, 叢集管理
3.1 檢視叢集中機器ID,主從,及hash槽情況,可以檢視叢集中機器的情況
/usr/local/redis/bin/redis-trib.rb check IP:port
3.2 對資料重新分片:
/usr/local/redis/bin/redis-trib.rb reshard IP:port
3.3 列出叢集中的所有主節點
/usr/local/redis/bin/redis-cli -h IP -p port cluster nodes | grep master
3.4 讓某個主節點崩潰,測試故障轉移
/usr/local/redis/bin/redis-cli -h IP -p port debug segfault
3.5 增加主節點到叢集
/usr/local/redis/bin/redis-trib.rb add-node new-IP:new-port IP:port
new-IP:new-port是新節點,IP:port是一個已在叢集中的節點
需要注意的是此時新節點不能成為真正的主節點,需要進行重新分片才可以
/usr/local/redis/bin/redis-trib.rb reshard new-IP:new-port
1).自動分片程式會詢問移動幾個hash槽,如果要保證資料的均勻,此時應該是16384/N,
N代表包括當前主機的所有希望成為主節點的數量。
2).然後會詢問移動到哪個節點,輸入新的主節點的id即可。
3).會詢問從哪些節點移動資料,此時可以選擇某些節點的ID,也可以直接選擇all,從所有主節點,這樣資料就會均分。
3.6 增加從節點到叢集
/usr/local/redis/bin/redis-trib.rb add-node –slave new-IP:new-port IP:port
此時沒有指定從節點的主節點,一般會自動選擇一個,也可以指定主節點,如下:
/usr/local/redis/bin/redis-trib.rb add-node –slave –master-id 6b45acde96e4225856c8652089e8c8edeec00c79 new-IP:new-port IP:port
new-IP:new-port新加的節點,IP:port已在叢集中的節點
3.7 刪除一個節點(刪除後redis例項會被關閉)
1).從節點刪除:d598f4cf29cc4fea3616a00a0e707f71a7777cf1是指被刪除的redis的ID
/usr/local/redis/bin/redis-trib.rb del-node IP:port 56cfd4a0d4631fdf046c20acac7e5f1a0fce3b39
2).主節點刪除,此時應該確保主節點資料為空,如果不為空,需要將該節點的資料重新分片到其他節點上
被刪除的主節點,先進行資料遷移,到其他主節點上
/usr/local/redis/bin/redis-trib.rb reshard IP:port
/usr/local/redis/bin/redis-trib.rb del-node IP:port 791b834b1a5292bba236656c076849bb45a0ff17
3.8 叢集相關命令:
CLUSTER NODES :叢集資訊,包括了節點ID,主從關係
CLUSTER INFO:檢視叢集是否健康
CLUSTER MEET 將 ip 和 port 所指定的節點新增到叢集當中,讓它成為叢集的一份子。
CLUSTER FORGET 從叢集中移除 node_id 指定的節點。
CLUSTER REPLICATE 將當前節點設定為 node_id 指定的節點的從節點。
CLUSTER KEYSLOT 計算鍵 key 應該被放置在哪個槽上。
CLUSTER COUNTKEYSINSLOT 返回槽 slot 目前包含的鍵值對數量。
$ redis-cli -h IP -p port
CLUSTER NODES
4, FAQ
Error: /usr/bin/env: ruby: No such file or directory
Cause: redis-trib.rb 依賴 ruby
Fix: yum -y install ruby
Error: ./redis-trib.rb:24:in `require‘: no such file to load – rubygems (LoadError)
from ./redis-trib.rb:24
Cause: redis-trib.rb 依賴 rubygems
Fix: yum -y install rubygems
Error: usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in gem_original_require‘: no such file to load -- redis (LoadError)
require‘
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
from ./redis-trib.rb:25
Cause: 缺少redis和ruby的介面
Fix: gem install redis –version 3.0.0
Error: Node IP:port is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
Cause:
Fix: 用redis-cli登入到每個節點執行flushdb。
Error: CLUSTERDOWN Hash slot not served
Cause:
Fix: 用redis-cli登入到每個節點執行flushall和cluster reset。