当主机宕机后出现故障无法及时恢复,可以在从机执行slave no one命令使其上位变为主机,其他主机会自动跟随,原主机恢复后也会变为从机跟随新的主机。但这样的人工操作带来一个问题,难道半夜主机宕机还要通知运维起来输命令吗?这显然不符合常理,而且有个弊端,即宕机后的主机恢复后就是孤零零的一个普通服务器,主从服务器中就少了一个服务器,降低了集体性能。为了自动化管理这个过程,引入了哨兵机制。
什么是哨兵(Sentinel)?
简单来讲,Sentinel就是一个特殊的Redis服务器,负责监控其他服务器的在线状态。
复杂一点来说,Sentinel(哨兵、哨岗)是Redis的高可用性解决方案:由一个个Sentinel组成的Sentinel系统(至少由3个哨兵组成)可以监视多个主服务器以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。如下图:
因为有哨兵机制,所以当主服务器发生故障时,会发生下面的过程:
当然其中的往细了讲挺复杂的,比如新的主服务器该选哪个从服务器啊,旧主服务器怎么变成新主服务器的从服务器啊等等各种问题具体实现。简单来说,哨兵建立的过程包括:启动并初始化哨兵、获取主/从服务器信息、检测主观/客观下线状态、故障转移工作。