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

redis详细教程(7.哨兵)

哨兵机制是Redis数据库提供的一种高可用性解决方案。它由一个或多个特殊的Redis服务器(称为哨兵)组成,这些服务器不执行数据存储功能,而是专注于监控和管理其他Redis服务器(主节点和从节点)。

为什么需要哨兵机制?

1. 防止数据服务中断
如果Redis的主数据库(主节点)出现问题,比如服务器死机或者网络连接断开,那么客户端就无法从该数据库读取或写入数据了,而哨兵会监控主节点,一旦发现主节点无法访问,它会自动将一个从数据库(从节点)升级为新的主数据库,这样客户端就可以继续读写数据,不会因为主节点的故障而中断服务。

2. 自动化处理
如果没有哨兵,当主节点出问题时,就需要人工去检查问题,然后手动将一个从节点升级为主节点,这个过程可能很慢,而且容易出错,哨兵可以自动完成这个过程,不需要人工干预,这样可以快速恢复服务,并且减少错误的发生。

3. 避免单点故障
如果只有一个主节点,那么这个主节点就是一个单点故障点,一旦它出问题,整个服务就会受到影响,而哨兵可以监控多个节点,包括主节点和从节点,即使一个节点出问题,哨兵也可以通过其他节点来恢复服务,这样就不会因为单个节点的故障而导致整个服务瘫痪。

下线判断:

哨兵机制通过主观下线和客观下线,确保了在主节点真正出现问题时能够及时进行故障转移,同时减少了因网络波动或哨兵自身问题导致的误判。这种设计提高了Redis集群的稳定性和可用性,确保了即使在主节点发生故障的情况下,也能快速恢复服务,减少对业务的影响。

主观下线:哨兵实例通过 PING 命令检测到主节点或从节点在规定时间内没有响应时,该哨兵会将其标记为主观下线,但由于网络波动、服务器压力等原因,单个哨兵可能会错误地将一个实际上仍然在线的节点判断为下线,对于从节点,哨兵可以直接将其标记为主观下线,因为从节点的下线通常不会影响整个集群的服务。但对于主节点,则需要更加谨慎。

客观下线:通过引入多个哨兵实例组成哨兵集群,可以减少单个哨兵因网络问题或自身状况不佳导致的误判。多个哨兵共同决策,提高了判断的准确性。它们采用“少数服从多数”的原则,即当有 N 个哨兵实例时,至少需要 N/2 + 1 个实例判断主节点为主观下线,才能将主节点标记为客观下线,一旦主节点被标记为客观下线,哨兵集群将启动故障转移流程,选择新的主节点,并重新配置从节点。

选新主库:

当主节点被标记为“客观下线”后,哨兵集群将开始故障转移过程,哨兵集群中的所有哨兵实例将进行选举,选择一个领头哨兵来执行故障转移操作。首先判断从库的网络状态,如果其网络总是断连,那么其不能成为主库,然后依次按照从库优先级,从库复制进度与从库id号的顺序对剩余从库进行筛选,最优的为新主库。

领头哨兵:

当主节点被多个哨兵节点检测为主观下线后,哨兵节点会向其他哨兵节点询问该主节点的状态,如果足够多的哨兵节点认为主节点客观下线,则触发领头哨兵选举。

每个哨兵节点都可以在检测到主节点客观下线后发起选举。哨兵节点A发起选举时,会做以下事情:

  1.  增加自己的纪元(epoch)值。
  2.  将自己的状态设置为LEADING,表示正在尝试成为领头哨兵。
  3.  向其他哨兵节点发送SENTINEL is-master-down-by-addr命令,请求它们投票。

其他哨兵节点收到投票请求后,会根据以下规则进行投票:

  1. 在每个纪元内,每个哨兵节点只能投一次票。
  2. 如果哨兵节点没有给其他哨兵节点投过票,并且请求中的纪元值大于或等于自己的纪元值,那么它会投赞成票。
  3. 哨兵节点将投票结果发送回发起选举的哨兵节点A。

哨兵节点A收集投票,如果它获得了大多数哨兵节点的支持,则成为领头哨兵,如果没有哨兵节点获得足够的票数,则在一段时间后,哨兵节点可以尝试重新发起选举。而一旦哨兵节点A成为领头哨兵,它会向其他哨兵节点发送通知,告知它们领头哨兵的身份,避免其他哨兵节点再次发起选举。

领头哨兵负责选择新的主节点并执行主从切换,在故障转移期间,如果领头哨兵失败,其他哨兵节点将重新开始选举过程。


http://www.kler.cn/a/377852.html

相关文章:

  • 使用SQLark如何将Oracle迁移到达梦数据库
  • HTMLCSS:3D 旋转卡片的炫酷动画
  • MYSQL安装(ubuntu系统)
  • JAVA 插入 JSON 对象到 PostgreSQL
  • WindowsDocker安装到D盘,C盘太占用空间了。
  • 深入探讨 Jenkins 中 HTML 格式无法正常显示的现象及解决方案
  • 为数据集而生的 SQL 控制台
  • 私有化视频平台EasyCVR视频汇聚平台接入RTMP协议推流为何无法播放?
  • 【LeetCode】每日一题 2024_11_2 使两个整数相等的位更改次数(位运算/模拟)
  • OPENAI官方prompt文档解析
  • 基于知识引导提示的因果概念提取(论文复现)
  • linux 系统扩容
  • (二 上)VB 2010 设计初步
  • Apache Hive 通过Docker快速入门
  • 华为OD机试真题-组装最大可靠性设备-2024年OD统一考试(E卷)
  • Linux下安装Redis基本步骤
  • 总结一些高级的SQL技巧
  • 收音机天线的耦合方式
  • 6.1、实验一:静态路由
  • java毕业设计之基于Bootstrap的常州地方旅游管理系统的设计与实现(springboot)
  • 【Android】初识路由框架及ARouter基本使用方法
  • eclipse软件路径报错重启后,项目都不见了!(解决办法)
  • 企业选择裸金属服务器的好处有哪些?
  • UBUNTU查看CPU核心数
  • 精美的美食食谱分享首页
  • 【C++笔记】容器适配器及deque和仿函数