1、什么是哨兵机制

        哨兵是Redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时需要人为干预的问题。

主要的功能:

(1)集群监控:负责监控Redis master和slave进程是否正常工作;

(2)消息通知:如果某个Redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员;

(3)故障转移:如果master node挂掉了,会自动转移到slave node上;

(4)配置中心:如果故障转移发生了,通知client客户端新的master地址;

Redis哨兵的高可用:

       原理:当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

Redis哨兵服务 redis哨兵机制原理_Redis哨兵服务

  1.  哨兵机制建立了多个哨兵节点(进程),共同监控数据节点的运行状况。
  2.  同时哨兵节点之间也互相通信,交换对主从节点的监控状况。
  3.  每隔1秒每个哨兵会向整个集群:Master主服务器+Slave从服务器+其他Sentinel(哨兵)进程,发送一次ping命令做一次心跳检测。

         这个就是哨兵用来判断节点是否正常的重要依据,涉及两个新的概念:主观下线和客观下线。

1. 主观下线:一个哨兵节点判定主节点down掉是主观下线。

2.客观下线:只有半数哨兵节点都主观判定主节点down掉,此时多个哨兵节点交换主观判定结果,才会判定主节点客观下线。

3.原理:基本上哪个哨兵节点最先判断出这个主节点客观下线,就会在各个哨兵节点中发起投票机制Raft算法(选举算法),最终被投为领导者的哨兵节点完成主从自动化切换的过程。然后通过投票的方式选取其中的一个从机slave切换成主机master,修改其他的slave配置文件,重新形成新的主从关系网络;当原有的主机master恢复运行后,哨兵监测到后会将该主机master的角色转换成从机slave角色,加入到新的主从关系网络体中。

其中主从切换涉及到的配置文件有:

        master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换 

2、哨兵模式的配置修改

(1)在redis的配置文件中添加鉴权和验证(添加requirepass和masterauth),redis主从都需要配置,配置的密码一般相同。其中的鉴权requirepass为redis登录密码的设置,验证masterauth为主从复制配置中的主机密码的检验,否则从机无法连接上主机;

(2)redis一般都在内网运行,所以注释掉#bind 127.0.0.1或指定特定的ip连接

(3)关闭保护模式,protected-mode 把yes改为no

(4)添加(新增)sentinel.conf配置文件:

#sentinel端口
port 26379
#工作路径,注意路径不要和主重复
dir "/usr/local/redis-6379"
# 守护进程模式
daemonize yes
#关闭保护模式
protected-mode no
# 指明日志文件名
logfile "./sentinel.log"
#哨兵监控的master,mymaster为自定义名称,只用输入redis(主机)主节点的ip/port和法定人数(投票结果达到该数量为通过)
sentinel monitor mymaster 192.168.125.128 6379 1
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 5000
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 18000
#设置master和slaves验证密码
sentinel auth-pass mymaster 123456

(3)启动哨兵命令:

redis-sentinel /path/to/sentinel.conf(推荐,这种方式启动和redis实例没有任何关系)