sentinel(哨兵)进程是用于监控redis集群中master主服务器工作的状态,在master主服务器发生故障的时候,可以实现master和slave服务器的切换,保证系统的高可用,其已经被集成在redis2.6+的版本中,redis的哨兵模式到了2.8版本之后就稳定了下来。一般在生产环境也建议使用redis的2.8版本的以后版本。哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于master主服务器是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个slave作为新的master。每个哨兵(sentinel)进程会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定配置时间(可配置的)内未得到回应,则暂时认为对方已掉线,也就是所谓的”主观认为宕机” ,英文名称:subjective down,简称sdown。有主观宕机,肯定就有客观宕机。当“哨兵群”中的多数sentinel进程在对master主服务器做出 sdown 的判断,并且通过 sentinel is-master-down-by-addr 命令互相交流之后,得出的master server下线判断,这种方式就是“客观宕机”,英文名称是:objectively down, 简称 odown。通过一定的vote算法,从剩下的slave从服务器节点中,选一台提升为master服务器节点,然后自动修改相关配置,并开启故障转移(failover)。
哨兵(sentinel) 虽然有一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 redis 服务器,你可以在启动一个普通 redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel),哨兵(sentinel) 的一些设计思路和zookeeper非常类似。
sentinel集群之间会互相通信,沟通交流redis节点的状态,做出相应的判断并进行处理,这里的主观下线状态和客观下线状态是比较重要的状态,它们决定了是否进行故障转移,可以 通过订阅指定的频道信息,当服务器出现故障得时候通知管理员,客户端可以将 sentinel 看作是一个只提供了订阅功能的 redis 服务器,你不可以使用 publish 命令向这个服务器发送信息,但你可以用 subscribe 命令或者 psubscribe 命令, 通过订阅给定的频道来获取相应的事件提醒。一个频道能够接收和这个频道的名字相同的事件。 比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(sdown)状态的事件。
sentinel(哨兵)进程的作用:
1、监控(monitoring): 哨兵(sentinel) 会不断地检查你的master和slave是否运作正常。
2、提醒(notification):当被监控的某个redis节点出现问题时, 哨兵(sentinel) 可以通过 api 向管理员或者其他应用程序发送通知。
3、自动故障迁移(automatic failover):当一个master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效master的其中一个slave升级为新的master, 并让失效master的其他slave改为复制新的master;当客户端试图连接失效的master时,集群也会向客户端返回新master的地址,使得集群可以使用现在的master替换失效master。master和slave服务器切换后,master的redis.conf、slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
以上就是为什么要加redis哨兵模式的详细内容。
