iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis-trib.rb解析
  • 745
分享到

Redis-trib.rb解析

2024-04-02 19:04:59 745人浏览 八月长安
摘要

Redis-trib.rb –create源码解析 一、 介绍   Redis-trib.rb为主流的Redis管理工具,对Redis一系列命令进行了封装通过ruby客户端完成Create Cluster

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

您可能感兴趣的文档:

--结束END--

本文标题: Redis-trib.rb解析

本文链接: https://www.lsjlt.com/news/42000.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis如何修改redis-trib.rb使其import支持密码
    这篇文章给大家分享的是有关Redis如何修改redis-trib.rb使其import支持密码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。需求,现在需要将一个单机redis数据...
    99+
    2024-04-02
  • 解析Redis Cluster原理
    目录一、前言二、为什么需要RedisCluster三、RedisCluster是什么四、节点负载均衡五、什么是一致性哈希六、虚拟节点机制七、RedisCluster采用的什么算法八、...
    99+
    2024-04-02
  • 浅析Redis Sentinel 与 Redis Cluster
    目录一、前言二、Redis Sentinel 及 Redis Cluster 简介1、Redis Sentinel1.1、Redis Sentinel 集群模式的 “仲裁会”2、Re...
    99+
    2024-04-02
  • python 分析redis
    #!/usr/bin/env python#coding=utf-8import MySQLdbimport redisimport osimport socket,fcntl,struct#print redis._file_def ge...
    99+
    2023-01-31
    python redis
  • 硬核 Redis 高频面试题解析
    目录1、Redis 是单线程还是多线程?2、为什么 Redis 是单线程?3、Redis 为什么使用单进程、单线程也很快4、Redis 在项目中的使用场景5、Redis 常见的数据结...
    99+
    2024-04-02
  • 基于Golang实现Redis协议解析器
    目录RESP协议本文实现Redis的协议层,协议层负责解析指令,然后将指令交给核心database执行 echo database用来测试协议层的代码 https://github.com/csgopher/go-red...
    99+
    2023-03-24
    Golang编写Redis协议解析器 Golang Redis协议解析器 Golang Redis协议解析 Golang Redis
  • Redis cluster集群模式的原理解析
    redis cluster redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求 自动将数据进行分片,每个master上放...
    99+
    2024-04-02
  • Redis命令处理过程源码解析
    本文基于社区版Redis 4.0.8 1、命令解析 Redis服务器接收到的命令请求首先存储在客户端对象的querybuf输入缓冲区,然后解析命令请求的各个参数,并存储在客户端对象...
    99+
    2024-04-02
  • Redis分布式锁实例分析讲解
    目录1 一人一单并发安全问题2 分布式锁的原理和实现2.1 什么是分布式锁2.2 分布式锁的实现1 一人一单并发安全问题 之前一人一单的业务使用的悲观锁,在分布式系统下,是无法生效的。 理想的情况下是这样的:一个线程成功...
    99+
    2022-12-06
    Redis分布式锁总结 Redis分布式锁
  • Redis Lua同步锁实现源码解析
    目录Redis+Lua同步锁Jedis配置Jedis工具类→获取jedisredis 锁工具类加锁示例(jedis+lua)Redis+Lua同步锁 Jedis配置 @Configuration @Getter...
    99+
    2023-05-19
    Redis Lua同步锁 Redis Lua 源码解析
  • 一文解析Redis读写分离技术
    导读 云数据库Redis版不管主从版还是集群规格,replica作为备库不对外提供服务,只有在发生HA的时候,replica提升为master后才承担读写流量。这种架构读写请求都在master上完成...
    99+
    2024-04-02
  • Go操作redis与redigo的示例解析
    目录Go-操作redis安装连接使用设置key过期时间批量获取mget、批量设置mset列表操作hash操作Pipelining(管道)redis发布会订阅模式事务操作万能操作连接r...
    99+
    2024-04-02
  • 解析 Node.js Redis 和 Node.js 的性能博弈
    性能优势 内存存储:Redis 将数据存储在内存中,从而实现比关系型数据库更快的读写操作。 非阻塞 I/O:Redis 采用非阻塞 I/O 模型,这意味着它不会阻塞应用程序线程,从而提高并发性。 数据结构丰富:Redis 提供了丰富的底...
    99+
    2024-04-03
    Redis 一种流行的键值存储数据库 以其高吞吐量和低延迟而闻名。通过与 Node.js 集成 开发人员可以利用 Redis 的优势 提升 Node.js 应用程序的性能。
  • redis-exporter监控redis的实例分析
    本篇内容介绍了“redis-exporter监控redis的实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2024-04-02
  • Golang 实现Redis 协议解析器的解决方案
    本文是 《用 golang 实现一个 Redis》系列文章第二篇,本文将分别介绍Redis 通信协议 以及 协议解析器 的实现,若您对协议有所了解可以直接阅读协议解析器部分。 Redis 通信协议 Redis 自 2.0...
    99+
    2024-04-02
  • Golang 实现Redis 协议解析器的解决方案
    本文是 《用 Golang 实现一个 Redis》系列文章第二篇,本文将分别介绍Redis 通信协议 以及 协议解析器 的实现,若您对协议有所了解可以直接阅读协议解析器部分。 Red...
    99+
    2024-04-02
  • Redis与MySQL数据一致性问题解析
    引言 在现代的应用程序开发中,数据一致性是一个非常重要的问题。对于使用MySQL作为主要数据库的应用程序而言,保持与Redis缓存之间的数据一致性尤为关键。Redis作为一种高性能的内存数据库,常用于缓存和提高应用程序的读取性能。然而,由于...
    99+
    2023-09-01
    redis mysql 数据库
  • Redis数据持久化方式技术解析
    RDB(Redis DataBases) 1、RDB是什么: 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。 Red...
    99+
    2024-04-02
  • Redis的简介分析
    这篇文章主要介绍Redis的简介分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 Redis简介什么是Redis Redis是完全开源免费的,遵守BSD协议,是⼀个⾼性能(NOS...
    99+
    2024-04-02
  • 解析高可用Redis服务架构分析与搭建方案
    基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysq...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作