第二部分:Redis数据库的三种模式(②:哨兵模式)
以下是本篇文章正文内容,如有错误麻烦请指出。 谢谢 !!!
一、哨兵模式简介
1、哨兵模式描述
- 哨兵模式是一个分布式系统,是Redis的一种特殊模式。用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的Master并将所有Slave连接到新的Master;
- 哨兵是一个独立的进程,作为进程,它会独立运行;
- 一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。
2、哨兵模式作用
- 监控
(1)不断的检查Master和Slave是否正常运行;
(2)Master存活检测、Master与Slave运行情况检测。 - 通知(提醒)
(1)当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。 - 自动故障转移
(1)断开Master与Slave连接,选取一个Slave作为Master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机,其他Slave连接到新的Master,并告知客户端新的服务器地址。 - 注意:
(1)哨兵也是一台redis服务器,只是不提供数据服务,通常哨兵配置数量为单数。
二、启用哨兵模式
1、配置哨兵
-
配置一拖二的主从结构
-
配置三个哨兵
参看sentinel.conf # 如果是在一台机器上,需要设置端口号不一样; # 如果不在一台机器上,配置相同。
-
启动哨兵
redis-sentinel sentinel.conf
-
哨兵的其它配置项
配置项 | 范例 | 说明 |
---|---|---|
sentinel auth-pass <服务器名称> <password> | sentinel auth-pass mymaster itcast | 连接服务器口令 |
sentinel down-after-milliseconds <自定义服务名称> <主机地址> <端口> <主从服务器总量> | sentinel monitor mymaster 192.168.194.131 6381 1 | 设置哨兵监听的主服务器信息,最后的参数决定了最终参与选举的服务器数量(-1) |
sentinel parallel-syncs <服务名称> <服务器数(整数)> | sentinel parallel-syncs mymaster 1 | 指定同时进行主从的slave数量,数值越大,要求网络资源越高,网络资源越小,同步时间越长 |
sentinel failover-timeout <服务名称><毫秒数(整数)> | sentinel failover-timeout mymaster 9000 | 指定出现故障后,故障切换的最大超时时间,超过该值,认定切换失败,默认3分钟 |
sentinel notification-script <服务名称><脚本路径> | 服务器无法正常联通时,设定的执行脚本,通常调试使用 |
三、哨兵工作原理
1、主从切换
-
哨兵在进行主从切换过程中经历三个阶段
监控 通知 故障转移
2、监控阶段
- 描述
(1)哨兵首先获取各个哨兵的状态是否在线;
(2)其次获取Master的状态
Master的属性:
runid
role:master
(3)再次获取各个Slave的详细信息(根据Master中的Slave信息)
Slave属性
runid
role:slave
master_host、master_port
offset
......
3、通知阶段
- 描述
(1)哨兵之间也会进行相互通信,监控在线状态,形成哨兵之间的集群模式;
(2)由于每次哨兵和主节点Master和从节点Slave进行通信的可能不是同一个,所以每一个哨兵通信完成之后都会通知其它的哨兵,是否正常,共享信息。
4、故障转移阶段
-
主观下线
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行Failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。
-
客观下线
当有其中一个哨兵检测到Master下线以后,就会共享信息给其它的哨兵,其它的哨兵接收到消息以后就会去检测Master服务器是否可用,其它的哨兵也检测到Master服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行Failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。
-
投票机制
比如:哨兵1与哨兵4同时给哨兵2发送消息,哨兵2会根据先收到谁的信息就会把票投给谁,最后所有的信息处理完以后,谁的票数达到了哨兵数的一半以上,就会选举成功。如果没有哨兵的票数达到总数的一半,就会进行重新选举,并且参与的哨兵竞选次数加1。
选举出来的哨兵就会进行问题的处理。
-
选择新的Master节点的条件
(1)先过滤出经常在线的
(2)接着过滤出响应快的
(3)再次过滤出与主节点断开时间久的
(4)最后根据优先优先原则
优先级:
offset:偏移量
runid:就是id号,越小的越优先
(5)选举完成之后就会将选举出来的Slave节点成为新的Master节点,然后通知其他的Slave节点新Master的IP和端口,然后进行连接。
对以前的知识回顾,加深基础知识!
每天进步一点点,也许某一天你也会变得那么渺小!!!