大家好,我是程序媛雪儿。上上期咱们聊的是redis主从复制,那么这期咱们聊redis哨兵模式,在聊之前,咱们要先明确一下我们为什么要用redis主从复制,redis哨兵模式,这两个技术点是为了解决什么问题的。
redis主从复制,是指一个主节点有多个相同的从节点,可以解决高并发读的问题。
redis哨兵模式,是指redis的哨兵会持续关注主从节点的健康状态,主节点宕机,哨兵会根据一定的规则选取某个从节点作为主节点继续工作,为了保障系统高可用需求。
那么接下来我们具体聊聊redis的哨兵模式。
一、哨兵机制
哨兵(Sentinel)机制主要是实现主从集群故障恢复的
哨兵结构作用如下:
监控(Sentinel):检查master和slave是否按期工作
自动故障恢复:如果master故障了,哨兵会选一个slave提升为master,当故障实例恢复,master还是那个提升的slave不变
通知:如果集群里有redis故障了,会把最新消息(比如谁现在是master)推送给redis的客户端
二、服务状态监控(哪个故障了)
哨兵会每隔1s向集群的每个实例发送ping命令
主观下线:某个哨兵发现某个实例在规定时间未响应
客观下线:超过指定数量(最好是过半数)的哨兵(quorum)都认为该实例主观下线
三、哨兵选主规则
1、主从节点断开时间长短,超过一定时间的不考虑
2、判断slave-priority,优先级(可设置)
3、判断slave的offset值,越大优先级越高
四、哨兵模式脑裂问题
问题如下:
因为网络原因,哨兵联系不到master,以为master挂了,另立新master,但是原来的master和客户端数据沟通的好好的,写入了很多数据,等到网络恢复,哨兵强制把原来的master变为slave,数据同步后导致原master断网后写入的一部分数据丢失。
解决方案1:
配置redis的两个参数
min-replicas-to-write 1 表示最少的slave节点为1个
min-replicas-max-lag 5 表示数据复制和同步的延迟不能超过5s,这样处理,最多会丢失5s的数据
只要主从同步时间超过5s,直接拒绝客户端修改数据
redis使用建议
一般来说1主1从+哨兵就够用了,单节点不超过10g,如果redis内存不足,可以采用微服务的方式,给不同的服务分配独立的redis主从节点
欢迎大家关注我的微信公众号,程序媛雪儿,雪儿会定期在上面发布编程的知识碎片,也有雪儿博客地址,上面有详细系统的笔记,雪儿是全栈,但是公众号目前主要还是发后端的技术,以后可能也会涉及到一些前端的知识,我们下期见,拜拜~