【Redis学习】Redis哨兵(sentinel)

这篇具有很好参考价值的文章主要介绍了【Redis学习】Redis哨兵(sentinel)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

理论简介

定义

吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。

作用:

  1. 监控redis运行状态,包括master和slave

  2. 当master down机,能自动将slave切换成新master

哨兵可以类比为无人值守的运维。

【Redis学习】Redis哨兵(sentinel)

功能

主从监控

监控主从redis库运行是否正常

消息通知

哨兵可以将故障转移的结果发送给客户端

故障转移

如果Master异常,则会进行主从切换,将其中一个Slave作约新Master

配置中心

客户端通过连接哨兵来获得当前Redis服务的主节点地址

【Redis学习】Redis哨兵(sentinel)

案例实操

架构说明

3个哨兵

自动监控和维护集群,不存放数据,只是吹哨人

【Redis学习】Redis哨兵(sentinel)

1主2从

用于数据读取和存放

步骤

/myredis目录下新建或者拷贝sentinel.conf文件,名字绝不能错

先看看/opt目录下默认的sentinel.conf文件的内容

  • 重点参数项说明

    sentinel monitor <master-name> <ip> <redis-port> <quorum>

    设置要监控的master服务器

    quorum表示最少有几个哨兵认可客观下线,同意故障迁移的法定票数。

    网络是不可靠的,有时候一个sentinel会因为网络堵塞而误以为一个master redis已经死掉了,在sentinel集群环境下需要多个sentinel互相沟通来确认某个master是否真的死了,quorum这个参数是进行客观下线的一个依据,意思是至少有quorum个sentinel认为这个master有故障,才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因,导致无法连接master,而此时master1没有出现故障,所以,这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。

    sentinel auth-pass <master-name> <password>

    master设置了密码,连接master服务的密码

sentinel down-after-milliseconds <master-name> <milliseconds>
# 指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线

sentinel parallel-syncs <master-name> <nums>
# 表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据

sentinel failover-timeout <master-name> <milliseconds>
# 故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败

sentinel notification-script <master-name> <script-path>
# 配置当某一事件发生时所需要执行的脚本

sentinel client-reconfig-script <master-name> <script-path> 
# 客户端重新配置主节点参数脚本
  • 本次案例哨兵sentinel文件通用配置

    由于机器硬件关系,我们的3个哨兵都同时配置进192.168.111.169同一台机器sentinel26379.conf、sentinel26380.conf 、sentinel26381.conf
    【Redis学习】Redis哨兵(sentinel)

  • 先启动一主二从3个redis实例,测试正常的主从复制

    架构说明

    【Redis学习】Redis哨兵(sentinel)

    3台不同的虚拟机实例,启动三部真实机器实例并连接,配置并观察文件内容

以下是哨兵内容部分

  • 再启动3个哨兵,完成监控
redis-sentinel sentinel26379.conf --sentinel
redis-sentinel sentinei26380.conf --sentinel
redis-sentinel sentinel26381.conf --sentinel

【Redis学习】Redis哨兵(sentinel)

  • 启动3个哨兵监控后再测试一次主从复制

    岁月静好一切OK

    【Redis学习】Redis哨兵(sentinel)

  • 原有的master挂了

    手动关闭6379服务器,模拟master挂了

    • 问题思考

      两台从机数据是否OK?——Y

      是否会从剩下的2台机器上选出新的master?——Y

      之前down机的master机器重启回来,谁将会是新老大?——node02

      会不会双master冲突?——N

    • 揭晓答案

      数据OK,了解Broken Pipe

      【Redis学习】Redis哨兵(sentinel)

      投票新选

      • 谁是master,限本次案例

        6381被选为新master,上位成功

        以前的6379从master降级变成了slave

        6380还是slave,只不过换了个新老大6381(6379变6381)

  • 对比配置文件

    vim sentinel26379.conf

    【Redis学习】Redis哨兵(sentinel)

    老master,vim redis6379.conf

    【Redis学习】Redis哨兵(sentinel)

    新master,vim redis6381.conf

    【Redis学习】Redis哨兵(sentinel)

    • 结论

      文件的内容,在运行期间会被sentinel动态进行更改

      Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

其它备注

生产都是不同机房不同服务器,很少出现3个哨兵全挂掉的情况

可以同时监控多个master,一行一个

运行流程

当一个主从配置中的master失效之后,sentinel可以选举出一个新的master用于自动接替原master的工作,主从配置中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某台sentinel无法连接到master导致误切换。

故障切换

三个哨兵监控一主二从,正常运行中…

  • SDown主观下线(Subjectively Down)

    SDOWN(主观不可用)是单个sentinel自己主观上检测到的关于master的状态,从sentinel的角度来看,如果发送了PING心跳后,在一定时间内没有收到合法的回复,就达到了SDOWN的条件。

    sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度(默认30s)

    【Redis学习】Redis哨兵(sentinel)

  • ODown客观下线(Objectively Down)

    ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能认为一个master客观上已经宕掉

    【Redis学习】Redis哨兵(sentinel)

    【Redis学习】Redis哨兵(sentinel)

  • 选举出领导者哨兵(哨兵中选出兵王)

    当主节点被判断客观下线以后,各个哨兵节点会进行协商,先选举出一个**领导者哨兵节点(兵王)**并由该领导者节点,也即被选举出的兵王进行failover(故障迁移。

    哨兵领导者,兵王如何选出来的?——Raft算法

    【Redis学习】Redis哨兵(sentinel)

由兵王开始推动故障切换流程并选出一个新master

选举算法

新主登基

某个Slave被选中成为新Master

选出新master的规则,剩余slave节点健康前提下,执行如下规则:

【Redis学习】Redis哨兵(sentinel)

redis.conf文件中,优先级slave-priority或者replica-priority最高的从节点(数字越小优先级越高) →

复制偏移位置**offset(同步数据最多)**最大的从节点 →

最小Run ID的从节点字典顺序,ASCII码

群臣俯首

一朝天子一朝臣,换个码头重新拜

  • 执行slaveof no one命令让选出来的从节点成为新的主节点,并通过slaveof命令让其他节点成为其从节点

    Sentinel leader会对选举出的新master执行slaveof no one操作,将其提升为master节点

    Sentinel leader向其它slave发送命令,让剩余的slave成为新的master节点的slave

旧主拜服

老master回来也认怂

将之前已下线的老master设置为新选出的新master的从节点,当老master重新上线后,它会成为新master的从节点。

entinel leader会让原来的master降级为slave并恢复正常工作。

小结

上述的failover操作均由sentinel自己独自完成,完全无需人工干预。

【Redis学习】Redis哨兵(sentinel)

使用建议

哨兵节点的数量应为多个,哨兵本身应该集群,保证高可用

哨兵节点的数量应该是奇数

各个哨兵节点的配置应一致

如果哨兵节点部署在Docker等容器里面,尤其要注意端口的正确映射

哨兵集群+主从复制,并不能保证数据零丢失 ——集群文章来源地址https://www.toymoban.com/news/detail-406488.html

到了这里,关于【Redis学习】Redis哨兵(sentinel)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis 哨兵 sentinel(一)配置

    sentinel巡查监控后台master主机是否故障,如果故障根据 投票数 自动将某一个从库转换为新主库,继续对外服务 sentinel 哨兵的功能 监控 监控主从redis库运行是否正常 消息通知 哨兵可以将故障转移的结果发送给客户端 故障转移 如果master异常,则会进行主从切换,将其中一个

    2024年02月07日
    浏览(43)
  • Redis高可用:哨兵机制(Redis Sentinel)详解

    目录 1.什么是哨兵机制(Redis Sentinel) 2.哨兵机制基本流程 3.哨兵获取主从服务器信息 4.多个哨兵进行通信 5.主观下线和客观下线 6.哨兵集群的选举 7.新主库的选出 8.故障的转移 9.基于pub/sub机制的客户端事件通知 Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心

    2024年02月12日
    浏览(42)
  • spring redis Sentinel 哨兵 原理

    redis 常用的连接客户端 有三个 Jedis:是老牌的Redis的Java实现客户端,提供了比较全面的Redis命令的支持, Redisson:实现了分布式和可扩展的Java数据结构。 Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。 如果未指定 redis cli

    2023年04月23日
    浏览(40)
  • 【Redis】高可用之二:哨兵(sentinel)

     本文是Redis系列第5篇,前4篇欢迎移步  【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客 关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确,我们直接看官网。 https://blog.csdn.net/aqin1012/article/details/130365083 【

    2024年02月12日
    浏览(66)
  • redis夯实之路-哨兵(Sentinel)机制详解

    Sentinel(哨兵)保证了redis的高可用性,一个Sentinel或多个Sentinel组成的系统监视多个主从服务器,当主服务器下线时,自动将一个从服务器升级为主服务器。 集群监控:负责监控redis master和slave进程是否正常工作  消息通知:如果某个redis实例有故障,那么哨兵负责发送消息给

    2024年01月21日
    浏览(40)
  • 一份详细 redis sentinel 哨兵架构搭建步骤<写于2023-04-06>

    redis 哨兵架构,其实是在 主从架构 基础上延伸的,sentinel 哨兵模式的 redis 实例,不提供读写操作的。实例相互之间,会感知到。 code: port 26379 daemonize yes # 改为后台启动 pidfile “/var/run/redis‐sentinel‐26379.pid” logfile “26379.log” dir “/usr/local/redis‐5.0.3/data” #sentinel monitor

    2023年04月14日
    浏览(37)
  • redis集群和分片-Redis Cluster:分布式环境中的数据分片、主从复制和 Sentinel 哨兵

    当涉及到 Redis 中的集群、分片、主从复制和 Sentinel 哨兵时,这些是构建分布式 Redis 环境中非常重要的概念和组件。下面详细介绍这些概念以及它们在分布式环境中的作用。 Redis Cluster 是 Redis 官方提供的分布式解决方案,用于管理和维护多个 Redis 节点的分布式数据存储。R

    2024年02月13日
    浏览(61)
  • Redis学习笔记02(主从同步,哨兵,哨兵集群)

    redis具有高可靠性:1.数据尽量减少丢失(AOF和RDB来保障) 2.服务尽量减少中断.第二点通过增加冗余副本来保障。 读写分离:  减少保障数据一致性的开销。修改操作只会在主库上进行。 同步过程  1.psync包括了主库runID和复制进度offset。第一次采用全量复制协议(主库bgsav

    2024年02月02日
    浏览(88)
  • 微服务学习笔记--高级篇--(Redis哨兵)

    哨兵的作用和原理 搭建哨兵集群 RedisTemplate的哨兵模式 哨兵的作用 Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下: 监控:Sentinel会不断检查master和slave是否按预期工作 自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故

    2024年02月08日
    浏览(32)
  • 【Redis7学习日记】——复制、哨兵、集群

    设置多个 Redis 数据库, master 以写为主, slave 以读为主 当 master 数据库发生变化时,自动将新数据以异步的方式同步到与它关联的 slave 数据库中 功能概述: 实现了读写分离、容灾恢复、数据备份,以及通过水平扩容来支持高并发 那我们如何来使用呢? 通过配置 slave 从库来

    2023年04月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包