文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Redis-trib.rb解析

2024-04-02 19:55

关注

Redis-trib.rb –create源码解析

一、 介绍

  Redis-trib.rb为主流的Redis管理工具,对Redis一系列命令进行了封装通过ruby客户端完成Create Cluster,Reshard Cluster,Add Slave,Remove Node等功能。下面我们来看下Create Cluster建立cluster集群是如何实现的。

二、 流程概览图

Redis-trib.rb解析

三、 节点可用性检测

 1. 节点连通性
 2. 是否配置了cluster模式(if cluster_enabled==1?)
 3. 是否已经为其他集群成员(if cluster_known_nodes==1?)
 4. 检查至少有三个可用节点
 5. 获取节点信息:

通过cluster nodes 命令获得统计信息
name,addr,flags,master_id, ping_sent,ping_recv,config_epoch,link_status,slot信息
如:
Redis-trib.rb解析

四、 主从预分配以及节点预分配

说明:Redis-trib.rb create可以尽可能的将主库的不同节点分配到不同的机器并且可以将主从库物理机分离,此功能的实现调用了alloc_slots函数,我们截取了部分进行分析。

Redis-trib.rb解析
第559行-562行:将节点根据ip进行归类,dict的key为ip,value为这个ip所对应的节点信息。
第566行-577行:循环ip,每次抽取ip的一个节点放到interleaved里。这可以尽可能让相同节点的分开
第578行:截取interleaved里前几个节点作为masters_count,master_count是根据节点参数个数以及replacas个数决定的。
第585行-594行:根据节点的个数,对每个master节点所对应的slot范围进行计算。

五、 配置集群

Redis-trib通过ruby连redis的客户端进行配置集群

  1. 对主节点进行slot分配(addslots),cluster_state become ok and cluster_slots_assigned become not null
  2. 为每个节点设置不同的config_epoch(set-config-epoch)
  3. 节点加入集群(CLUSTER MEET)
  4. 主从配置(replicate)
  5. 等待所有节点都有相同的集群配置信息

六、 集群状态检测

  1. 检查是否有open slot
    Openslot定义为slot信息为migrating或者importing,标示为->-。
    2.检查slot是否全覆盖


Redis-trib.rb –reshard源码解析

一、概述

在新主节点被加入集群后,他没有任何slot数据,需要通过reshard从其他节点中迁移些slot到新节点。

二、 流程图

Redis-trib.rb解析

三、 关键步骤解析

说明:compute_reshard_table方法主要用来智能计算每个目标节点需要迁移多少slot

Redis-trib.rb解析
775行 通过slot个数对源节点进行排序,slot多的排在前面
776行-778行 计算源节点的slot总个数
779行-785行 可以看到按照节点占slot总数的百分比来迁移slot,及slot个数越多的节点将被迁移更多。还可以看到slot节点最多的节点会为slot的最大整数
786行-791行 将slot的分派到节点的信息插入moved变量中

说明:在migrate节点之前需要设置slot importing状态和migrating状态

Redis-trib.rb解析
 redis支持动态迁移。当slot被设置为状态migrating状态后,当redis client查询节点这个slot所对应的key时,如果节点发现这个key存在直接返回值,如果发现这个key不存在自己的slot里他会发送asking 请求告诉客户端去迁移的目标节点查并且不更改客户端维护的slot分布信息,当客户端请求目标节点时该slot时都是refuse并重定向的,当请求包含asking时他就会接受这个请求并读取key。当迁移完成,他会设置setslot node ,这个操作将会把slot迁移状态清除并设置该slot的新的目标节点。



Redis-trib.rb --del-node

一、概述

del-node用于剔除集群中的节点。

二、流程图

Redis-trib.rb解析

三、关键步骤

说明:get_master_with_least_replicas方法如果delete node有从库,他将指定他的从库去其他主节点。

Redis-trib.rb解析
337行 选出集群中的master
338行-341行 根据master的slave个数排序,取出最少slave的master作为目标从库的新master

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯