关注:CodingTechWork
Redis Sentinel 简介
什么是 Redis Sentinel?
Redis Sentinel 是 Redis 官方提供的高可用性(HA)解决方案,用于监控 Redis 主从架构中的故障检测和故障转移。它是一个分布式系统,可以自动发现主从节点和哨兵节点,通过心跳机制检测节点健康状态,并在主节点故障时自动进行故障转移。
Redis Sentinel 的核心功能
- 监控(Monitoring):持续监控 Redis 主从节点的健康状态。
- 通知(Notification):当 Redis 实例出现故障时,通知管理员或其他应用程序。
- 自动故障转移(Automatic Failover):当主节点故障时,自动将从节点提升为新的主节点。
- 配置提供者(Configuration Provider):为客户端提供最新的主节点地址。
Redis Sentinel 的优势
- 高可用性:自动故障转移,减少人工干预。
- 无缝切换:客户端可以自动感知主从节点的变化。
- 易于扩展:支持多个 Sentinel 节点,避免单点故障。
Redis Sentinel 工作原理
哨兵节点
Sentinel 是一个独立的进程,可以部署在多个服务器上。每个 Sentinel 节点会定期向 Redis 主从节点发送 PING
命令,检测其是否正常运行。
故障检测
- 主观下线(Subjectively Down, SDown):如果一个 Sentinel 节点在指定时间内未收到主节点的响应,它会将主节点标记为“主观下线”。
- 客观下线(Objectively Down, ODown):多个 Sentinel 节点通过投票机制确认主节点是否“客观下线”。
故障转移
- 选举 Leader:当主节点被确认为“客观下线”后,Sentinel 节点会选举一个 Leader 节点来协调故障转移。
- 提升从节点:Leader 节点选择一个从节点作为新的主节点,并向其他从节点发送
SLAVEOF
命令,使其复制新的主节点。 - 更新配置:Sentinel 会更新客户端的配置,使其连接到新的主节点。
自动发现机制
Sentinel 使用 Redis 的发布/订阅功能自动发现其他 Sentinel 节点和从节点。每个 Sentinel 每两秒钟会向监控的每个主从节点的发布/订阅频道 __sentinel__:hello
发布一条消息,用 IP 地址、端口和运行 ID 宣布其存在。
Redis Sentinel 配置与使用
环境准备
假设我们有三台主机,分别用于部署 Redis 主节点、从节点和 Sentinel 节点:
IP | 主机名 | 角色 |
---|---|---|
192.168.182.110 | local-168-182-110 | master, sentinel |
192.168.182.111 | local-168-182-111 | slave1, sentinel |
192.168.182.112 | local-168-182-112 | slave2, sentinel |
配置 Sentinel
创建 Sentinel 配置文件:
cat >/usr/local/redis/sentinel.conf<<EOF daemonize yes logfile "/usr/local/redis/sentinel.log" dir "/opt/software/redis-7.0.3/sentinel" sentinel monitor mymaster 192.168.182.110 6379 2 sentinel auth-pass mymaster 123456 sentinel down-after-milliseconds mymaster 30000 EOF
sentinel monitor
:指定监控的主节点名称、IP、端口和故障转移所需的最小 Sentinel 数量。sentinel auth-pass
:如果主从节点设置了密码,需要在此指定。sentinel down-after-milliseconds
:指定认为节点失效的时间阈值。
启动 Sentinel:
/usr/local/bin/redis-sentinel /usr/local/redis/sentinel.conf netstat -tnlp|grep 26379
测试故障转移
- 模拟主节点故障:停止主节点的 Redis 服务。
- 观察 Sentinel 日志:查看 Sentinel 是否检测到故障并自动进行了故障转移。
- 验证从节点提升为主节点:检查新的主节点是否正常工作,其他从节点是否已重新配置为新的主节点。
Redis Sentinel 的使用场景
适用场景
- 主从模式:Redis Sentinel 适用于主从模式,用于监控主从节点并自动进行故障转移。
- 多主节点架构:可以同时监控多个主节点,为多主节点架构提供高可用性。
不适用场景
- Redis Cluster:Redis Cluster 本身已经支持高可用,不需要 Sentinel。
- 单机 Redis:单机 Redis 没有从节点,Sentinel 无法执行故障转移。
Redis Sentinel 的优势
- 高可用性:自动故障转移,减少人工干预。
- 无缝切换:客户端可以自动感知主从节点的变化。
- 易于扩展:支持多个 Sentinel 节点,避免单点故障。
总结
Redis Sentinel 是 Redis 官方提供的高可用性解决方案,通过监控 Redis 主从架构中的故障检测和故障转移,确保服务的高可用性。它具有自动发现机制、故障检测、故障转移和配置管理等功能,适用于主从模式和多主节点架构。通过合理配置和部署 Sentinel,可以大大增强 Redis 集群的高可用性,减少因硬件故障或网络问题导致的服务中断。