当前位置: 首页 > news >正文

Redis(六)——哨兵

Redis哨兵(Sentinel)​ 是一个分布式监控系统,专门用于管理Redis主从架构,实现自动故障检测和故障转移。就是为了解决我们上一篇说到的主从复制的痛点,只要主机挂了那么他的小弟会一直等待老大回来,不然只能提供读取的服务。如果老大彻底死了,那么只能天道力量手动介入了,不然这个社团没办法再正常运作了。

redis哨兵是一个redis服务器,但是他只负责监控,以及选举新的话事人,向客户端发送主机故障的报告信息等等,不能读写数据等哦。而且只要一使用哨兵监控那么都是最少三台哨兵服务器,因为我们都是社会主义,讲究的就是民主,讲究的就是少数服从多数,使用一般都是奇数,这样才能保证选择的正常,另外就是哨兵也是人,也可能生病,那么如果太少了万一流感一下不就全完了,所以保证这两个需求,最少就是三台redis哨兵。

怎么配置哨兵

我们的redis数据库服务器的配置文件叫redis.conf,那么哨兵的配置文件就是sentinel.conf,其实大多数配置和redis数据库配置是一样的,主要就是以下几个参数:

配置项

语法

默认值

作用

示例

监控主节点

sentinel monitor <name> <ip> <port> <quorum>

-

监控Redis主节点

sentinel monitor mymaster 127.0.0.1 6379 2

故障检测时间

sentinel down-after-milliseconds <name> <ms>

30000

故障检测超时(毫秒)

sentinel down-after-milliseconds mymaster 5000

故障转移超时

sentinel failover-timeout <name> <ms>

180000

故障转移超时(毫秒)

sentinel failover-timeout mymaster 300000

并行同步数

sentinel parallel-syncs <name> <num>

1

并行同步从节点数

sentinel parallel-syncs mymaster 1

认证密码

sentinel auth-pass <name> <password>

-

Redis节点密码

sentinel auth-pass mymaster MyPass123

配置纪元

sentinel config-epoch <name> <epoch>

-

配置纪元(自动)

sentinel config-epoch mymaster 12

当前纪元

sentinel current-epoch <epoch>

-

当前纪元(自动)

sentinel current-epoch 12

sentinel monitor <name> <ip> <port> <quorum>

我们先来看这个命令,前面的不用多说了,我们直接说<quorum>这个,这个参数表示的就是客观下线的投票数,如果我们设置为2,那么只要2个哨兵投票认为主机挂了,那么就开始选举新的老大了,为什么会有客观,因为网络是有波动的,网络出现问题就会让个别哨兵认为老大去了,所以必须设置数量,不然老大挂的实在是莫名其妙了。只有大家都认为挂了才挂了,这个叫客观。

那么主观是什么?个人认为他挂了呗。sentinel down-after-milliseconds <name> <ms>

这个就是检查主机是否真的死了的配置,默认30秒,要是30秒还没回应那么就认为他真的去了,当然还是需要投票表决的和上面的命令相关,还是老样子民主。

sentinel failover-timeout <name> <ms> 这个命令就是故障转移的时间,意思就是从选举到新老大登基的时间,如果超过了这个时间本次选举就作废了,要重新选举,这个name配置就是逻辑名称,其实没啥用处,因为这个时候的主机是谁我们启动前的配置并不知道。

怎么选老大

基本的流程我们知道了,那到底怎么选呢?首先我们的redis数据库服务器里不管是主机还是从机都要配置masterauth而且这个密码通常一样,如果想不一样就写到哨兵的脚本里面,因为我们也不知道谁是谁会成为老大,写到配置里就太假了。关于如何启动哨兵就不多说了,就是和redis启动的时候一样,只是从redis-service 变成了redis-sentinel 配置文件。

1.只要主机下线了,通过哨兵的选举后,旧老大再回来也只能做臣子了,新皇帝定多叫你太上皇,但是权利旧老大还是没用的,只能读不能写。

2.选举过程中或者选举后,一般都需要重新链接服务器,不然可能会报server closed the connection,或者broken pipe,不用惊慌等待片刻后重新链接就可以了。

3.只要启动哨兵后,哨兵会自动给自己的配置文件以及redis服务器的配置文件进行修改,哨兵的配置会增加一些主从复制的信息,而主机变小弟后配置文件是会动态写入新老大的配置的,而新老大也会被哨兵把旧老大的信息给删除掉,总结一句话就是哨兵会动态修改配置文件,不然你以为小弟变老大,其他人怎么找到老大的啊。

4.哨兵是可以监控多个主机的,也就是多个主从复制架构,配置还是一样,只是端口号名称不同就可以了,而且哨兵一般都是分布在不同的服务器上的,这个本应该也是这样,不然也不会出现某个哨兵网络波动的问题,主要是因为在一台服务器上的多个哨兵意义不大,因为哨兵也是会挂的,放一起不就一锅端了。

注意事项

进行投票的是确定是否让当前主机下台,而不是选举谁到新皇帝哦,这个是要注意的,选举的流程是这样的:

1,先是哨兵检查到主机下线了,心跳在故障检查时间内都没有回复,那么这个时候发现的哨兵A投了一票说主机死了,等到其他哨兵投票,确定挂了后。

2.在哨兵中进行投票,选择一个兵王,还是一样少数服从多数。

3.兵王选出来后,由这个兵王来选择谁来做老大,这个时候是不投票的,兵王选谁就是谁,其他的只能做小弟。

好,那这个兵王是怎么选的呢?怎么投票的呢?使用的就是Raft算法,简单来说就是先到先得,再没有收到其他哨兵想当兵王的情况下,会发送给其他哨兵说自己想当兵王,如果再发之前接到了其他哨兵想当兵王的申请,那么就只能同意了,这个就是先到先得Raft算法。

那兵王又是怎么选新皇帝的呢?总不能里面有黑幕吧?其实是这样的,

首先看权限,看看权限是否是一样的,但是通常情况下都是一样的,除非是上篇说的ABC了,也就是A是B的主机,B是C的主机,那么A挂了C都没资格出来选,都不是一辈的人。

然后,如果权限相同就选择偏移量大的,为什么?这个偏移量大表示的就是从老皇帝哪里复制的东西多,尽可能保证新皇登基不影响之前的数据,这个很好理解吧。

最后,然后还是相同就看runid了,也就是谁先启动谁当老大,太子嘛肯定优先是长子对不对。

既然皇帝选出来了,那么接下来肯定就是登基叩拜了,兵王会给新皇发送slaveof no one命令,同时会给小弟发送slaveof 新皇ip 端口,完成朝代更替,就算这个时候老皇帝来了也没用了,也会被兵王发送slaveof 新皇ip 端口成为臣子。同时写入到各种的配置文件中,下次启动还是这个皇帝,总不能让老皇帝复辟吧。

好了这个就是哨兵监控的无人运维,无需天道之力干涉了,非常的方便啊铁子们。

建议

这里再重申一下使用哨兵监控的建议:

1.哨兵一旦使用就是集群,就应该是多个,这样才有意义。

2.哨兵一般使用奇数,因为少数服从多数,偶数容易势均力敌而打架。

3.哨兵部署一般在不同服务器,保证服务的高可用,总不能一锅端吧。

4.哨兵各种的配置最好都一样,不能一个用6G一个用64G吧,那还公平吗?网络延迟什么的肯定不一样。

5.现在都是docker部署,一定要确定端口的正确映射。

6.哨兵+主从复制并不能保证数据不丢失,因为哨兵只保证选新老大,再新老大选出来的这段时间,写服务也好,复制服务也好都会停摆,数据肯定会丢失的,只是丢失多少的问题,所以这个时候就需要我们的集群了,这个我们下篇说。

总结

本篇主要讲的就是redis哨兵,以及哨兵配合主从复制的流程。

http://www.dtcms.com/a/609214.html

相关文章:

  • 网站错敏词整改报告,如何整改后如何定期自查自检
  • 网站验收时项目建设总结报告网站建设与维护本科教材
  • 【Java】使用国密2,3,4.仿照https 统一请求响应加解密
  • 华为对象存储:nginx代理临时访问地址后访问报错:Authentication Failed
  • 【2025-11-13】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
  • 【玩转多核异构】T153核心板RISC-V核的实时性应用解析
  • 单周期Risc-V指令拆分与datapath绘制
  • Java+EasyExcel 打造学习平台视频学习时长统计系统
  • 【PHP】使用buildsql构造子查询
  • 防火墙主要有哪些类型?如何保护网络安全?
  • 在线商城网站制作如东住房和城乡建设局网站
  • Java 与 PHP 开发核心良好习惯笔记(含通用+语言特有)
  • AI 电影制作迈入新阶段:谷歌云Veo 3.1模型发布,实现音频全覆盖与精细化创意剪辑
  • C++函数式策略模式中配置修改
  • [MCP][]快速入门MCP开发
  • 为食堂写个网站建设免费毕业设计的网站建设
  • 云原生数据平台(cloudeon)--核心服务组件扩展
  • 字典或者列表常用方法介绍
  • 计算机网络中的地址体系全解析(包含 A/B/C 类地址 + 私有地址 + CIDR)
  • SpringBoot教程(三十四)| SpringBoot集成本地缓存Caffeine
  • 专业摄影网站推荐专业做卖菜的网站
  • Hadess V1.2.5版本发布,新增推送规则、制品扫描等,有效保障制品质量与安全
  • 华清远见25072班单片机高级学习day1
  • Apache Flink运行环境搭建
  • Node.js(v16.13.2版本)安装及环境配置教程
  • Flutter 每日库: device_info_plus获取设备详细信息
  • 小马网站建设网站备案好
  • 做某网站的设计与实现网页设计代码案例
  • 生产级 Rust Web 应用架构:使用 Axum 实现模块化设计与健壮的错误处理
  • 大模型三阶段训练:预训练、SFT、RLHF解决的核心问题