当前位置: 首页 > wzjs >正文

免费的网站app软件爱站工具包官网下载

免费的网站app软件,爱站工具包官网下载,电影网站盗链怎么做,石狮网站节点与集群构建 节点组成:Redis集群由多个独立节点组成,通过CLUSTER MEET命令实现节点握手,形成集群。 握手过程: 节点A为节点B创建clusterNode结构,发送MEET消息。 节点B接收后创建节点A的clusterNode结构&#xff…

节点与集群构建

  • 节点组成:Redis集群由多个独立节点组成,通过CLUSTER MEET命令实现节点握手,形成集群。

  • 握手过程

    1. 节点A为节点B创建clusterNode结构,发送MEET消息。

    2. 节点B接收后创建节点A的clusterNode结构,返回PONG消息。

    3. 节点A返回PING消息,完成握手。

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

  • 数据结构

    • clusterNode: 结构的link属性是一个 clusterLink 结构,该结构保存了连接节点所需的有关信息,比如套接字描述符,输人缓冲区和输出缓冲区:

    struct clusterNode {// 创建节点的时间mstime_t ctime;// 节点的名字,由40个十六进制字符组成// 例如68eef66df23420a5862208ef5b1a7005b806f2ffchar name[REDIS_CLUSTER_NAMELEN];// 节点标识// 使用各种不同的标识值记录节点的角色(比如主节点或者从节点)// 以及节点目前所处的状态(比如在线或者下线)。int flags;// 节点当前的配置纪元,用于实现故障转移uint64_t configEpoch;// 节点的IP地址char iP[REDIS_IP_STR_LEN];// 节点的端口号int port;// 保存连接节点所需的有关信息clusterLink *link;// 负责的槽位(二进制位数组)unsigned char slots[16384 / 8]; int numslots; //...
    };
    • clusterLink:clusterNode结构的link属性是一个clusterLink结构,该结构保存了连接节点所需的有关信息,比如套接字描述符,输人缓冲区和输出缓冲区.

    typedef struct clusterLink {// 连接的创建时间mstime_t ctime; // TCP 套接字描述符int fd; // 输出缓冲区(保存待发送给其他节点的消息)sds sndbuf; // 输入缓冲区(保存从其他节点接收的消息)sds rcvbuf; // 关联的节点(NULL 表示未关联)struct clusterNode *node; 
    } clusterLink;
    • clusterState:每个节点都保存着一个 clusterState 结构,这个结构记录了在当前节点的视角下,集群目前所处的状态,例如集群是在线还是下线,集群包含多少个节点,集群当前的配置纪元,诸如此类。

typedef struct clusterState {// 当前节点自身的指针clusterNode *myself; // 集群当前配置纪元(用于故障转移)uint64_t currentEpoch; // 集群状态(在线/下线)int state; // 处理至少一个槽的节点数量int size; // 集群节点字典(键为节点ID,值为 clusterNode 结构)dict *nodes; // 所有槽的指派信息(数组索引为槽号,值为指向 clusterNode 的指针)clusterNode *slots[16384]; // 当前节点正在导入的槽(用于重新分片)clusterNode *importing_slots_from[16384]; // 当前节点正在迁移的槽(用于重新分片)clusterNode *migrating_slots_to[16384]; // 槽与键的映射关系(跳跃表,分值=槽号,成员=键名)zskiplist *slots_to_keys; 
} clusterState;

槽指派与数据分片

  • 槽总数:16384个槽,所有槽被指派后集群上线(cluster_state:ok)。

  • 槽指派命令

CLUSTER ADDSLOTS <slot>将槽指派给节点。

127.0.0.1:7000>CLUSTER ADDSLOTS 0 1 2 3 4 ... 5000
OK

查看集群状态

127.0.0.1:7000>CLUSTER NODES
9dfb4c4e016e627d9769e4c9bb0d4fa208e65c26 127.0.0.1:7002 master - 0 1388317426165
  • 槽信息存储(节点视角)clusterNode.slots(二进制位数组,记录自身负责的槽)。

slots属性 unsigned char 占用 1 个字节(8 位)的内存,所有位都用于表示数值,没有符号位。因此,其取值范围为 ‌0 到 255‌,是一个二进制位数组(bitarray),这个数组的长度为16384 / 8=2048个字节,共包含16384个二进制位。

Redis以0为起始索引,16383为终止索引,对slots数组中的16384个二进制位进行编号,并根据索引i上的二进制位的值来判断节点是否负责处理槽1:

  1. 如果slots数组在索引i上的二进制位的值为1,那么表示节点负责处理槽i。

  2. 如果slots数组在索引i上的二进制位的值为0,那么表示节点不负责处理槽i。

展示了一个slots数组示例:这个数组索引0至索引7上的二进制位的值都为1,其余所有二进制位的值都为0,这表示节点负责处理槽0至槽7。

通过位运算检查槽指派,时间复杂度为O(1)

  • 槽信息存储(集群视角):clusterstate结构中的slots数组记录了集群中所有16384个槽的指派信息(指针数组,直接定位槽所属节点)。查找时间复杂度为O(1)

clusterstate.slots数组记录了集群中所有槽的指派信息,而clusterNode.slots数组只记录了clusterNode 结构所代表的节点的槽指派信息,多用于某个节点本身的槽信息发送给其他节点,这是两个slots数组的关键区别所在。

  • 传播节点的槽指派信息:

一个节点除了会将自己负责处理的槽记录在clusterNode结构的slots属性和numslots属性之外,它还会将自己的slots数组通过消息发送给集群中的其他节点,以此来告知其他节点自己目前负责处理哪些槽。

当节点A通过消息从节点B那里接收到节点B的slots数组时,节点A会在自己的clusterstate.nodes字典中查找节点B对应的clusterNode结构,并对结构中的slots数组进行保存或者更新。

因为集群中的每个节点都会将自己的slots数组通过消息发送给集群中的其他节点并且每个接收到slots数组的节点都会将数组保存到相应节点的 clusterNode结构里面,因此,集群中的每个节点都会知道数据库中的16384个槽分别被指派给了集群中的哪些节点。

http://www.dtcms.com/wzjs/295799.html

相关文章:

  • wordpress媒体库整理惠州seo优化
  • 长沙 做营销型网站的公司全网营销
  • web怎么做网站百度怎么做关键词优化
  • 帝国网站模板建设seo优化关键词
  • 北京住房和建设部网站关键词优化和seo
  • 门户网站模式百度客服投诉中心
  • 建设电商网站免费开发软件制作平台
  • 适合个人网站黑帽seo是什么意思
  • 模块化网站建设一般多少钱怎么做推广和宣传
  • 做网站怎么带流量重庆seo顾问服务
  • 软件外包项目网站品牌软文
  • 贵阳做网站 优帮云竞价是什么工作
  • 做网站站怎么赚钱线下推广宣传方式有哪些
  • 建设电子商务网站的目的和意义常德论坛网站
  • 中山哪里可以做网站海南seo代理加盟供应商
  • 有网站代码 如何建设网站上海网站建设制作
  • 朝阳改版网站域名注册网站查询
  • 南京电子商务网站开发公司百度广告位价格
  • 太原网站建设哪家效益快百度识图网页版入口
  • 长沙百度搜索排名优化免费的seo优化工具
  • 档案网站建设论文百度人工客服在线咨询电话
  • 自己可以做网站空间吗2022百度搜索风云榜
  • wordpress存放图片百度ocpc怎么优化
  • 东昌府企业做网站推广青岛网站设计
  • 东坑网站建设公司教育培训机构前十名
  • 公司建一个网站培训网站官网
  • 做网站的盈利点seo关键词是什么
  • 网页制作中网站名称怎么做如何去推广
  • 网站建设业务的延伸性企点qq官网
  • 免费做的网站怎么设置域名企业网站推广技巧