Redis哨兵
< 返回列表时间: 2019-12-03来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
Sentinel是Redis的高可用解决方案,有一个或者多个实例组成Sentinel系统,可以监视任意多个master以及其下的slave,并在master下线时,自动将该master下单某个slave升级为新的master,并可以做重新选主之后的故障迁移操作;




Sentinel是为一组一主多从的服务器服务,主从服务器上存储的键值对是一样的,slave上只能执行读操作;
sentinel服务本质上是一个运行在特殊模式下的Redis服务器,不加载RDB、AOF文件,运行的命令列表也不一样;
命令列表:ping、sentinel、info、subscribe、unsubscribe、psubscribe、punsubscribe;
启动方式:
redis-sentinel /path/to/user/sentinel.conf
或者
redis-server /path/to/user/sentinel's --sentinel


对于每个被sentinel监视的服务器来说,sentinel会创建两个连向服务器的异步网络; 命令连接,这个连接专门用作向主服务器发送命令,并接受回复; 订阅连接,专门用于订阅主服务器的__sentinel__:hello频道;

这里sentinel可以是多台,一台发送,所有的sentinel都可以监听到订阅的消息;


sentinel通过向master发送info命令(10s一次),可以获取到master本身的详细信息、master下的slave简要信息(ip、port、state、offset、lag);
sentinel通过向slave发送info命令,获取slave的详细信息(run_id、role、master_host、moster_port、master_link_status、slave_priority、slave_repl_offset);
检测主观下线状态:
sentinel以每秒一次的频率向所有与他创建了命令连接到实例(master、slave、其他sentinel) 发送ping命令 ,并通过实例返回的回复来判断实例是否在线 ;
检测客观下线状态:
当一个sentinel检测到一个master主观下线以后,会 向其他 sentinel询问 (发送命令:sentinel is-master-down-by addr <ip> <port> <current_epoch> <runid>)该master是否下线,当认为下线的数量达到足够数量(配置指定)以后,sentinel会将master判定为客观下线,并对master执行故障迁移操作;
选举领头sentinel:
当一个master被判断为客观下线以后,监视这个下线服务器的各个sentinel会进行协商,选出一个领头sentinel,有他来对下线主服务器做故障迁移操作;
当一个sentinel发现master客观下线以后,会向其他sentinel发送一个请求将自己选为领头sentinel的命令,只要有 1/2以上的sentinel同意 这个请求,这个sentinel就会正式成为领头sentinel;
一轮请求中, 一个sentinel只有一次选举的机会 ,哪个请求先到,就答应哪个,如果一轮选举没有领头sentinel,就再来一轮,直到选出为止;
故障迁移:
领头sentinel会完成对下线的master的故障迁移操作; 从下线master的slave中选出一个,作为新的master(发送命令:slaveof no one); 将其他slave的master指向新的master(发送命令:slaveof <master_ip> <master_port>); 将已下线的master转为slave,当其上线之后,会成为新master的slave;




热门排行