Redis(设计与实现):49---集群之集群节点、节点启动(CLUSTER MEET/NODE命令、cluster-enabled选项)

一、集群介绍

  • Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能

二、集群节点介绍

  • 一个Redis集群通常由多个节点(node)组成,在刚开始的时候,每个节点都是相互独立的,它们都处于一个只包含自己的集群当中,要组建一个真正可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群

节点的连接(CLUSTER MEET命令)

  • 连接各个节点的工作可以使用CLUSTER MEET命令来完成,该命令的格式如下:
CLUSTER MEET  
  • 向一个节点node发送CLUSTER MEET命令,可以让node节点与ip和port所指定的节点进行握手(handshake),当握手成功时,node节点就会将ip和port所指定的节点添加到node节点当前所在的集群中

演示案例(附CLUSTER NODE命令):

  • 假设现在有三个独立的节点127.0.0.1:7000、127.0.0.1:7001、 127.0.0.1:7002(下文省略IP地址,直接使用端口号来区分各个节点),我们首先使用客户端连上节点7000,通过发送CLUSTER NODE命令可以看到,集群目前只包含7000自己一个节点:

  • 通过向节点7000发送以下命令,我们可以将节点7001添加到节点7000所在的集群里面:

Redis(设计与实现):49---集群之集群节点、节点启动(CLUSTER MEET/NODE命令、cluster-enabled选项)_第1张图片

  • 继续向节点7000发送以下命令,我们可以将节点7002也添加到节点7000和节点7001所在 的集群里面:

Redis(设计与实现):49---集群之集群节点、节点启动(CLUSTER MEET/NODE命令、cluster-enabled选项)_第2张图片

  • 现在,这个集群里面包含了7000、7001和7002三个节点,图17-1至17-5展示了这三个节 点进行握手的整个过程

Redis(设计与实现):49---集群之集群节点、节点启动(CLUSTER MEET/NODE命令、cluster-enabled选项)_第3张图片

Redis(设计与实现):49---集群之集群节点、节点启动(CLUSTER MEET/NODE命令、cluster-enabled选项)_第4张图片

三、节点的启动(cluster-enabled选项)

  • 一个节点就是一个运行在集群模式下的Redis服务器,Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式,如下图所示:

Redis(设计与实现):49---集群之集群节点、节点启动(CLUSTER MEET/NODE命令、cluster-enabled选项)_第5张图片

  • 节点(运行在集群模式下的Redis服务器)会继续使用所有在单机模式中使用的服务器组件,比如说:
    • 节点会继续使用文件事件处理器来处理命令请求和返回命令回复
    • 节点会继续使用时间事件处理器来执行serverCron函数,而serverCron函数又会调用集 群模式特有的clusterCron函数clusterCron函数负责执行在集群模式下需要执行的常规操 作,例如向集群中的其他节点发送Gossip消息,检查节点是否断线,或者检查是否需要对下 线节点进行自动故障转移等
    • 节点会继续使用数据库来保存键值对数据,键值对依然会是各种不同类型的对象
    • 节点会继续使用RDB持久化模块和AOF持久化模块来执行持久化工作
    • 节点会继续使用发布与订阅模块来执行PUBLISH、SUBSCRIBE等命令
    • 节点会继续使用复制模块来进行节点的复制工作
    • 节点会继续使用Lua脚本环境来执行客户端输入的Lua脚本
  • 除此之外,节点会继续使用redisServer结构来保存服务器的状态,使用redisClient结构来 保存客户端的状态,至于那些只有在集群模式下才会用到的数据,节点将它们保存到了 cluster.h/clusterNode结构、cluster.h/clusterLink结构,以及cluster.h/clusterState结构里面,我们在下一篇文章对这几种数据结构进行介绍:https://blog.csdn.net/qq_41453285/article/details/103355808

你可能感兴趣的:(Redis(设计与实现))