Redis哨兵模式
在哨兵模式没出现之前,当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式。Redis从2.8开始正式提供了Sentinel (哨兵)架构来解决这个问题。
哨兵模式是一种特殊的模式,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。
其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
哨兵的作用:
-
通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
-
当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
为了防止哨兵出现问题,就诞生了多哨兵模式,各个哨兵互相监控。
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover(故障转移)过程,
仅仅是哨兵1主观的认为主服务器不可用,这个现象称为主观下线、当后面的哨兵也检测到主服务器不可用,
并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。
切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。
优点:
- 哨兵集群基于主从复制,拥有主从复制优点
- 主从可以切换。故障可以转移,系统可用性更好
- 哨兵模式是主从模式的升级,健壮性更好
缺点
- redis不容易扩容,如果集群容量达到上限,在线扩容很难
- 实现哨兵配置很麻烦