Redis5.0客户端redis-cli管理cluster尝试
Redis5.0发布了,其中更新了一个新的特性,把Redis的集群管理从Ruby(redis-trib.rb)移植到了C语言代码,直接使用redis-cli就可以管理集群,今天我们就尝试一下。
1、直接从官网下载最新的Redis5.0包,下载地址 Redis 5.0.0 is the latest stable version.,然后编译安装下。
2、创建三个文件夹 mkdir -p /data/redis/cluster/7000 mkdir -p /data/redis/cluster/7001 mkdir -p /data/redis/cluster/7002 把第一步编译好的文件,为了简单只需要把 redis.conf,redis-server,redis-cli 这三个文件copy到7000,7001,7002文件夹中。同时编辑各自的redis.conf文件,修改对应端口。 这些就作为cluster的三个节点。由于我们是为了演示使用redis-cli创建集群的过程,就直接三个master节点,不用对应的slave的节点了。
3、分别启动7000、7001、7002三个节点 cd /data/redis/cluster/7000 ./redis-server redis.conf
cd /data/redis/cluster/7001 ./redis-server redis.conf
cd /data/redis/cluster/7002 ./redis-server redis.conf
然后确认redis节点是否正常启动 [root@shdreams cluster]# ps -ef|grep redis root 30248 1 0 03:16 ? 00:00:00 ./redis-server 127.0.0.1:7000 [cluster] root 30255 1 0 03:18 ? 00:00:00 ./redis-server 127.0.0.1:7001 [cluster] root 30260 1 0 03:18 ? 00:00:00 ./redis-server 127.0.0.1:7002 [cluster]
4、接下来就是创建集群了,首先我们先看下 redis-cli 都提供了哪些操作集群的命令
[root@shdreams 7000]# ./redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN
--cluster-replicas
check host:port
info host:port
fix host:port
reshard host:port
--cluster-from
--cluster-to
--cluster-slots
--cluster-yes
--cluster-timeout
--cluster-pipeline
rebalance host:port
--cluster-weight
--cluster-use-empty-masters
--cluster-timeout
--cluster-simulate
--cluster-pipeline
--cluster-threshold
add-node new_host:new_port existing_host:existing_port
--cluster-slave
--cluster-master-id
del-node host:port node_id
call host:port command arg arg .. arg
set-timeout host:port milliseconds
import host:port
--cluster-from
--cluster-copy
--cluster-replacehelp
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
OK,我们就创建集群吧~ 我们键入命令 ./redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 回车就会出现如下信息
Performing hash slots allocation on 3 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 M: a7b511330bffe28357cd21d6ee543e59f0a38dea 127.0.0.1:7000 slots:[0-5460] (5461 slots) master M: a7ab1aa24c9030d1fb42bbac3ad72c15bf683ef4 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master M: 91d2903fa575b83b6dc9e6b7dac74c923e2882e9 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master Can I set the above configuration? (type 'yes' to accept):
这里是提示我们确认节点相关信息。 M表示master;后面一长字符串是节点的RunID,在一个redis集群中RunID是唯一的,启动的时候系统自动创建的,不需要人工干预;slots表示此节点分配的hash槽 这里,就直接键入 yes 就会创建集群了。
Nodes configuration updated Assign a different config epoch to each node Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join..
Performing Cluster Check (using node 127.0.0.1:7000)M: a7b511330bffe28357cd21d6ee543e59f0a38dea 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
M: 91d2903fa575b83b6dc9e6b7dac74c923e2882e9 127.0.0.1:7002
slots:[10923-16383] (5461 slots) master
M: a7ab1aa24c9030d1fb42bbac3ad72c15bf683ef4 127.0.0.1:7001
slots:[5461-10922] (5462 slots) master
[OK] All nodes agree about slots configuration.Check for open slots... Check slots coverage...[OK] All 16384 slots covered.
如果出现以上信息就表示集群创建OK了
5、验证下集群信息
我们进入集群 ./redis-cli -h 127.0.0.1 -p 7000 -c
127.0.0.1:7000> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:3 cluster_size:3 cluster_current_epoch:3 cluster_my_epoch:1 cluster_stats_messages_ping_sent:254 cluster_stats_messages_pong_sent:286 cluster_stats_messages_sent:540 cluster_stats_messages_ping_received:284 cluster_stats_messages_pong_received:254 cluster_stats_messages_meet_received:2 cluster_stats_messages_received:540
127.0.0.1:7000> cluster nodes 91d2903fa575b83b6dc9e6b7dac74c923e2882e9 127.0.0.1:7002@17002 master - 0 1539934393000 3 connected 10923-16383 a7ab1aa24c9030d1fb42bbac3ad72c15bf683ef4 127.0.0.1:7001@17001 master - 0 1539934393933 2 connected 5461-10922 a7b511330bffe28357cd21d6ee543e59f0a38dea 127.0.0.1:7000@17000 myself,master - 0 1539934390000 1 connected 0-5460
通过以上信息,确认目前reids集群是正常的。
6、尝试下redis-cli cluster的其他命令
把7000节点的10个slots移到7001节点上,键入命令如下, ./redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from a7b511330bffe28357cd21d6ee543e59f0a38dea --cluster-to a7ab1aa24c9030d1fb42bbac3ad72c15bf683ef4 --cluster-slots 10 --cluster-yes
Performing Cluster Check (using node 127.0.0.1:7000) M: a7b511330bffe28357cd21d6ee543e59f0a38dea 127.0.0.1:7000 slots:[0-5460] (5461 slots) master M: 91d2903fa575b83b6dc9e6b7dac74c923e2882e9 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master M: a7ab1aa24c9030d1fb42bbac3ad72c15bf683ef4 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master [OK] All nodes agree about slots configuration. Check for open slots... Check slots coverage... [OK] All 16384 slots covered.
Ready to move 10 slots.
Source nodes:
M: a7b511330bffe28357cd21d6ee543e59f0a38dea 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
Destination node:
M: a7ab1aa24c9030d1fb42bbac3ad72c15bf683ef4 127.0.0.1:7001
slots:[5461-10922] (5462 slots) master
Resharding plan:
Moving slot 0 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 1 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 2 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 3 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 4 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 5 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 6 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 7 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 8 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 9 from a7b511330bffe28357cd21d6ee543e59f0a38dea
Moving slot 0 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 1 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 2 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 3 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 4 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 5 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 6 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 7 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 8 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 9 from 127.0.0.1:7000 to 127.0.0.1:7001:以上显示已经移动成功了,我们可以再看下slots的分布情况
[root@shdreams 7000]# ./redis-cli -h 127.0.0.1 -p 7000 -c cluster nodes
91d2903fa575b83b6dc9e6b7dac74c923e2882e9 127.0.0.1:7002@17002 master - 0 1539934886013 3 connected 10923-16383
a7ab1aa24c9030d1fb42bbac3ad72c15bf683ef4 127.0.0.1:7001@17001 master - 0 1539934885011 4 connected 0-9 5461-10922
a7b511330bffe28357cd21d6ee543e59f0a38dea 127.0.0.1:7000@17000 myself,master - 0 1539934884000 1 connected 10-5460
发现slots已经转移了。当然我们也可以添加节点,删除节点试验,这里就不做了。 通过以上尝试,发现通过redis-cli来操作redis集群确实方便多了。
— 本文写于 2018 年 10 月 19 日,收录于《刘晓的博客》。转载请注明作者与出处。
评论 1
试着加个 password 创建试试看