Redis中的集群(二)

节点

集群数据结构

redisClient结构和clusterLink结构的相同和不同之处

redisClient结构和clusterLink结构都有自己的套接字描述符和输入、输出缓冲区,这两个结构的区别在于,redisClient结构中的套接字和缓冲区是用于连接客户端的,而clusterLink结构中的套接字和缓冲区是用于连接节点的。

例子

举个例子。以前面介绍的7000、7001、7002三个节点为例,如图展示了节点7000创建的clusterState结构,这个结构从节点7000的角度记录了集群以及集群包含的三个节点的当前状态:

  • 1.结构的currentEpoch属性的值为0,表示集群当前的配置纪元为0
  • 2.结构的size属性的值为0,表示集群目前没有任何节点在处理槽,因此结构的state属性的值为REDIS_CLUSTER_FAIL,这表示集群目前处于下线状态
  • 3.结构的nodes字典记录了集群目前包含的三个节点,这三个节点分别由clusterNode结构表示,其中myself指针指向代表节点7000的clusterNode结构,而字典中的另外两个指针则分别指向节点7001和代表节点7002的clusterNode结构,这两个节点是节点7000已知的在集群中的其他节点
  • 4.三个节点的clusterNode结构的flags属性都是REDIS_NODE_MASTER,说明三个节点都是主节点。

节点7001和节点7002也会创建类似的clusterState结构:

  • 1.不过在节点7001创建的clusterState结构中,myself指针将指向代表节点7001的clusterNode结构,而节点7000和节点7002则是集群中的其他节点.
  • 2.而在节点7002创建的clusterState结构中,myself指针将指向代表节点7002的clusterNode结构,而节点7000和节点7001则是集群中的其他节点。
    在这里插入图片描述

CLUSTER MEET命令的实现

通过向节点A发送CLUSTER MEET命令,客户端可以让接收命令的节点A将另一个节点B添加到节点A当前所在的集群里面:

CLUSTER MEET <ip> <port>

收到命令的节点A将与节点B进行握手(handshake),以此来确认彼此的存在,并未将来的进一步通信打好基础:

  • 1.节点A会为节点B创建一个clusterNode结构,并将该结构添加到自己的clusterState.nodes字典里面
  • 2.之后,节点A将根据CLUSTER MEET命令给定的IP地址和端口号,向节点B发送一条MEET消息(message)
  • 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消息,握手完成

如图展示了握手过程。之后,节点A会将节点B的信息通过Goossip协议传播给集群中的其他节点,让其他节点也与节点B进行握手,最终,经过一段时间之后,节点B会被集群中的所有节点认识
在这里插入图片描述

槽指派

概述

Redis集群通过分片的方式来保存数据库的键值对:集群的整个数据库被分为16384个槽(slot),数据库中的每个键都属于这16384个槽的其中一个,集群中的每个节点可以处理0个或最多16384个槽。当数据库中的
16384个槽都有节点在处理时,集群处于上线状态(ok);相反地,如果数据库中有任何一个槽没有得到处理,那么集群处于下线状态(fail),在前面,我们使用CLUSTER MEET命令将7000、7001、7002三个节点连接到
了同一个集群里面,不过这个集群目前仍然处于下线状态,因为集群中的三个节点都没有在处理任何槽:

127.0.0.1:7000> cluster info
cluster_state:fail
cluster_slots_assigned:9
cluster_slots_ok:9
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:1
cluster_current_epoch:1
cluster_my_epoch:1
cluster_stats_messages_sent:2481
cluster_stats_messages_received:2478

通过向节点发送CLUSTER ADDSLOTS命令,可以将一个或者多个槽指派给节点负责

CLUSTER ADDSLOTS <slot> [slot ...]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615339.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​​​​网络编程探索系列 —— 洪水网络攻击

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之洪水网络攻击&#xff0c;在这篇文章中&#xff0c;你将会学习到在网络编程中的洪水网络攻击的原理&#xff0c;以及源码剖析&#xff0c;能让大家更能了解网络编程技术&#xff01;&#xff01;&#x…

UE C++ 学习

UBT&#xff08;虚幻编译工具&#xff08;UnrealBuildTool&#xff09;&#xff09;和UHT虚幻头工具&#xff08;UnrealHeaderTool&#xff09; UE有一组用于自动执行编译虚幻引擎过程的工具&#xff0c;包括 UBT和UHT&#xff08;以及其他工具&#xff09;。实现这一套工具的目…

Git分布式版本控制系统——Git常用命令(二)

五、Git常用命令————分支操作 同一个仓库可以有多个分支&#xff0c;各个分支相互独立&#xff0c;互不干扰 分支的相关命令&#xff0c;具体如下&#xff1a; git branch 查看分支 git branch [name] 创建分支&#x…

探秘大模型:《提示工程:技巧、方法与行业应用》背后的故事

提示工程是一种新兴的利用人工智能的技术&#xff0c;它通过设计提示引导生成式 AI 模型产生预期的输出&#xff0c;来提升人与 AI 的互动质量&#xff0c;激发 AI 模型的潜力&#xff0c;提升AI的应用水平。 为了让每一个人都拥有驱动大模型的能力&#xff0c;以微软全球副总裁…

创建SAP替代增强的过程

发现公司的凭证增强程序里没有前人写过完全替代的增强。没有完全替代增强想要实现一些复杂一点的替代就很难实现。所以我来创建一个完全替代&#xff0c;并且把过程记录下来&#xff0c;方便以后回头查看。 因为我公司已经实施过增强了&#xff0c;下面这个从零开始实施增强的大…

VS2022 debug调试时提示“未找到源”

1.问题 启动vs单步调试时&#xff0c;遇到某些特定语句会触发 未找到xxx.xx 您需要查找 xxx.xx 以通过查看源来确定当前调用堆栈帧。非调试情况下程序正常运行&#xff0c;调试情况下出现该问题后点击继续运行&#xff0c;程序正常运行&#xff0c;但会一直提示未找到......网…

CSS3 立体 3D 变换

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍CSS3 立体 3D 变换&#x1f48e;1 坐标轴&#x1f48e;2 perspective 透视视…

kail渗透攻击之ARP欺骗

一、什么是ARP协议&#xff1f; 一、什么是ARP欺骗&#xff1f; ARP欺骗的运作原理是由攻击者发送假的ARP数据包到网关上。其目的是要让假的ARP数据 包送至特定的IP地址的流量被错误送到攻击者所取代的地方。因此攻击者可将这些流量另行 转送到真正的网关或…

AI-数学-高中-35概率的基本(运算)性质

原作者视频&#xff1a;【概率】【一数辞典】4概率的基本&#xff08;运算&#xff09;性质_哔哩哔哩_bilibili 概率的基本&#xff08;运算&#xff09;性质&#xff1a; 1.任意一个随机事件A的发生概率>0; 2.必然事件的概率1&#xff0c;不可能事件概率为空&#xff1b;…

Flutter仿Boss-7.首页列表

效果 考察使用 Flutter Model的创建TabBar及TabBarView 的使用标签Wrap控件的使用列表ListView的使用 具体实现 今天懒的写文字了&#xff0c;想看具体实现的可以直接去我的github上&#xff1a; github&#xff1a;github.com/yixiaolunhui/flutter_project

LDRA Testbed软件静态分析_常见问题及处理

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

Leetcode刷题之移除元素(C语言版)

Leetcode刷题之移除元素&#xff08;C语言版&#xff09; 一、题目描述二、题目解析 一、题目描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅…