携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情
前言
本系列主要从基础知识,而后进阶,再逐步深入 Redis 的原理分析,以保证对 Redis 的学习深入浅出,学以致远并输出自己对 Redis 学习和了解的成果。本系列将划分四个部分:
场景
主库关闭持久化,从库开启持久化时,主库奔溃的恢复方式是开发者通过手动操作恢复。为了能够自动化操作。Redis 提供了哨兵工具实现自动化的系统监控和故障恢复。
什么是哨兵
哨兵就是用来监控 Redis 系统的运行状况,哨兵是独立的进程去监控系统的。其主要工作是:
- 监控:监控主库和从库是否正常运行
- 通知:当哨兵检测出问题时就会向其他哨兵发送通知
- 当主库出现故障时,自动将从库转换为主库,故障的主库恢复后转为从库
当然若存在多个哨兵,哨兵之间也会互相监控。
实现原理
一个哨兵进程启动时会读取配置文件的内容。一个哨兵节点可以同时监控多个Redis 主从系统,只需提供多个 sentinal monitor 配置。同时多个哨兵节点可以同时监控同一个 Redis 主从系统,从而形成网状结构。
所以,哨兵也是一个 Redis 服务器,通过配置文件配置哨兵,然后启动服务。这样哨兵就可以执行工作,整个工作的过程:
-
哨兵启动后,将与主库建立两个连接:
- 一个定期向主数据库发送命令来获取主库信息
- 一个用来订阅该主数据库指定频道来获取同样监控该数据库的哨兵节点信息
-
和主库建立连接后,哨兵将定时执行三个操作:
- 每10秒向主从库发送 INFO 命令,以获取从节点的信息
- 每2秒向主从库的哨兵指定频道发送自己的信息,其他哨兵会订阅该频道,主要为了知道主节点和哨兵节点
- 每1秒哨兵向主从库以及其他哨兵发送 Ping 命令,心跳检测,判断节点是否正常
-
整个哨兵机制就一直这样执行着,一旦出现主节点故障时,就会在哨兵节点中选举出领导哨兵执行故障转移:
- 将从库升级为主库
- 通知客户端主库变更
- 其他从库重新指向到新的主库
- 将故障主库恢复后变成从库,并指向新的主库
哨兵是 Redis 集群架构中一个重要组件。要保证 Redis 高可用,就是要保证能做到故障转移(主从切换),而哨兵就是提供这样一个功能,监控主从节点,发生故障时自动切换恢复服务,从而保证 redis 服务的高可用。
参考资料:
- www.modb.pro/db/218277
- jycoder.club/2021/04/07/…
- 《Redis 指南入门》