《Java后端知识体系》之Redis的哨兵(Sentinel)分析(一)

一、介绍

Sentinel(哨兵、哨岗)是Redis的高可用性的解决方案,由一个或多个Sentinel实例(instance)组成的Sentinel系统可以监视多个主服务器,以及这些主服务器下的所有从服务器。

Sentinel监视的主服务器下线(断开连接)时,可以自动将该主服务器下的某个从服务器设置为新的主服务器,然后由新的主服务器代替断开连接的主服务器处理命令请求。

Sentinel系统监视服务器的例子如下:
《Java后端知识体系》之Redis的哨兵(Sentinel)分析(一)

该图中server1表示主服务器,server2、server3、server4表示主服务器下的从服务器,Sentinel系统监视这四个服务器。
如果此时server1进入下线状态,纳闷从服务器server2、server3、server4对主服务器的复制操作将被中止,并且Sentinel会察觉到server1已下线(sentinel通过用户设定的下线时长来判断,如果下线时长超过用户设定的下线时长,那么就判定该主服务器已下线),就会执行故障转移操作:

  1. 首先Sentinel会调整选server1下的一个从服务器,并将这个从服务器设定为主服务器。
  2. 之后Sentinel系统会向server1属下的所有从服务器发送新的复制指令,让它们成为新的主服务器的从服务器,当所有从服务器开始复制新的主服务器时,故障转移操作执行完毕。
  3. 另外,Sentinel还会继续监视已下线的server1,当它重新上线时,将它设定为新服务器的从服务器。
    该过程的图示如下:
    《Java后端知识体系》之Redis的哨兵(Sentinel)分析(一)
    《Java后端知识体系》之Redis的哨兵(Sentinel)分析(一)
    《Java后端知识体系》之Redis的哨兵(Sentinel)分析(一)