哨兵模式
简介
在主从复制的基础上,增加了哨兵(Sentinel)服务器,其核心功能是实现了自动化的故障恢复,能够后台监控主机是否故障,如果故障了根据投票数自动将库设置为主库。
单个哨兵,但是也会存在一个问题,但是存在哨兵模式存在宕机的可能,所以一般情况下都会部署3个以上的哨兵服务器。
流程
流程:
假设主服务器宕机,从服务器主管下线后不会进行故障转移等操作
每个哨兵节点维护了3个定时任务:
- 通过主节点发送info命令获取最新的主从结构
- 通过发布订阅功能获取其他哨兵节点的信息
- 通过其他节点发送ping命令进行心跳检测,判断是否下线
主服务器宕机 , 哨兵1先检测这个结果,系统并不会马上进行投票,仅仅是哨兵1认为主服务器不可用,这种现象称之为主观下线。
dailover故障转移:当后边的哨兵也检测到主服务器不可用时,并且数量达到一致时,那么哨兵之间就会进行投票,投票的结果由一个哨兵发起,故障转移分为3个步骤
- 在从节点中选择新的主节点:选择的原则是首先过滤掉不健康的从机,选择优先级最高的从机,如果优先级无法区分,则会选择复制偏移量最大的从机,如果仍无法区分,则原则runID(唯一标识服务器的ID)最小的节点。
- 更新从机:通过 slave of one,让选出的从机成为主机,并开通slaveof命令让其他节点成为其从机
- 将已经下线的主机,设置为新主机的从机,当它重新上线时,它就会成为新主机的从机。
客观下线:切换成功后,就会同步发布订阅模式,让哨兵把自己交控的从服务器实现切换主机,这个过程称之为客观下线。
这里需要注意的是哨兵只是配置提供者而不是代理主机
:两者的区别是如果是配置提供者,客户端在通过哨兵获得主节点信息时,会直接建立到主节点的连接,后序的请求会直接发向主机;如果是代理,客户端的每一次请求都会发向哨兵,哨兵再通过主节点处理请求,再由哨兵传给客户端数据。
安装哨兵
首先应该现有至少一个主服务器以及两个从服务器的建立
在redis.conf同级目录下创建sentinel.conf 内容格式 固定写法
sentinel monitor [master-group-name] [ip] [port] [quorum] 比如 sentinel monitor mySentinel 127.0.0.1 6379 1
然后在另起一个客户端安装目录下启动哨兵redis-server sentinel.conf --sentinel。
通过 info replication查看各个服务之间主从服务等关系。
优点
- 哨兵集群,基于主从复制,所有主从复制的优点都会有
- 主从可以切换,故障可以转移,系统的可用性就会更好
- 哨兵模式就是主从模式的升级,手动到自动,更加健壮
缺点
1、 redis不好在线扩容,集群容量一旦达到上限,在线扩容就会很麻烦
2、 实现哨兵模式的配置很麻烦,会有很多选择