redis sentinel

2021-05-18  本文已影响0人  老杜振熙

初始

  1. 作用
    可以监视主服务器、从服务器等多种服务器,甚至还可以监视其他的sentinel服务器;

  2. sentinel服务器和普通服务器的区别
    sentinel服务器不使用数据库,因此初始化的时候不需要RDB或者AOF文件;另外,包括一些操作键值对的命令(SET等),发布订阅,脚本,事务等功能,sentinel服务器均不使用;sentinel服务器的命令表中也并没有存储这些命令;客户端可以对sentinel服务器使用的命令仅包括:PING, SENTINEL, INFO, SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE;(新版本中可能会有增加)

  3. 命令连接和订阅连接
    sentinel服务器需要和每一个由它监视的主(从)服务器创建2个连接,分别是命令连接订阅连接。命令连接的作用是向主(从)服务器发送命令以及接收相应的回复;订阅连接的作用是订阅主(从)服务器的sentinel:hello频道,避免频道发送的信息丢失;

监视网络

  1. dict *mastersdict *slaves字典
    dict *masters就是sentinel服务器所监视的所有redis服务器(键为服务器名,值是指向sentinelRedisInstance结构体的指针,该结构体保存着各类信息);sentinel服务器定期通过命令连接向其监控的master服务器发送INFO命令,返回的信息中会包含master服务器本身的信息(如run id),以及其附属的slave服务器,根据这些信息,sentinel分别创建包含master和slave服务器的底层结构(两个字典,分别代表master和slave,key就是服务器的地址,value是一个特制的数据结构,代表一个服务器实例结构)

  2. dict *sentinels字典
    sentinel通过命令连接向__sentinel__:hello频道发送消息,通过订阅连接从__sentinel__:hello接收消息。不仅如此,如果有多个sentinel监视着同一个服务器,那么各个服务器还可以通过从频道接收到的信息感知到其他sentinel的存在,并加到服务器的实例结构的dict *sentinels字段中。相互感知到对方存在的sentinel会共同建立命令连接(注意,没有订阅连接),形成网络;

  3. 主观下线和客观下线
    sentinel会定期向其监视的服务器发送PING命令,探测回复是否有效(有效信息包括“+PONG”, "-LOADING", "MASTERDOWN"),如果无效或无响应,则认为其主观下线;当判断某个服务器主观下线以后,sentinel会和其他sentinel通信,询问其他sentinel是否认为该服务器主观下线,如果票数足够多,则认为其客观下线,并执行故障转移操作;(注意,“客观下线”也是一种主观标准,前面说的“票数”,是通过配置文件进行配置的,而各个sentinel的配置文件可能不一样。举个例子,对于sentinel1来说,可能票数为2的时候,就认为服务器客观下线,而对于sentinel2,可能票数为5时,才认为这个服务器客观下线)

  4. 领头sentinel
    当sentinel认为某个服务器客观下线之后,监视这个服务器的所有sentinel就会互相发送命令选举出领头sentinel。具体方式也很简单,就是先到先得,某个sentinel发送命令,要求其他sentinel投他一票,其他sentinel的票数是先到先得的。最终,如果某个sentinel得到的票数超过一半,就成为最终的领头sentinel。领头sentinel的作用就是执行故障转移

  5. 故障转移
    就是挑选出一个从服务器变为主服务器,将有故障的主服务器在正常之后转为从服务器,其他从服务器都改为复制新的主服务器;

上一篇下一篇

猜你喜欢

热点阅读