Redis-Sentinel(哨兵模式)

Redis Sentinel(哨兵模式)是一种用于 Redis 高可用性管理的工具。它的主要目的是监控、通知和自动故障转移。通过使用哨兵模式,Redis 系统可以实现高可靠性和高可用性,避免因单点故障导致的服务中断。

一、哨兵模式架构

哨兵模式由多个哨兵实例组成。

1.主节点(Master)

主节点主要负责处理写操作,并将数据同步到从节点。一个主节点拥有一个或多个从节点。

2.从节点(Slave)

从节点会复制主节点的数据,确保数据一致性。若主节点发生故障,从节点可以被提升为主节点。

3.哨兵节点(Sentinel)

哨兵负责监控主从节点的健康状态,并在主节点出现故障时进行故障转移,自动将某个从节点提升为新的主节点。

建议:至少部署3个哨兵实例,以保证足够的冗余和投票权,避免单点故障。

二、哨兵模式主要功能

1.监控

哨兵监控 Redis 主节点和从节点的健康状态。如果主节点出现故障,哨兵会发出警告。

2.故障转移

当主节点发生故障不可用时,哨兵会自动选举某个从节点提升为为新的主节点。

3.通知

哨兵在监控过程中,如果检测到主节点或从节点故障,会通过邮件、命令行或者外部接口发送故障通知。

当发生故障转移和配置变更时,哨兵会通过事件通知告知管理员或其他系统。

4.配置

哨兵还充当客户端的配置提供者。当客户端连接到哨兵时,哨兵会返回当前活动的主节点地址,客户端可以动态地获取主节点信息。

三、哨兵模式的工作流程

1.监控

哨兵会定期向 Redis 主节点和从节点发送 PING 请求,以检查它们的健康状态。通过 PONG 响应,可以确定节点是否可用。

2.故障检测

哨兵检测到主节点不可用(超时或无法连接),且在一定时间内无法恢复,它会进入一个故障检测阶段。在这个阶段,哨兵集群会对该节点进行投票,确定主节点是否确实故障。

3.故障确认

一旦超过一定数量的哨兵确认主节点宕机,将进入故障确认阶段。

4.哨兵选举

哨兵集群发起选举,选出一个哨兵来执行故障转移操作。这个选举过程使用的是多数投票机制,确保决策的正确性。

5.故障转移

选举出的哨兵会选择一个健康的从节点,并将其提升为新的主节点。

6.更新配置

所有的哨兵会更新配置,指向新的主节点。同时,所有从节点会将新的主节点作为它们的主节点进行数据同步。

7.通知客户端

哨兵会通过配置提供者接口通知客户端,告知新的主节点地址。

四、哨兵模式的使用流程

1.哨兵配置

要启用 Redis Sentinel 模式,首先需要配置多个哨兵实例。

每个哨兵实例都需要有相应的配置文件,通常为sentinel.conf。

主要配置项包括监控目标、认证信息、故障转移策略等。

(1)示例配置

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # sentinel.conf port 26379 daemonize yes dir /var/lib/redis/sentinel sentinel monitor mymaster 127.0.0.1 6379 3 sentinel down-after-milliseconds mymaster 30000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 2 sentinel known-replica mymaster 127.0.0.1 7000 sentinel announce-ip 127.0.0.1 sentinel announce-port 26379 # sentinel auth-pass mymaster 123456 |

(2)配置项解析

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| port 26379 #指定Sentinel监听的端口号(默认 26379) daemonize yes #以守护进程(后台)模式运行Sentinel。 dir /var/lib/redis/sentinel #设置 Sentinel 的工作目录,用于存储运行时状态和自动生成的配置文件。 sentinel monitor mymaster 127.0.0.1 6379 3 #监控名为 mymaster 的主节点(IP: 127.0.0.1,端口 6379),且至少需 3 个 Sentinel 同意才能触发故障转移。 sentinel down-after-milliseconds mymaster 30000 #mymaster主节点持续 30 秒 无响应,则标记为"主观下线"。 sentinel failover-timeout mymaster 180000 #故障转移超时时间为 180 秒,超时后放弃当前故障转移尝试。 sentinel parallel-syncs mymaster 2 #故障转移后,允许同时从新主节点同步数据的从节点数量。 sentinel known-replica mymaster 127.0.0.1 7000 #显式声明从节点 127.0.0.1:7000属于 mymaster主节点。 sentinel announce-ip 127.0.0.1 sentinel announce-port 26379 #指定当前的哨兵向其他哨兵和客户端广播的 IP 地址为:127.0.0.1。 #指定当前哨兵用于通信的端口为26379 #确保Redis客户端和其他哨兵可以通过指定的 IP 地址和端口找到并连接到当前哨兵。 sentinel auth-pass 123456 #设置连接认证密码为123456。 |

2.启动哨兵

启动 Redis 哨兵模式时,使用如下命令:

|------------------------------------------------|
| redis-server /path/to/sentinel.conf --sentinel |

哨兵模式的优化策略

1.至少部署 3 个 Sentinel 实例

为了保证高可用性,最好部署 3 个或更多的 Sentinel 实例。这样可以在任意 1 或 2 个 Sentinel 实例失败的情况下,仍然保证系统的可用性。

2.配置合理的投票机制

根据你的系统规模,合理配置 quorum 数量,以避免过于激进的故障转移。

3.监控 Sentinel 实例

虽然 Sentinel 本身可以监控 Redis 集群,但你仍然应该监控 Sentinel 实例的健康状态和故障转移的执行情况,避免单点故障。

4.备份和恢复

定期备份 Sentinel 配置文件,确保在系统崩溃时可以迅速恢复。

六、Sentinel 的高可用性和优缺点

1.优点

高可用性:当主节点故障时,哨兵会自动进行故障转移,确保高可用性。

自动故障转移:哨兵会自动选举新的主节点,减少系统停机时间。

扩展性:哨兵模式支持多节点,增加哨兵节点可以提高系统的容错能力。

2.缺点

配置复杂:需要配置多个哨兵实例,并确保其正确工作。

延迟:故障转移过程中可能会产生短暂的延迟,导致短暂不可用和数据不一致。

七、 总结

Redis 哨兵模式是为了保证 Redis 的高可用性而设计的。它通过监控、自动故障转移、通知等功能,确保主节点出现故障时可以快速恢复,避免单点故障带来的服务中断。虽然配置和管理较为复杂,但它是保证 Redis 集群高可用性的关键技术之一。在实际生产环境中,尤其是需要高可用性和稳定性的应用场景下,使用 Redis 哨兵模式可以极大地提高系统的容错能力。

相关推荐
科技小花2 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸2 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain2 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希2 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神2 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员2 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java3 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿3 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴3 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU3 小时前
三大范式和E-R图
数据库