个人博客


  • 这里并非使用原生方式来搭建集群。
  • Redis5.x版本使用redis-cli工具搭建集群,不再像Redis4.x版本使用Ruby搭建,会更方便一些。
  • 如果有特殊的搭建要求,则需要按照原始方式搭建,原生方式采用各个节点先meet再指派槽最后分配主从来完成集群的搭建。

1、各节点加入集群

  1. 3机6节点的主从拓扑,上下对应主从关系且主从节点错开在不同机器上。
1
2
172.16.122.101:6379(主) 172.16.122.102:6379(主) 172.16.122.103:6379(主)
172.16.122.102:6380(从) 172.16.122.103:6380(从) 172.16.122.101:6380(从)
  1. 在任意一台机器上执行以下命令,前3台为主机,后3台为从机,顺序一一对应。根据实际情况需要把ip地址和端口替换一下。--cluster-replicas 1参数表示主从节点是1:1关系。
1
/usr/local/redis/bin/redis-cli --cluster create 172.16.122.101:6379 172.16.122.102:6379 172.16.122.103:6379 172.16.122.102:6380 172.16.122.103:6380 172.16.122.101:6380 --cluster-replicas 1
  1. 手动确认yes
    -w571

然后会看到下图,表示搭建OK。原生方式的先meet再指派槽最后分配主从的3个步骤现在仅用一行命令就已经完成了。
Xnip2020-04-29_16-49-40

2、查看集群信息

  1. 进入客户端。
1
/usr/local/redis/bin/redis-cli -p 6379
  1. 查看集群信息,状态已经OK。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:7
cluster_my_epoch:7
cluster_stats_messages_ping_sent:11979
cluster_stats_messages_pong_sent:12091
cluster_stats_messages_sent:24070
cluster_stats_messages_ping_received:12091
cluster_stats_messages_pong_received:11832
cluster_stats_messages_received:23923
  1. 查看集群各节点信息,可以看到每个节点的主从关系以及槽点的分配。
    1
    2
    3
    4
    5
    6
    7
     127.0.0.1:6379> cluster nodes
    e1e369014d2ffd33f3548cc75d64789048a9b2bf 172.16.122.101:6379@16379 myself,master - 0 1588327299000 9 connected 0-5460
    642b908e7c225daf7fa606201b938507cd33393d 172.16.122.101:6380@16380 slave 1d1ffb6589d25040c3f5d2bbea7d6503dd6a39dc 0 1588327300414 6 connected
    7b639ed82eae9ee6e4b17dfd25b09be1604f280d 172.16.122.102:6380@16380 slave e1e369014d2ffd33f3548cc75d64789048a9b2bf 0 1588327299000 9 connected
    639af5949611f931584a7dfc72f8841ff09d9ffd 172.16.122.103:6380@16380 slave 85f496b8891263e334bd6a43816d4ea465fbe8cf 0 1588327300000 5 connected
    1d1ffb6589d25040c3f5d2bbea7d6503dd6a39dc 172.16.122.103:6379@16379 master - 0 1588327300000 3 connected 10923-16383
    85f496b8891263e334bd6a43816d4ea465fbe8cf 172.16.122.102:6379@16379 master - 0 1588327301419 2 connected 5461-10922

3、简单操作

  1. set key
1
2
127.0.0.1:6379> set hello world
(error) MOVED 866 172.16.122.101:6379
  • 可能成功也有可能会报错,报错是因为redis根据crc16算法算出存储该key的槽位不属于当前节点。exitquit命令退出客户端,我们需要以下命令重新进入客户端。(如果需要支持中文则要再加上--raw参数)
1
/usr/local/redis/bin/redis-cli -p 6379 -c
  • 再执行就OK了,并且会提示重定向到槽位所属的节点。
1
2
3
4
127.0.0.1:6379> set hello world
-> Redirected to slot [866] located at 172.16.122.101:6379
OK
172.16.122.101:6379>
  1. get key
1
2
172.16.122.101:6379> get hello
"world"
  1. del key
1
2
172.16.122.101:6379> del hello
(integer) 1

4、启停集群

  1. 关闭1台机器的所有实例。
1
pkill redis
  1. 挨个关闭1台机器的实例。
1
2
/usr/local/redis/bin/redis-cli -p 6379 shutdown
/usr/local/redis/bin/redis-cli -p 6380 shutdown
  1. 再次重启时不需要再搭起集群,redis会读取保留集群信息的文件恢复集群关系。
1
2
/usr/local/redis/nodes-6379.conf
/usr/local/redis/nodes-6380.conf

参考链接