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 哨兵模式可以极大地提高系统的容错能力。

相关推荐
敢敢のwings25 分钟前
C++信号与槽机制自实现
开发语言·数据库·c++
杭州杭州杭州2 小时前
MySQL超全笔记
数据库·笔记·mysql
OpenVINO生态社区3 小时前
【汽车功能安全:软件与硬件缺一不可】
数据库·安全·汽车
程序猿阿伟5 小时前
《打破SQL与AI框架对接壁垒,解锁融合新路径》
数据库·人工智能·sql
点燃大海5 小时前
MySQL表结构导出(Excel)
java·数据库·python·mysql·spring
一切皆有迹可循5 小时前
IntelliJ IDEA中Spring Boot 3.4.x+集成Redis 7.x:最新配置与实战指南
spring boot·redis·intellij-idea
꧁坚持很酷꧂5 小时前
Qt远程连接数据库,注册,登录
开发语言·数据库·qt
加油,旭杏5 小时前
【Redis】服务端高并发分布式结构
数据库·redis·分布式
꧁༺朝花夕逝༻꧂6 小时前
MySQL--数据备份
数据库·mysql
共享家95278 小时前
Linux常用命令详解:从基础到进阶
linux·服务器·数据库