Redis部署-哨兵
基本原理
哨兵节点巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个slave转为master。
功能
主从监控
监控主从redis节点运行是否正常
消息通知
哨兵可以将故障转移的结果发送给客户端
故障转移
如果master异常,则会进行主从切换,将其中一个Slave作为新的Master
配置中心
客户端通过连接哨兵来获得当前Redis服务的主节点地址
实践
基本要求
哨兵模式下需要通过投票选择master节点,需要提供奇数个哨兵节点,保证投票的有效性。
配置
- redis主从数据库
哨兵模式是在主从结构的基础上新增哨兵节点,主从结构配置参考:Redis部署-主从复制
注意:哨兵模式下存在故障转移切换master的情况,如果节点开启了密码访问(建议所有节点使用相同的密码),则所有节点都需要配置masterauth <password>确保master迁移后原master节点能正常访问新master。 - 基础配置
# 哨兵节点端口
port 36379
# pid文件路径
pidfile /var/run/redis_sentinel_36379.pid
# 日志文件路径
logfile "/usr/local/redis-7.2.4/log/sentinel/sentinel_36379.log"
# 开启后台进程
daemonize yes
# 启用安全保护模式,开启权限认证
protected-mode yes
# 哨兵节点访问密码
requirepass redis
# 工作目录
dir /usr/local/redis-7.2.4/sentinel
# 其它哨兵的通信密码
sentinel sentinel-pass redis
- 哨兵相关配置
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 配置哨兵监控的master节点,quorum-指定认定主节点客观下线的票数,即当有多少台哨兵节点认定master下线时可认定master下线
sentinel monitor mymaster 127.0.0.1 6379 2
# 主节点访问密码
sentinel auth-pass mymaster redis
# 主观下线配置,设定多少时间没收到主节点的应答时,当前哨兵任务主节点下线
sentinel down-after-milliseconds mymaster 30000
- 启动哨兵
进入工作目录,执行以下命令,本文工作目录为:/usr/local/redis-7.2.4
redis-sentinel ./sentinel.conf --sentinel
模拟验证
- shutdown master后的投票过程
- sdown:主观下线master
- odown: 通过投票客观下线master
- vote-for-leader: 投票选举(Raft算法)新哨兵leader
- 哨兵leader发起故障转移,选出新的master
- 在sentinel.conf添加新的主机配置 sentinel monitor
- 修改各redis节点的主从配置
- 新的主从关系
- 原master节点恢复
重启日志
- 重启成功后进行tcp请求,获取新的master节点
- 与新master节点建立连接,并修改本地主从配置
- 从新master接收db文件,覆盖本地db
- 从新master接收aof,重写本地aof
哨兵故障恢复过程
- 选举新的master,哨兵leader节点从健康的slave节点,依次按照节点优先级relica-priority参数、数据同步偏移量offset以及runId三个条件作比较进行选择。
- 未被选中的slave通过slaveof命令重新连接新的master节点。
- 故障节点恢复后连接新的master,并修改本地配置。
缺点
哨兵模式下,故障迁移时需要时间,迁移时间内无法进行写操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现