个人博客


  • 这里并非使用原生方式来搭建集群。
  • 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(从)
  2. 在任意一台机器上执行以下命令,前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
  3. 手动确认yes
    -w571

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

2、查看集群信息

  1. 进入客户端。

    1
    /usr/local/redis/bin/redis-cli -p 6379
  2. 查看集群信息,状态已经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
  3. 查看集群各节点信息,可以看到每个节点的主从关系以及槽点的分配。

    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>
  2. get key

    1
    2
    172.16.122.101:6379> get hello
    "world"
  3. del key

    1
    2
    172.16.122.101:6379> del hello
    (integer) 1

4、启停集群

  1. 关闭1台机器的所有实例。

    1
    pkill redis
  2. 挨个关闭1台机器的实例。

    1
    2
    /usr/local/redis/bin/redis-cli -p 6379 shutdown
    /usr/local/redis/bin/redis-cli -p 6380 shutdown
  3. 再次重启时不需要再搭起集群,redis会读取保留集群信息的文件恢复集群关系。

    1
    2
    /usr/local/redis/nodes-6379.conf
    /usr/local/redis/nodes-6380.conf

参考链接