redis-cluster原理分析

合集下载

redis-cluster主从切换原理

redis-cluster主从切换原理

redis-cluster主从切换原理主从切换的过程如下:1. 检测主节点失效: Redis-Cluster会定期对节点进行检测,如果发现主节点不可用,就会触发故障切换。

2. 选举新的主节点:从备份节点中选取一个做为新的主节点。

主节点的选举是通过投票机制来完成的:每个节点根据自己的状态和其他节点的信息选择一个对象发起投票,如果投票的对象获得了大多数的支持,则会成为新的主节点。

3. 数据同步:新的主节点会从旧的主节点中获取丢失的数据,在所有从节点中复制最新的数据以保证数据的一致性。

4. 更新客户端的视图:在切换完成后,Redis-Cluster会将新主节点的地址更新到客户端视图中,以确保客户端的请求被正确处理。

在上面的过程中,有几个需要注意的地方:1. 在节点选举的过程中,只选择没有故障的节点参与选举。

如果多个节点同时故障,选举过程可能需要等待故障恢复或手动干预才能完成。

2. 在数据同步的过程中,需要确保最新的数据都被同步到新的主节点中。

如果旧的主节点和新的主节点之间网络状况不好,同步可能会花费较长的时间,在这种情况下,需要手动干预以保证数据的完整性。

3. 在主从切换的过程中,需要确保客户端请求被正确处理。

如果客户端连接到的是失效的主节点,集群需要将客户端的请求重定向到新的主节点,以确保客户端请求的正确性。

总结:Redis-Cluster通过多副本的方式增加了系统的可用性,主从切换是其中的关键技术之一。

在自动切换的过程中,需要考虑多种情况,确保切换过程的正确性。

对于Redis-Cluster的使用者来说,在了解自动主从切换的基本原理的同时,还需要了解配置参数和自动切换的策略,以确保自动主从切换的正确性和可靠性。

cluster list 原理 -回复

cluster list 原理 -回复

cluster list 原理-回复
什么是Cluster List,其原理是什么?
Cluster List 是Redis 数据库中一种数据结构,它能够存储多个字符串类型的元素,这些元素被称为节点,而这些节点又被称为集群。

Cluster List 的实现原理是将多个节点连接在一起,形成一个链表。

每个节点都具有一个指向前一个节点和后一个节点的指针,这样整个链表就能够连接起来形成一个完整的集群。

Cluster List 的实现中,每个节点的数据都包含三部分:元素值、前驱指针、后继指针。

其中元素值是存储在节点中的实际数据,而前驱指针和后继指针则用来指向前一个节点和后一个节点,以实现链表的功能。

Cluster List 的主要特点是能够高效地插入和删除节点,其时间复杂度为O(1)。

这可以通过将新节点插入到已有节点的前面或后面来实现。

同时,Cluster List 还支持节点的随机访问,这是由于每个节点都有一个索引值,可以根据索引值来定位节点的位置,其时间复杂度也为O(1)。

Cluster List 在Redis 中的应用非常广泛,主要用于存储链表结构数据的场景,如任务队列、消息队列、日志文件等。

另外,Cluster List 还经常与Redis 的发布订阅功能一起使用,这样就可以实现集群通信和任务调
度等功能。

总之,Cluster List 是Redis 中一种高效的数据结构,它的实现原理非常简单,同时具有插入、删除和查找等强大的功能,因此在许多应用场景下表现出色,为Redis 数据库的高效处理提供了很好的支持。

jediscluster llen方法 -回复

jediscluster llen方法 -回复

jediscluster llen方法-回复所谓"jediscluster llen方法" ,指的是使用JedisCluster对象调用llen 方法来获取Redis集群中存储的列表类型数据的长度。

在这篇文章中,我们将一步一步地介绍llen方法的使用,并探讨它的原理和注意事项。

Redis是一个开源的内存数据存储系统,常用于缓存和高速数据存储。

它支持多种数据结构,其中之一就是列表(List)。

列表是一个有序的字符串集合,允许重复的元素。

Redis提供了丰富的命令和方法来操作和查询列表数据。

Jedis是一个使用Java语言操作Redis的客户端库。

它提供了一系列的类和方法,使得在Java应用程序中使用Redis变得简单和高效。

JedisCluster 是Jedis的一个子类,它提供了对Redis集群的支持。

在Redis集群中,数据被分散存储在多个节点上。

JedisCluster对象将这些节点组织成一个逻辑上的整体,使得对Redis集群的操作变得透明。

我们可以通过JedisCluster对象调用各种方法来访问和操作集群中的数据。

其中,llen方法用于获取列表数据的长度。

它的定义如下:javaLong llen(String key);该方法接受一个字符串类型的参数key,表示要查询长度的列表的键名。

它返回一个Long类型的值,表示列表的长度。

下面是使用llen方法的示例代码:javaJedisCluster jedisCluster = new JedisCluster(jedisClusterNodes); Long listLength = jedisCluster.llen("mylist");System.out.println("The length of the list is: " + listLength);在这个示例中,我们首先创建了一个JedisCluster对象,并传入了用于连接Redis集群的节点信息。

redis分布式原理

redis分布式原理

redis分布式原理Redis分布式原理解析介绍Redis 是一款高性能的键值对存储数据库,常用于缓存、消息队列和排名等应用场景。

其分布式特性使得Redis在面对大规模数据和并发访问时表现出色。

本文将从浅入深地解释Redis分布式原理。

数据分片Redis采用数据分片(sharding)的方式实现分布式存储。

数据分片将键值对均匀地分散到多个节点上,每个节点只负责处理部分数据,从而提高整体的处理能力和存储容量。

一致性哈希算法一致性哈希算法(Consistent Hashing)是Redis中常用的数据分片策略。

该算法将节点和键之间形成一个环状结构,通过hash函数将键映射到相应的节点上。

在节点发生变动(如添加或删除)时,只需重新映射受影响的键,而不需要重新分配整个数据集。

虚拟节点为了解决节点负载不均的问题,Redis引入了虚拟节点的概念。

通过为每个节点分配多个虚拟节点,可以使数据在节点之间更加均匀地分布,提高整体的负载均衡性。

数据复制数据复制是Redis实现分布式的关键机制之一。

通过将数据复制到多个节点,即使某个节点发生故障,系统仍能继续提供服务。

主从复制主从复制(Master-Slave Replication)是Redis中常用的数据复制方式。

一个节点作为主节点(Master),负责处理读写请求,并将数据同步到一个或多个从节点(Slave)。

从节点只负责处理读请求,并通过异步复制将数据同步到自己的内存中。

双向复制双向复制是主从复制的一种改进方式。

在双向复制中,主节点既可以向从节点复制数据,也可以接收从节点的写请求。

这种方式提高了系统的可用性和容错性,并减少了主节点的负载压力。

故障切换故障切换(Failover)是Redis分布式系统中解决节点故障的一种机制。

SentinelRedis Sentinel是一个用于监控和管理Redis分布式系统的组件。

它会定期向所有节点发送心跳检测,一旦发现节点出现故障,会自动进行故障切换,将从节点提升为主节点,并将其他节点重新配置为新的从节点。

Redis集群Redis-cluster搭建及故障、性能测试

Redis集群Redis-cluster搭建及故障、性能测试

Redis集群Redis-cluster搭建及故障、性能测试⼀、Redis集群部署三台物理机:172.20.0.17、172.20.0.18、172.20.0.19⼆、安装Redis下载安装redis压缩包解压压缩包,进⼊redis-5.0.2⽂件夹,运⾏命令./make install安装redismv redis-5.0.2 /usr/local/redis/三、修改配置⽂件node1--17服务器:1、创建redis_cluster/700X的⽬录mkdir -p /usr/local/redis/redis_cluster/7001mkdir -p /usr/local/redis/redis_cluster/70022、修改Redis.conf的端⼝cp redis.conf /usr/local/redis/redis_cluster/7001修改端⼝为7001cp redis.conf /usr/local/redis/redis_cluster/7002修改端⼝为70023、同时将修改后的Redis.conf复制到另外两个节点(18、19)4、将redis-server复制到节点⽬录下,⽅便操作cp /usr/local/bin/redis-server /usr/local/redis/redis-5.0.2/redis_cluster/7001/5、开启redis-cluster配置,配置做以下改造#配置yes开启redis-clustercluster-enabled yes#配置节点之间超时时间cluster-node-timeout 15000#这个配置很重要,cluster开启必须重命名指定cluster-config-file,不能与别的节点相同,否则会启动失败,最好按主机+端⼝命名cluster-config-file nodes-17-7001.conf四、启动各节点17、18、19Rediscd /usr/local/redis/redis-5.0.2/redis_cluster/7001./redis-server redis.confcd /usr/local/redis/redis-5.0.2/redis_cluster/7002./redis-server redis.conf五、创建集群命令cd /usr/local/bin./redis-cli --cluster create 172.20.0.17:7001 172.20.0.18:7001 172.20.0.19:7001 172.20.0.17:7002 172.20.0.18:7002 172.20.0.19:7002 --cluster-replicas 1(replicas1 表⽰我们希望为集群中的每个主节点创建⼀个从节点。

Redis集群槽道操作和槽道原理

Redis集群槽道操作和槽道原理

Redis集群槽道操作和槽道原理安装好redis集群后,接下来记录⼀下它的实现中⾮常重要的槽道原理,在记录原理之前先对槽道进⾏迁移操作,直观的感受⼀下。

槽道迁移实现槽道迁移也有两种⽅式,⼀种是使⽤ruby的redis-trib.rb脚本,⼀种是使⽤原⽣的redis-cluster集群命令来完成。

如果使⽤ruby提供的脚本,需要提前配置好,⾥⾯有坑,参考,使⽤原⽣的命令则不需要配置ruby,个⼈感觉后者的⽅式可以更直观的感受迁移的过程。

ruby脚本辅助迁移现在集群有6个节点,其中有4个主2个从,现在8000节点是主但是没有槽道管理权,可以通过ruby脚本辅助迁移部分其他主节点的槽道号给它,注意现在8000节点是没有数据的,ruby脚本辅助迁移⽬前只能⽀持空槽道的迁移。

[root@node01 /home/software/redis-3.2.11]# redis-cli -p 8001127.0.0.1:8001> cluster nodesfd4c160edc74536d79ea29d239dca43275ec6b5a 192.168.200.140:8004 slave 231fe9df31dc1ccf7cca5ae2fb2313979cd6fa83 015762394108381 connected2c52d95c3d6d4c396469a81edfc1493d984e0f2d 192.168.200.140:8005 slave 7ce388bde879f686fc3c8491175397ca20405565 015762394078065 connected231fe9df31dc1ccf7cca5ae2fb2313979cd6fa83 192.168.200.140:8001 myself,master - 001 connected 5461-10922# 8000现在没有槽道管理c41dbe9595ae83725d1322b032736fd198b26c49 192.168.200.140:8000 master - 015762394078060 connected2e0f23d703874db80373f28b1be8c13f9de4fe6b 192.168.200.140:8003 master - 015762394098296 connected 0-54607ce388bde879f686fc3c8491175397ca20405565 192.168.200.140:8002 master - 015762394088182 connected 10923-16383(1)使⽤src/redis-trib.rb reshard host:port命令连接集群中任意⼀个节点进⾏操作,根据提⽰完成操作。

redis culster的工作原理

redis culster的工作原理

redis culster的工作原理Redis Cluster是Redis分布式的解决方案,通过将数据分布在多个节点上,实现了数据的高可用性和扩展性。

Redis Cluster的工作原理可以概括为以下几个方面。

Redis Cluster采用了一种无中心节点的结构,所有的节点都是对等的。

每个节点都可以接收客户端的请求,并参与数据的读写操作。

在集群内部,节点之间通过gossip协议进行通信,实现数据的同步和故障检测。

每个节点都会定期向集群中的其他节点发送信息,包括自己的状态、数据槽分配情况等。

通过这种方式,集群中的节点可以动态地感知到其他节点的状态变化。

Redis Cluster使用了一种哈希槽的方式来管理数据的分布。

集群中的每个节点都负责管理一部分哈希槽,每个槽对应数据中的一个键。

当客户端发送一个命令请求时,Redis Cluster会根据键的哈希值确定其所属的槽,并将命令转发给负责该槽的节点。

这样,每个节点只需要管理部分数据,大大提高了集群的存储能力和性能。

Redis Cluster还实现了数据的冗余备份,提高了数据的可靠性。

每个槽都会有一个主节点和若干个从节点。

主节点负责处理客户端的请求,并将数据同步给从节点。

当主节点发生故障时,从节点会自动选举出一个新的主节点来接替其工作。

这样,即使集群中的某个节点发生故障,仍然能够保证数据的正常访问。

Redis Cluster还提供了一种自动迁移的机制,可以在节点的增删或者故障恢复时进行数据的重新分配。

当新增一个节点时,集群会将一部分槽从其他节点迁移到新的节点上。

当某个节点发生故障后恢复时,集群会将该节点负责的槽重新分配给它。

通过这种方式,Redis Cluster实现了数据的动态平衡和自动恢复,提高了集群的可用性和健壮性。

总结起来,Redis Cluster通过节点的无中心化结构、哈希槽的数据分布、数据的冗余备份和自动迁移等机制,实现了数据的高可用性和扩展性。

redis集群工作原理

redis集群工作原理

redis集群工作原理Redis集群工作原理概述:Redis是一款高性能的键值存储系统,它的集群模式可以通过分布在不同节点的多个Redis实例来提高系统的性能和容量。

本文将介绍Redis集群的工作原理,包括数据分片、主从复制、故障转移等关键技术。

一、数据分片Redis集群通过数据分片来将数据分布在多个节点上。

具体来说,Redis使用哈希槽(hash slot)将数据划分为16384个槽位,每个键值对根据其键通过哈希算法分配到一个槽位上。

这样,每个Redis节点就负责管理部分槽位上的数据。

二、主从复制为了提供数据的高可用性,Redis集群使用主从复制机制。

每个主节点可以有多个从节点,主节点负责处理读写请求,从节点则负责复制主节点的数据。

主节点将数据通过异步复制的方式发送给从节点,从节点将接收到的数据写入自己的数据库中。

三、故障转移当一个主节点出现故障时,Redis集群需要进行故障转移,确保数据的可用性。

故障转移的过程如下:1. 当主节点失效时,集群中的某个从节点会被选举为新的主节点。

2. 新的主节点会将自己的身份广播给其他节点,并开始接收客户端的读写请求。

3. 其他从节点会将原来的主节点切换为新的主节点,并开始复制新的主节点的数据。

4. 如果原来的主节点恢复,它将成为新的从节点,并开始复制新的主节点的数据。

四、节点间通信Redis集群中的节点之间通过gossip协议进行通信。

每个节点会定期与其他节点交换信息,包括节点的状态、槽位分配情况等。

通过这种方式,集群中的每个节点都能了解整个集群的状态,并根据需要进行数据迁移、故障转移等操作。

五、客户端路由在Redis集群中,客户端需要将请求发送到正确的节点上。

为了实现这一点,客户端会通过集群的握手过程获取到集群的拓扑信息,包括每个节点的地址和槽位分配情况。

然后,客户端根据键的哈希值将请求发送到对应的节点上。

六、集群维护Redis集群提供了一些维护命令,用于管理集群的状态和配置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Redis Cluster 原理分析文章较长,如需转载可分段。

转载请标明作者以及文章来源,谢谢!作者介绍姓名:李航工作经历: 5年多互联网工作经验,先后在58同城,汽车之家,优酷土豆集团工作。

目前主要在优酷土豆集团任职高级开发工程师,目前主要负责大数据基础平台Redis集群开发及运维等工作。

主要关注领域Nginx,Redis,分布式系统,分布式存储。

如果对nginx或者redis感兴趣的同学可以发简历到gaosong@。

本文来源自“Redis技术交流群”线上分享。

李航ID:Lucien_168。

群主ID:gnuhpc。

redis中国用户组qq群:374538650。

后期的分享我们会同期进行。

这次主要是给大家分享的提纲如下:1.简介2.集群通信3.数据分布及槽信息4.数据迁移5.通信故障1.简介继上次分享的优酷土豆的Redis服务平台化之路,这次着重来分享下Redis Cluster浅析,欢迎大家互相多交流学习。

Redis Cluster是一个高性能高可用的分布式系统。

由多个Redis实例组成的整体,数据按照Slot存储分布在多个Redis实例上,通过Gossip协议来进行节点之间通信。

Redis Cluster功能特点如下:1)所有的节点相互连接2)集群消息通信通过集群总线通信,,集群总线端口大小为客户端服务端口+10000,这个10000是固定值3)节点与节点之间通过二进制协议进行通信4)客户端和集群节点之间通信和通常一样,通过文本协议进行5)集群节点不会代理查询6)数据按照Slot存储分布在多个Redis实例上7)集群节点挂掉会自动故障转移8)可以相对平滑扩/缩容节点2.集群通信2.1 CLUSTER MEET需要组建一个真正的可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群。

连接各个节点的工作使用CLUSTER MEET命令来完成。

CLUSTER MEET <ip> <port>CLUSTER MEET命令实现:1)节点 A 会为节点 B 创建一个clusterNode 结构,并将该结构添加到自己的clusterState.nodes 字典里面。

2)节点A根据CLUSTER MEET命令给定的IP地址和端口号,向节点B发送一条MEET消息。

3)节点B接收到节点A发送的MEET消息,节点B会为节点A创建一个clusterNode结构,并将该结构添加到自己的clusterState.nodes字典里面。

4)节点B向节点A返回一条PONG消息。

5)节点A将受到节点B返回的PONG消息,通过这条PONG消息节点A可以知道节点B已经成功的接收了自己发送的MEET消息。

6)之后,节点A将向节点B返回一条PING消息。

7)节点B将接收到的节点A返回的PING消息,通过这条PING消息节点B可以知道节点A已经成功的接收到了自己返回的PONG消息,握手完成。

8)之后,节点A会将节点B的信息通过Gossip协议传播给集群中的其他节点,让其他节点也与节点B进行握手,最终,经过一段时间后,节点B会被集群中的所有节点认识。

2.2 集群消息处理clusterProcessPacket2.3 定时任务clusterCron定时任务clusterCron1)对handshake节点建立Link,发送Ping或Meet2)向随机几点发送Ping3)如果是从查看是否需要做Failover4)统计并决定是否进行slave的迁移,来平衡不同master的slave数5)判断所有pfail报告数是否过半数2.4 心跳数据●发送消息头信息Header1)所负责slots的信息2)主从信息3)ip port信息4)状态信息●发送其他节点Gossip信息1)ping_sent, pong_received2)ip, port信息3)状态信息,比如发送者认为该节点已经不可达,会在状态信息中标记其为PFAIL或FAILclusterMsg结构的currentEpoch、sender、myslots等属性记录了发送者自身的节点信息,接收者会根据这些信息,在自己的clusterState.nodes字典里找到发送者对应的clusterNode结构,并对结构进行更新。

Redis集群中的各个节点通过Gossip协议来交换各自关于不同节点的状态信息,其中Gossip 协议由MEET、PING、PONG三种消息实现,这三种消息的正文都由两个clusterMsgDataGossip 结构组成。

每次发送MEET、PING、PONG消息时,发送者都从自己的已知节点列表中随机选出两个节点(可以是主节点或者从节点),并将这两个被选中节点的信息分别保存到两个结构中。

当接收者收到消息时,接收者会访问消息正文中的两个结构,并根据自己是否认识clusterMsgDataGossip结构中记录的被选中节点进行操作:1.如果被选中节点不存在于接收者的已知节点列表,那么说明接收者是第一次接触到被选中节点,接收者将根据结构中记录的IP地址和端口号等信息,与被选择节点进行握手。

2.如果被选中节点已经存在于接收者的已知节点列表,那么说明接收者之前已经与被选中节点进行过接触,接收者将根据clusterMsgDataGossip结构记录的信息,对被选中节点对应的clusterNode结构进行更新。

2.5 数据结构clusterNode 结构保存了一个节点的当前状态,比如节点的创建时间,节点的名字,节点当前的配置纪元,节点的IP 和地址,等等。

1)slots:位图,由当前clusterNode负责的slot为12)salve, slaveof:主从关系信息3)ping_sent, pong_received:心跳包收发时间4)clusterLink *link:节点间的连接5)list *fail_reports:收到的节点不可达投票clusterState 结构记录了在当前节点的集群目前所处的状态。

1)myself:指针指向自己的clusterNode2)currentEpoch:当前节点的最大epoch,可能在心跳包的处理中更新3)nodes:当前节点记录的所有节点,为clusterNode指针数组4)slots:slot与clusterNode指针映射关系5)migrating_slots_to, importing_slots_from:记录slots的迁移信息6)failover_auth_time,failover_auth_count,failover_auth_sent,failover_auth_rank,failover_auth_epoch:Failover相关信息clusterLink 结构保存了连接节点所需的有关信息,比如套接字描述符,输入缓冲区和输出缓冲区。

3.数据分布及槽信息3.1 槽(slot)概念Redis Cluster中有一个16384长度的槽的概念,他们的编号为0、1、2、3……16382、16383。

这个槽是一个虚拟的槽,并不是真正存在的。

正常工作的时候,Redis Cluster中的每个Master 节点都会负责一部分的槽,当有某个key被映射到某个Master负责的槽,那么这个Master 负责为这个key提供服务,至于哪个Master节点负责哪个槽,这是可以由用户指定的,也可以在初始化的时候自动生成(redis-trib.rb脚本)。

这里值得一提的是,在Redis Cluster中,只有Master才拥有槽的所有权,如果是某个Master的slave,这个slave只负责槽的使用,但是没有所有权。

3.2 数据分片在Redis Cluster中,拥有16384个slot,这个数是固定的,存储在Redis Cluster中的所有的键都会被映射到这些slot中。

数据库中的每个键都属于这16384 个哈希槽的其中一个,集群使用公式CRC16(key) % 16384 来计算键key 属于哪个槽,其中CRC16(key) 语句用于计算键key 的CRC16 校验和。

集群中的每个节点负责处理一部分哈希槽。

3.3 节点的槽指派信息clusterNode结构的slots属性和numslot属性记录了节点负责处理那些槽:struct clusterNode {//…unsigned char slots[16384/8];};Slots属性是一个二进制位数组(bit array),这个数组的长度为16384/8=2048个字节,共包含16384个二进制位。

Master节点用bit来标识对于某个槽自己是否拥有。

比如对于编号为1的槽,Master只要判断序列的第二位(索引从0开始)是不是为1即可。

时间复杂度为O(1)。

3.4 集群所有槽的指派信息通过将所有槽的指派信息保存在clusterState.slots数组里面,程序要检查槽i是否已经被指派,又或者取得负责处理槽i的节点,只需要访问clusterState.slots[i]的值即可,复杂度仅为O(1)。

3.5 请求重定向由于每个节点只负责部分slot,以及slot可能从一个节点迁移到另一节点,造成客户端有可能会向错误的节点发起请求。

因此需要有一种机制来对其进行发现和修正,这就是请求重定向。

有两种不同的重定向场景:a)MOVED错误●请求的key对应的槽不在该节点上,节点将查看自身内部所保存的哈希槽到节点ID 的映射记录,节点回复一个MOVED 错误。

●需要客户端进行再次重试。

b)ASK错误●请求的key对应的槽目前的状态属于MIGRATING状态,并且当前节点找不到这个key了,节点回复ASK错误。

ASK会把对应槽的IMPORTING节点返回给你,告诉你去IMPORTING的节点尝试找找。

●客户端进行重试首先发送ASKING命令,节点将为客户端设置一个一次性的标志(flag),使得客户端可以执行一次针对IMPORTING 状态的槽的命令请求,然后再发送真正的命令请求。

●不必更新客户端所记录的槽至节点的映射。

4.数据迁移当槽x从Node A向Node B迁移时,Node A和Node B都会有这个槽x,Node A上槽x的状态设置为MIGRATING,Node B上槽x的状态被设置为IMPORTING。

MIGRATING状态1)如果key存在则成功处理2)如果key不存在,则返回客户端ASK,客户端根据ASK首先发送ASKING命令到目标节点,然后发送请求的命令到目标节点3)当key包含多个命令,a)如果都存在则成功处理b)如果都不存在,则返回客户端ASKc)如果一部分存在,则返回客户端TRYAGAIN,通知客户端稍后重试,这样当所有的key都迁移完毕的时候客户端重试请求的时候回得到ASK,然后经过一次重定向就可以获取这批键4)此时不刷新客户端中node的映射关系IMPORTING状态1)如果key不在该节点上,会被MOVED重定向,刷新客户端中node的映射关系2)如果是ASKING命令则命令会被执行,key不在迁移的节点已经被迁移到目标的节点3)Key不存在则新建4.1 读写请求槽里面的key还未迁移,并且槽属于迁移中假如k1属于槽x,并且k1还在Node A4.2 MOVED请求槽里面的key已经迁移过去,并且槽属于迁移完假如k1属于槽x,并且k1不在Node A,而且槽x已经迁移到Node B4.3 ASK请求槽里面的key已经迁移完,并且槽属于迁移中假如k1属于槽x,并且k1不在Node A,而且槽x还是MIGRATING状态5.通信故障5.1故障检测集群中的每个节点都会定期地向集群中的其他节点发送PING消息,以此交换各个节点状态信息,检测各个节点状态:在线状态、疑似下线状态PFAIL、已下线状态FAIL。

相关文档
最新文档