`
on__the__way
  • 浏览: 23995 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Redis哨兵机制

 
阅读更多

      哨兵(sentinel)是Redis高可用的解决方案,用来管理Redis实例,主要是监控、自动故障转移、通知、配置提供者。

    1、sentinel的初始化

    当一个 Sentinel 启动时, 它需要执行以下步骤:

    a) 初始化服务器。sentinel本质上是一个运行在特殊模式下的Redis实例。该模式下redis实例主要使用发布订阅、文件事件处理器、和时间事件处理器的的功能。

    b) Redis 服务器使用的代码替换成 Sentinel 专用代码。如服务的端口号,支持不同的命令列表等。

    c) 初始化 Sentinel 状态。保存所有和sentinel相关的状态,如配置纪元、监听的主服务器字典等。

    d) 初始化 Sentinel 的监视主服务器列表。sentinelRedisInstance结构是被sentinel监听的redis实例结构,可以为主服务器、从服务器或者sentinel。

 

typedef struct sentinelRedisInstance {
    // 标识值,记录了实例的类型,以及该实例的当前状态
    int flags;
    // 实例的名字
    // 主服务器的名字由用户在配置文件中设置
    // 从服务器以及 Sentinel 的名字由 Sentinel 自动设置
    // 格式为 ip:port ,例如 "127.0.0.1:26379"
    char *name;
    // 实例的运行 ID
    char *runid;
    // 配置纪元,用于实现故障转移
    uint64_t config_epoch;
    // 实例的地址
    sentinelAddr *addr;
    // SENTINEL down-after-milliseconds 选项设定的值
    // 实例无响应多少毫秒之后才会被判断为主观下线(subjectively down)
    mstime_t down_after_period;
    // SENTINEL monitor <master-name> <IP> <port> <quorum> 选项中的 quorum 参数
    // 判断这个实例为客观下线(objectively down)所需的支持投票数量
    int quorum;
    // SENTINEL parallel-syncs <master-name> <number> 选项的值
    // 在执行故障转移操作时,可以同时对新的主服务器进行同步的从服务器数量
    int parallel_syncs;
    // SENTINEL failover-timeout <master-name> <ms> 选项的值
    // 刷新故障迁移状态的最大时限
    mstime_t failover_timeout;
    // ...
} sentinelRedisInstance;

 

    通过读取sentinel配置文件来初始化master字典中的结构。

 

     

 

    e) 创建连向主服务器的网络连接。创建与主服务器的命令连接和订阅连接。

    2、自动发现从服务器和sentinel实例

    sentinel通过INFO命令获取主服务器的运行id等信息以及所有从服务器的信息,对sentinelState结构进行更新。同时创建到从服务器的命令连接和订阅连接,也通过每十秒一次的INFO命令获取从服务器的状态。每个master的sntinelRedisInstance中包含一个slave字典,保存从服务器。示意图如下图

 

    sentinel会向监听的所有主服务器和从服务器的hello频道发送信息,其他监听该主服务器sentinel通过订阅连接可接收到该信息,用于更新对其他sentinel的认知。监听主服务器的sentinelRedisInstance中包含一个sentinel字典保存监听主服务器的sentinel实例。同时会创建一个命令连接,用于之后的故障转移等。

    3、监控

    sentinel会每秒一次的频率与之前创建了命令连接的实例发送PING,包括主服务器、从服务器和sentinel实例,以此来判断当前实例的状态。down-after-milliseconds时间内PING连接无效,则将该实例视为主观下线。之后该sentinel会向其他监控同一主服务器的sentinel实例询问是否也将该服务器视为主观下线状态,当超过某quorum后将其视为客观下线状态。

    当一个主服务器被某sentinel视为客观下线状态后,该sentinel会与其他sentinel协商选出零头sentinel进行故障转移工作。每个发现主服务器进入客观下线的sentinel都可以要求其他sentinel选自己为领头sentinel,选举是先到先得。同时每个sentinel每次选举都会自增配置纪元,每个纪元中只会选择一个领头sentinel。如果所有超过一半的sentinel选举某sentinel领头sentinel。之后该sentinel进行故障转移操作。

    如果一个Sentinel为了指定的主服务器故障转移而投票给另一个Sentinel,将会等待一段时间后试图再次故障转移这台主服务器。如果该次失败另一个将尝试,Redis Sentinel保证第一个活性(liveness)属性,如果大多数Sentinel能够对话,如果主服务器下线,最后只会有一个被授权来故障转移。 同时Redis Sentinel也保证安全(safety)属性,每个Sentinel将会使用不同的配置纪元来故障转移同一台主服务器。

    4,、故障转移

    首先是从主服务器的从服务器中选出一个从服务器作为新的主服务器。选点的依据依次是:网络连接正常->5秒内回复过INFO命令->10*down-after-milliseconds内与主连接过的->从服务器优先级->复制偏移量->运行id较小的。选出之后通过slaveif no ont将该从服务器升为新主服务器。

    通过slaveof ip port命令让其他从服务器复制该信主服务器。

    最后当旧主重新连接后将其变为新主的从服务器。注意如果客户端与就主服务器分隔在一起,写入的数据在恢复后由于旧主会复制新主的数据会造成数据丢失。

    故障转移成功后会通过发布订阅连接广播新的配置信息,其他sentinel收到后依据配置纪元更大来更新主服务器信息。Sentinel保证第二个活性属性:一个可以相互通信的Sentinel集合会统一到一个拥有更高版本号的相同配置上。    

  • 大小: 15.6 KB
  • 大小: 42.5 KB
分享到:
评论

相关推荐

    Redis哨兵机制-你不得不了解的知识点

    什么是Redis哨兵机制? 哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement ...

    redis哨兵模式

    包含REDIS3.2.12安装包,以及redis哨兵机制的伪集群部署和真集群部署,本人已经测试过可以

    Redis3.2.1 集群(包含主从,哨兵机制)

    Reddis3.2.1集群,包含主从复制,哨兵机制 欢迎大家下载

    redis集群:redis-sentinel(哨兵机制)集群

    redis-sentinel(哨兵机制)集群安装包,解压即可使用;在linux环境上快速搭建一个简单的基于哨兵模式的redis集群

    为什么 Redis 要有哨兵机制?.doc

    为什么 Redis 要有哨兵机制?.doc

    Redis高级特性解析:持久化、主从复制与哨兵机制全面探讨

    本文详细探讨了Redis的三大高级特性:持久化、主从复制和哨兵机制。首先,我们探讨了Redis的两种持久化方式:RDB和AOF。RDB通过定期生成数据快照来实现数据的持久化,而AOF则记录每个写操作,提供更强的数据安全性。...

    Redis 入门、哨兵机制及集群高可用

    课程简介基于Linux安装Redis5.x,课程内容讲解Redis的基础操作,AOF/RDB及哨兵机制原理与高可用实现,后继详细讲解了Redis集群及分布式锁. 同时通过Spring Boot2.x实现Redis的哨兵访问及集群访问等操作,并模拟演示...

    Redis单机搭建主从复制以及哨兵机制

    Redis单机搭建主从复制以及哨兵机制 适用于学习Redis集群搭建,哨兵模式集群搭建

    吴天雄--Redis个人笔记.doc

    四、命令操作(redis的数据结构、高级命令),五、redis的安全性,六、redis主从复制的特点及实现过程(配置),七、redis哨兵,八、redis简单事务,九、持久化(redis的持久化机制RDB/AOF),十、redis发布与订阅...

    Redis主从复制、持久化、哨兵

    (一)Redis集群的主从复制 概念 ...(二)持久化机制 redis 是一个支持持久化的内存数据库,也就是说 redis 需要经常将内存中的数据同步到磁盘来保证持久化.redis 支持两种持久化方式,一种是 Snapsho

    第四十六章:Redis sentinel哨兵集群1

    二、Redis sentinel的工作机制 三、案例:构建Redis sentinel集群 四、案例:Keepalived+Haproxy+Redis实现高可用

    Redis实战PDF价值50元,如何实现哨兵的主从,以及jedisJAR包

    在开发项目的时候,因为需要用到redis,所以我自己学习搭建了一个哨兵机制,非常实用,对数据的存储写入都大大提升了效率,附赠版本最稳定的jar包,供大家参考

    redisStudy.zip

    基本回答:哨兵主要就是启动哨兵(redis特殊)节点,对主节点进行监控,如果半数以上发现ping主节点不通了,认为主节点挂了,则进行故障转移,就是选出一个从节点代替主节点 2.Rediscluster集群模式 基本回答:Redis...

    redis2加强.doc

    特性 1〉速度快,数据放在内存中,官方给出的读写性能 10 万/S,与机器性能也有关 ...8〉高可用和分布式:哨兵机制实现高可用,保证 redis 节点故障发现和自动转移 9〉客户端语言多:java php python c c++ nodejs 等

    redis教案.docx

    redis从入门到实战,包括redis的介绍,安装,基本命令,命令介绍。以及redis的实战场景。还有redis的深入了解(redis集群,哨兵模式,心跳机制等等)

    Redis持久化、主从与哨兵架构详解开发文档

    bgsave的写时复制(COW)机制 Redis 借助操作系统提供的写时复制技术(Copy-On-Write, COW),在生成快照的同时,依然可以正常 处理写命令。简单来说,bgsave 子进程是由主线程 fork 生成的,可以共享主线程的所有内存...

    redis集群服务端

    使用哨兵机制,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应,同时在数据量大的情况下,写入节点无法做水平扩展,所以为了最大化利用内存,可以采用集群模式,在redis在3.0...

    Redis个人总结

    Redis个人总结:1、 Redis使用5种数据结构 2、Redis事务 3、Redis集成Java 4、Redis与Lua语言 5、Redis持久化 6、哨兵机制(服务监控)

    windows 64位redis版本2.8.2401此版本支持哨兵

    windows64位 2.8版本可支持哨兵,redis是当前开发下支持缓存较为成熟的一个工具,其持久化和主从备份的机制,可以有效的保证数据的安全性

Global site tag (gtag.js) - Google Analytics