参考: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。