Redis学习笔记——哨兵(sentinel)

RedisSentinel系统监控Redis主从库状态,当主库故障时自动将从库切换为主库,确保服务连续性。Sentinel通过配置文件设定监控参数,如down-after-milliseconds和quorum,判断主观和客观下线,并基于Raft算法选举领导者哨兵执行故障迁移。在故障转移过程中,Sentinel会选择优先级最高、复制数据最多、runid最小的从库作为新的主库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 是什么

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

他的作用:

  1. 监控redis运行状态,包括master和slave
  2. 当master down机,能自动将slave切换成新的master

 2 能干什么

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

  2. 消息通知        哨兵可以将故障转移的结果发送给客户端

  3. 故障转移        如果Mater异常,则会进行主从切换,将其中一个Slave作为新Master

  4. 配置中心         客户端通过链接哨兵来获得当前Redis服务的主节点地址

 3 如何使用

 3.1 Redis Sentinel架构,前提说明

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

        一主二从        用于数据读取和存放

 3.2 操作步骤

 3.2.1 配置文件修改,配置参数说明

bind                  服务器监听地址,用于客户端连接,默认本机的地址

daemonize        是否以后台daemon方式运行

protected-mode     是否开启安全模式

port                   端口号

logfile                日志文件的路径

pidfile                pid文件路径

dir                     工作目录

sentinel monitor <master-name> <ip> <redis-port> <quorum>  设置要监控的master服务器,quorum表示最少有几个哨兵认可客观下线,统一故障迁移的法定票数

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>:

客户端重新配置主节点参数脚本

3.2.2 通用配置

bind 0.0.0.0

daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.111.169 6379 2
sentinel auth-pass mymaster 111111

3.3 配置文件总结

        配置文件中的内容,在运行期间会被sentinel动态进行修改

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

 4 哨兵的运行流程和选举原理

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

4.1  SDown主观下线

        SDown主观下线(Subjectively Down):SDOWN(主管不可用)是单个sentinel自己的主观上检测到master的状态,从sentinel的角度看,如果发送了PING心跳后,在一定时间内没有收到合法的回复,就达到了SDOWN的条件;在sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度(如下图所示)

sentinel down-after-milliseconds <masterName> <timeout>

 表示master被当前sentinel实例认定为失效的间隔时间,这个配置其实就是进行主观下线的一个依据

4.2 ODown客观下线

        ODown客观下线(Objectively Down):ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能认为一个master客观上已经宕机(配置如下图)

quorum这个参数是进行客观下线的一个依据,法定人数/法定票数

        意思是至少有quorum个sentinel认为这个master有故障才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因导致无法连接master,而此时master并没有出现故障,所以这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。

4.3 领导者哨兵的选举

        当主节点被判断客观下线以后,哥哥烧饼节点会进行协商,选举出一个领导者哨兵节点,并由这个领导者节点进行failover(故障迁移)

        哨兵领导者是根据Raft算法选举出来的:

       

监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得

即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者

4.4 故障迁移并选举出一个新的master

4.4.1 选举新的master

        从下线的主服务的所有从服务中挑选一个从服务,将其转成主服务,选择条件依次为:

  1. 选择优先级靠前的
  2. 选择偏移量最大的
  3. 选择runid最小的从服务

4.4.2 原先的slave向新的master拜码头

        挑选出新的主服务后,sentinel向原主服务的从服务发送   “slaveof  新主服务 ”  的命令,复制新master

4.4.3 旧主俯首

        当已经下线的原主服务上线后,sentinel会向其发送   “slaveof   新主服务”   的命令,让其成为新主的从服务

优先级在redis.conf中slave-priority   100

偏移量是指获得原主数据最多的

每个redis实例启动后都会随机一个40位的runid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值