redis集群模式

1.redis群集

redis集群是一个提供在多个redis键节点间共享数据的程序集,redis集群并不支持多个keys的命令,因为这需要不用的节点间移动数据,从而达不到像redis那样的性能,在高负载的情况下可能导致不可预料的错误,redis集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或不可达的情况下继续处理命令。

2.redis集群的优势和实现方法

  • redis集群的优势
  1. 自动分割数据到不同节点上
  2. 整个集群的部分节点失败或者不可达的情况能够继续处理命令
  • redis集群的实现方法
  1. 有客户端分片
  2. 代理分片
  3. 服务器端分片

3.redis三种模式

3.1主从复制

通过持久化功能,redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中的数据保存到硬盘上,重启会从硬盘上加载数据,但是由于数据是存儲在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。
为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务,为此, redis提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上。
在复制的概念中,数据库分为两类,一类是主数据库(master) ,另一类是从数据(slave) 。主数据可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库,而从数据库一般是只读的,并接受主数据同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。

3.1.1主从复制流程

  • 启动slave进程,它会向master机器发送一个“sync command”命令,请求同步连接
  • master会启动一个后台进程,无论是第一次连接还是重新连接,将数据快照(RDB)保存到数据文件中(执行RDB操作),同时master还会记录修改数据的所有命令,并缓存在数据文件中
  • 后台进程完成缓存操作后,master机器就会向slave机器发送数据文件,slave端机器将数据文件保存在硬盘上,然后将其加载到内存中,接着master机器就会将修改数据的所有操作一并发送给slave端机器。若slave出现故障导致宕机,则恢复正常后会自动重新连接
  • master机器收到slave端机器的连接后,将其完整的数据文件发送给slave端机器,如果master同时收到多个slave发来的同步请求,则master会在后台启动一个进程以保存数据文件,然后将其发送给所有的slave端机器,确保所有的slave端机器都正常工作

3.2哨兵模式

  • redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障需要人为干预的问题

3.2.1哨兵模式主要功能

  • 集群监控:负责监控redismster和slave进程是否正常工作
  • 消息通知:如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员
  • 故障转移:如果master节点挂了,会自动转移到slave节点上
  • 配置中心:如果故障转移发生了,通知客户端新的master地址

3.2.2哨兵监控整个系统节点过程

在这里插入图片描述

  • 主节点的信息是配置在哨兵的配置文件中
  • 哨兵节点会和配置的主节点建立起两条连接命令连接和订阅连接
  • 哨兵会通过命令连接每10s发送一次INFO命令,通过INFO命令,主节点会返回自己的run_id 和自己的从节点信息
  • 哨兵会对这些从节点也建立两条连接命令连接和订阅连接
  • 哨兵通过命令连接向从节点发送INFO命令,获取到他的一些信息:run_id(redis服务器id),role(职能),从服务器的复制偏移量 offset
  • 通过命令连接向服务器的 _sentinel:hello 频道发送一条消息,包括自己的ip端口、run_id、配置(后续投票的时候会用到)等
  • 通过订阅连接对服务器的 _sentinel:hello 频道做监听,所以所有的向该频道发送的哨兵消息都能被接收到
  • 解析监听到的消息,进行分析提取,就可以知道还有哪些别的哨兵服务节点也在监听这些主从节点了,更新结构体将这些哨兵节点记录下来
  • 向观察到的其他的哨兵节点建立命令连接

3.3哨兵模式下的故障迁移

3.3.1主观下线

哨兵节点会每秒一次的频率向建立了命令节点的实例发送ping命令,如果在 down-after-milliseconds 毫秒内没有做出有效响应包括(pong/loading/masterdown)以外的响应,哨兵就会将该实例在本结构体中的状态标记为 sri_s_down 主观下线

3.3.2客观下线

当一个哨兵节点发现主节点处于主观下线状态时,就会向其他的哨兵节点发出询问,该节点是否已经主观下线。如果超过配置参数 quorum 个节点认为是主观下线时,该哨兵节点就会将自己维护的结构体中该主节点标记为 sri_o_down 客观下线

3.3.3master 选举

在认为主节点客观下线的情况下,哨兵节点间会发起一次选举,命令为: SENTINEL is-master-down-by-addr,只是 run_id 这次会将自己的 run_id 带进去,希望接受者将自己设置为主节点。如果超过半数以上的节点返回将该节点标记为 leader 的情况下,会有该 leader 对故障进行迁移

3.3.4故障迁移

  • 在从节点中挑选出新的从节点
    通讯正常
    优先级排序
    优先级相同时选择offset最大的
  • 将该节点设置成新的主节点 slaveof no one ,并确保在后续的 INGO 命令时,该节点返回状态为 master
  • 将其他的从节点设置成从新的主节点服务,slaveof 命令
  • 将旧的主节点变成新的主节点的从节点

3.4Cluster群集

redis的哨兵模式基本已经可以实现高可用、读写分离,但是在这种模式,每台redis服务器都存储相同的数据,很浪费内存资源,所以加入了 Cluster 群集模式,实现了redis的分布式存储,也就是说,每台redis节点存储着不同的内容,Cluster 群集由多个redis服务器组成的分布式网络服务群集,群集中有多个master主节点,每个主节点都可读可写,节点之间会互相通信,两两相连,redis群集无中心节点。

  • 在 redis-Cluster 群集中,可以给每个主节点添加从节点,主节点和从节点直接遵循主从模型的特性,当用户需要处理更多读请求的时候,添加从节点可以扩展系统的读性能
  • redis-Cluster 的故障转移:redis群集的主节点内置了类似 redis sentinel 的节点故障检测和自动故障转移功能,当群集中的某个主节点下线时,群集中的其他在线主节点会注意到这点,并且对已经下线的主节点进行故障转移
  • 群集进行故障转移的方法和 redis sentinel 进行故障转移的方法基本一样,不同的是,在集群里面,故障转移是由集群中其他在线的主节点复制进行的,所以群集不必另外使用 redis sentinel

4.主从复制配置

  • 需求
master192.168.20.11
slave1192.168.20.22
slave2192.168.20.33

且三台都需要安装redis

  • master
[root@localhost utils]# vim /etc/redis/6379.conf 
  • 修改监听地址
    在这里插入图片描述
  • 开启守护进程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
[root@localhost utils]# /etc/init.d/redis_6379 restart     //重启
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...

  • slave1、slave2
[root@localhost utils]# vim /etc/redis/6379.conf 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 开启守护进程
    在这里插入图片描述
[root@localhost utils]# /etc/init.d/redis_6379 restart     //重启
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...

  • master
    执行实时查看日志命令,并从其两个slave节点
[root@localhost utils]# tail -f /var/log/redis_6379.log      

在这里插入图片描述

[root@localhost utils]# redis-cli info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.20.22,port=6379,state=online,offset=336,lag=1
slave1:ip=192.168.20.33,port=6379,state=online,offset=336,lag=1
master_replid:84fcd30bbbfcb33b3d5966d3dbc7b75625bbe252
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:336
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:336

  • 验证
  • master
[root@localhost utils]# redis-cli        //在master上创建键、字段
127.0.0.1:6379> set wo xx
OK

  • slave1
[root@localhost utils]# redis-cli
127.0.0.1:6379> keys *
1) "wo"

  • slave2
[root@localhost utils]# redis-cli
127.0.0.1:6379> keys *
1) "wo"

5.搭建哨兵

上文中提到哨兵基于主从,那么依然需要三台redis并配置好主从

  • 所有的节点都需要配置
[root@localhost ~]# vim /opt/redis-5.0.7/sentinel.conf     //哨兵的配置文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@localhost redis-5.0.7]# redis-sentinel sentinel.conf &      //启动哨兵先启动master,再启动slave
[1] 77639
[root@localhost redis-5.0.7]# redis-cli -p 26379 info sentinel     //查看哨兵信息
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.20.11:6379,slaves=2,sentinels=3      //可以看到,一个mymaster的ip,有两个slve,和三个哨兵

  • 验证
    给master再开一个终端2
[root@localhost ~]# watch -n 1 redis-cli -p 26379 info sentinel    //再开启一个终端,实时查看sentinel

在master终端1中查看并杀死redis主进程

[root@localhost redis-5.0.7]# netstat -natp | grep redis                //得知进程号为77192
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      77639/redis-sentine 
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      77192/redis-server  
tcp        0      0 192.168.20.11:6379      192.168.20.33:33196     ESTABLISHED 77192/redis-server  
tcp        0      0 192.168.20.11:6379      192.168.20.22:36554     ESTABLISHED 77192/redis-server  
tcp        0      0 192.168.20.11:6379      192.168.20.11:48450     ESTABLISHED 77192/redis-server  
tcp        0      0 192.168.20.11:6379      192.168.20.33:33198     ESTABLISHED 77192/redis-server  
tcp        0      0 192.168.20.11:26379     192.168.20.22:46540     ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:42394     192.168.20.33:6379      ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:38004     192.168.20.33:26379     ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:60322     192.168.20.22:6379      ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:6379      192.168.20.11:48448     ESTABLISHED 77192/redis-server  
tcp        0      0 192.168.20.11:33974     192.168.20.22:26379     ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:26379     192.168.20.33:52034     ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:6379      192.168.20.22:43547     ESTABLISHED 77192/redis-server  
tcp        0      0 192.168.20.11:48450     192.168.20.11:6379      ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:6379      192.168.20.22:36552     ESTABLISHED 77192/redis-server  
tcp        0      0 192.168.20.11:48448     192.168.20.11:6379      ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:42392     192.168.20.33:6379      ESTABLISHED 77639/redis-sentine 
tcp        0      0 192.168.20.11:6379      192.168.20.33:34880     ESTABLISHED 77192/redis-server  
tcp        0      0 192.168.20.11:60324     192.168.20.22:6379      ESTABLISHED 77639/redis-sentine 
tcp6       0      0 :::26379                :::*                    LISTEN      77639/redis-sentine 
[root@localhost redis-5.0.7]# kill -9 77192       //杀死
[root@localhost redis-5.0.7]# tail -f /var/log/sentinel.log 

在这里插入图片描述

在mster终端2中查看变化
在这里插入图片描述

6.cluster集群

因为一些硬件原因(其实就是本人电脑辣鸡),这里本来想要6台搞一下,但是想想电脑几斤几两,罢了,简便一点吧
在这里插入图片描述

  • 节点端口号
600160026003
600460056006
[root@localhost redis]# mkdir -p redis-cluster/redis600{1..6}    //递归创建6个工作目录
[root@localhost redis]# ls
6379.conf  redis-cluster
[root@localhost redis]# cd redis-cluster/
[root@localhost redis-cluster]# ls
redis6001  redis6002  redis6003  redis6004  redis6005  redis6006
[root@localhost opt]# vim /opt/redis.sh
#!/bin/bash
#将主配置文件和启动命令、启动脚本复制到6个文件下
for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done

[root@localhost opt]# sh -x /opt/redis.sh 
+ for i in '{1..6}'
+ cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6001
+ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6001
+ for i in '{1..6}'
+ cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6002
+ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6002
+ for i in '{1..6}'
+ cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6003
+ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6003
+ for i in '{1..6}'
+ cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6004
+ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6004
+ for i in '{1..6}'
+ cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6005
+ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6005
+ for i in '{1..6}'
+ cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6006
+ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6006
[root@localhost opt]# cd /etc/redis/redis-cluster/     //验证
[root@localhost redis-cluster]# ls
redis6001  redis6002  redis6003  redis6004  redis6005  redis6006
[root@localhost redis-cluster]# cd redis6001
[root@localhost redis6001]# ls
redis-cli  redis.conf  redis-server
[root@localhost redis6001]# cd /etc/redis/redis-cluster/redis6001
[root@localhost redis6001]# vim redis.conf 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 复制配置到redis6002、6003、6004、6005、6006
[root@localhost redis6001]# cp redis.conf ../redis6002/
cp:是否覆盖"../redis6002/redis.conf"? y
[root@localhost redis6001]# cp redis.conf ../redis6003/
cp:是否覆盖"../redis6003/redis.conf"? y
[root@localhost redis6001]# cp redis.conf ../redis6004/
cp:是否覆盖"../redis6004/redis.conf"? y
[root@localhost redis6001]# cp redis.conf ../redis6005/
cp:是否覆盖"../redis6005/redis.conf"? y
[root@localhost redis6001]# cp redis.conf ../redis6006/
cp:是否覆盖"../redis6006/redis.conf"? y

然后依次在另外五个redis600*中变更端口为对应端口例如将redis6002中的两个需要改端口的地方改为6002
在这里插入图片描述
在这里插入图片描述

  • 编写脚本根据对应文件启动redis
[root@localhost redis6001]# vim /opt/redis_start.sh
#!/bin/bash
for a in {1..6}
do
cd /etc/redis/redis-cluster/redis600$a
redis-server redis.conf
done
[root@localhost redis6001]# sh -x /opt/redis_start.sh //执行脚本
+ for a in '{1..6}'
+ cd /etc/redis/redis-cluster/redis6001
+ redis-server redis.conf
77530:C 09 Aug 2021 22:20:20.670 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
77530:C 09 Aug 2021 22:20:20.670 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=77530, just started
77530:C 09 Aug 2021 22:20:20.670 # Configuration loaded
+ for a in '{1..6}'
+ cd /etc/redis/redis-cluster/redis6002
+ redis-server redis.conf
77532:C 09 Aug 2021 22:20:20.701 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
77532:C 09 Aug 2021 22:20:20.701 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=77532, just started
77532:C 09 Aug 2021 22:20:20.701 # Configuration loaded
+ for a in '{1..6}'
+ cd /etc/redis/redis-cluster/redis6003
+ redis-server redis.conf
77537:C 09 Aug 2021 22:20:20.741 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
77537:C 09 Aug 2021 22:20:20.741 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=77537, just started
77537:C 09 Aug 2021 22:20:20.741 # Configuration loaded
+ for a in '{1..6}'
+ cd /etc/redis/redis-cluster/redis6004
+ redis-server redis.conf
77542:C 09 Aug 2021 22:20:20.759 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
77542:C 09 Aug 2021 22:20:20.759 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=77542, just started
77542:C 09 Aug 2021 22:20:20.759 # Configuration loaded
+ for a in '{1..6}'
+ cd /etc/redis/redis-cluster/redis6005
+ redis-server redis.conf
77547:C 09 Aug 2021 22:20:20.778 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
77547:C 09 Aug 2021 22:20:20.778 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=77547, just started
77547:C 09 Aug 2021 22:20:20.778 # Configuration loaded
+ for a in '{1..6}'
+ cd /etc/redis/redis-cluster/redis6006
+ redis-server redis.conf
77552:C 09 Aug 2021 22:20:20.810 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
77552:C 09 Aug 2021 22:20:20.810 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=77552, just started
77552:C 09 Aug 2021 22:20:20.810 # Configuration loaded
[root@localhost redis6001]# ps -ef | grep redis         //查看是否开启
root      76988      1  0 21:42 ?        00:00:02 /usr/local/redis/bin/redis-server 127.0.0.1:6379
root      77531      1  0 22:20 ?        00:00:00 redis-server 127.0.0.1:6001 [cluster]
root      77536      1  0 22:20 ?        00:00:00 redis-server 127.0.0.1:6002 [cluster]
root      77541      1  0 22:20 ?        00:00:00 redis-server 127.0.0.1:6003 [cluster]
root      77546      1  0 22:20 ?        00:00:00 redis-server 127.0.0.1:6004 [cluster]
root      77551      1  0 22:20 ?        00:00:00 redis-server 127.0.0.1:6005 [cluster]
root      77556      1  0 22:20 ?        00:00:00 redis-server 127.0.0.1:6006 [cluster]
root      77570  72553  0 22:20 pts/1    00:00:00 grep --color=auto redis

[root@localhost redis6001]# redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1      //三组,前面作为主,后面作为从,下面需要输入yes才可以创建,-replicas 1 表示每个主节点有一个从节点
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:6005 to 127.0.0.1:6001
Adding replica 127.0.0.1:6006 to 127.0.0.1:6002
Adding replica 127.0.0.1:6004 to 127.0.0.1:6003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 6e6ae7bb6b0d8f732c73f022fbde79747c343e0c 127.0.0.1:6001
   slots:[0-5460] (5461 slots) master
M: ce121376eb627be8939910ccd489e99c2cf8fe79 127.0.0.1:6002
   slots:[5461-10922] (5462 slots) master
M: 496838dd19ee4f27cddc7491dfedd4f05cb41c4e 127.0.0.1:6003
   slots:[10923-16383] (5461 slots) master
S: e3dd518050a462aaed26f4f63d67733f375e662d 127.0.0.1:6004
   replicates ce121376eb627be8939910ccd489e99c2cf8fe79
S: aa22b5a5459e6dc443fc787297645d3db79f0040 127.0.0.1:6005
   replicates 496838dd19ee4f27cddc7491dfedd4f05cb41c4e
S: 7e704c66a5921013d28185c5fc88df361798925b 127.0.0.1:6006
   replicates 6e6ae7bb6b0d8f732c73f022fbde79747c343e0c
Can I set the above configuration? (type 'yes' to accept): 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:6001)
M: 6e6ae7bb6b0d8f732c73f022fbde79747c343e0c 127.0.0.1:6001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: aa22b5a5459e6dc443fc787297645d3db79f0040 127.0.0.1:6005
   slots: (0 slots) slave
   replicates 496838dd19ee4f27cddc7491dfedd4f05cb41c4e
M: 496838dd19ee4f27cddc7491dfedd4f05cb41c4e 127.0.0.1:6003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: e3dd518050a462aaed26f4f63d67733f375e662d 127.0.0.1:6004
   slots: (0 slots) slave
   replicates ce121376eb627be8939910ccd489e99c2cf8fe79
S: 7e704c66a5921013d28185c5fc88df361798925b 127.0.0.1:6006
   slots: (0 slots) slave
   replicates 6e6ae7bb6b0d8f732c73f022fbde79747c343e0c
M: ce121376eb627be8939910ccd489e99c2cf8fe79 127.0.0.1:6002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

  • 验证
[root@localhost redis6001]# redis-cli -p 6001 -c
127.0.0.1:6001> cluster slots        //查看节点的哈希槽编号范围
1) 1) (integer) 10923
   2) (integer) 16383            //华西操编号范围
   3) 1) "127.0.0.1"
      2) (integer) 6003       //主节点ip和端口号
      3) "496838dd19ee4f27cddc7491dfedd4f05cb41c4e"
   4) 1) "127.0.0.1"
      2) (integer) 6005          //从节点ip和端口号
      3) "aa22b5a5459e6dc443fc787297645d3db79f0040"
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 6002
      3) "ce121376eb627be8939910ccd489e99c2cf8fe79"
   4) 1) "127.0.0.1"
      2) (integer) 6004
      3) "e3dd518050a462aaed26f4f63d67733f375e662d"
3) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 6001
      3) "6e6ae7bb6b0d8f732c73f022fbde79747c343e0c"
   4) 1) "127.0.0.1"
      2) (integer) 6006
      3) "7e704c66a5921013d28185c5fc88df361798925b"

127.0.0.1:6001> set wo xx
OK
127.0.0.1:6001> CLUSTER KEYSLOT wo
(integer) 3207

127.0.0.1:6002> set home hangzhou
OK
127.0.0.1:6002> cluster keyslot home
(integer) 10814

那么结果告诉我们wo被放在了6001哈希槽、home被放在6002哈希槽中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值