【redis-基础】主动复制 哨兵架构

2024-05-23 22:58

本文主要是介绍【redis-基础】主动复制 哨兵架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主从复制

阶段

  • 连接建立阶段
    • 保存主节点信息:从节点服务器内部维护了两个字段,即masterhost和masterport字段,用于存储主节点的IP地址和端口号
    • 建立socket连接:从节点每秒调用复制定时函数replicationCron一次,如果发现有主节点可以连接,就会根据主节点的IP地址和端口号来建立socket连接。
    • 发送ping命令:从节点成为主节点的客户端之后,发送ping命令进行首次请求,目的是检查socket连接是否可用,以及主节点当前是否能够处理请求。
    • 身份验证:如果从节点中设置了masterauth(身份验证)选项,那么从节点需要向主节点进行身份验证;如果没有设置该选项,则不需要验证。
    • 发送从节点端口信息:身份验证之后,从节点会向主节点发送其监听的端口号,主节点将该信息保存到该从节点对应的客户端的slave_listening_port字段中。
  • 数据同步阶段
    • 全量复制
    • 部分复制
  • 命令传播阶段

哨兵架构

组成

  • 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的Redis节点,不存储数据
    • 监控:哨兵节点不断检查用户的主从实例是否按照预期在工作
    • 通知:如果被监控的redis实例有问题,哨兵节点可以通过一个api来通知系统管理员或者其他应用程序
    • 自动故障转移:如果一个主节点没有按照预期工作,哨兵节点会启动故障转移过程,把一个从节点提升为主节点,重新配置其他的从节点并使用新的主节点,使用redis服务的应用程序在连接的时候也会被通知使用新的主节点地址
    • 配置提供者:哨兵节点为客户端提供服务来源,对于指定的服务,客户端连接到sentinel来寻找当前主节点的地址。当发生故障转移时,哨兵节点将报告新的主节点地址
  • 数据节点:主节点和从节点都是数据节点

搭建

启动
  • redis-sentinel sentinel.conf
  • redis-server sentinel.conf --sentinel
注意
  • 必须使用一个配置文件来运行Sentinel,这个配置文件被系统用于存储当前状态

  • 如果重启Sentinel,那么这些状态会被重新载入

  • 如果没有配置文件或者配置文件的路径不对,Sentinel就会拒绝启动

  • Sentinel监听TCP端口26379

  • 哨兵节点最少三台并且必须为单数

  • 三个Sentinel实例应该放在独立的物理机电脑或虚拟机中

  • Sentinel+Redis分布式系统在失败期间并不能确保写入请求被保存,因为Redis使用异步复制

  • 如果因为在开发环境或者生产环境中通过了测试而没有设置安全的高可用,那么就可能会因为一个错误的配置而导致主机宕机,以至不能继续提供正常的服务。

配置sentinel.conf文件
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5
参数名实例解释
sentinel monitorsentinel monitor quorum是指同意主节点不可用所需的Sentinel的数量
quorum在检测到失败后投票时使用。
sentinel down-after-millisecondssentinel down-after-milliseconds <master_name> <option_value>当一个Redis实例失去联系(要么不回复我们的请求,要么回复一个错误)超过了这个指定的时间(以毫秒为单位),就可以认为这个Redis实例挂掉了。
sentinel parallel-syncssentinel parallel-syncs <master_name> <option_value>设置从节点的数量,这些从节点在一次故障转移过后可以使用新的主节点进行重新配置。

命令

  • PING:仅仅返回PONG。
  • SENTINEL masters:展示监控的主节点和它们的状态列表。
  • SENTINEL master:展示指定的主节点的信息。
  • SENTINEL salves :展示指定主节点的从节点以及它们的状态。
  • SENTINEL sentinels :展示指定主节点的sentinel实例以及它们的状态。
  • SENTINEL get-master-addr-by-name :返回主节点的IP地址和端口号。如果这个主节点正在进行故障转移,就返回提升的从节点的IP地址和端口号。
  • SENTINEL reset:该命令将会根据匹配的名称重置主节点,pattern参数是通配符(glob-style)类型,重置Sentinel进程清除主节点中之前的所有状态,并且移除主节点发现和关联的从节点与Sentinel。
  • SENTINEL failover:如果主节点是不可达的,就强制开始故障转移,不需要其他的Sentinel同意。
  • SENTINEL ckquorum:检查当前的Sentinel配置对于主节点的故障转移是否能达到仲裁人数(即同意票数),以便授权进行故障转移。这个命令应该在监控系统中使用以检查Sentinel的部署是否正常。
  • SENTINEL flushconfig:强制Sentinel把它的配置和状态重新写入磁盘(即刷盘)。每次Sentinel状态有改变,Sentinel就会重写配置信息。有时候由于错误的操作、磁盘故障、程序包升级脚本或配置管理等原因会导致配置文件的丢失。在这种情况下,最容易的解决办法就是要强制Sentinel重写配置文件,即使之前的配置文件完全丢失了,这个命令也能很好地完成工作。

这篇关于【redis-基础】主动复制 哨兵架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/996655

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Redis实现分布式锁全过程

《Redis实现分布式锁全过程》文章介绍Redis实现分布式锁的方法,包括使用SETNX和EXPIRE命令确保互斥性与防死锁,Redisson客户端提供的便捷接口,以及Redlock算法通过多节点共识... 目录Redis实现分布式锁1. 分布式锁的基本原理2. 使用 Redis 实现分布式锁2.1 获取锁

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片