Redis系列(七)--Sentinel哨兵模式

在上一篇文章了解了主从复制,主从复制本身的容错性很差,一旦master挂掉,只能进行手动故障转移,很难完美的解决这个问题

而本文讲解的sentinel可以解决这个问题

Redis sentinel示意图:

安装与配置

1、配置开启主从节点

2、配置开启sentinel监控主节点(sentinel是特殊的Redis)

1.1、配置master、slave

master节点:port 6379

port 6379
daemonize yes        //以守护进程的方式启动
pidfile "/var/run/redis_6379.pid"
logfile "6379.log"
dir "/var/local/redis/data"

两个slave节点:port 6380 6381

port 6380
daemonize yes        //以守护进程的方式启动
pidfile "/var/run/redis_6380.pid"
logfile "6380.log"
dir "/var/local/redis/data"
slaveof 127.0.0.1 6379
port 6381
daemonize yes        //以守护进程的方式启动
pidfile "/var/run/redis_6381.pid"
logfile "6381.log"
dir "/var/local/redis/data"
slaveof 127.0.0.1 6379

启动这三个Redis实例,查看6379的信息

redis-cli -a huluhulu -p 6379 info replication
role:master
connected_slaves:2

可以看到本身是master,连接了两个slave

1.2、配置sentinel

port 26379
dir /usr/local/redis/data/
logfile 26379.log
sentinel monitor mymaster 127.0.0.1 6379 2            //master名称为mymaster,2是指有两个sentinel认为master发生故障,就会发生故障转移
sentinel down-after-milliseconds mymaster 30000        //30s无法ping通master,就认为故障了
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

通过命令redis-sentinel sentinel-{port}.conf启动三个sentinel实例

通过info命令查看sentinel信息

sentinel可以监控多套master-slave

1.3、sentinel故障转移过程

  1、多个sentinel发现并确认master出现故障

  2、选择一个sentinel作为领导

  3、选取一个slave作为master

  4、通知其它slave作为master的slave

  5、通知客户端主从变化

  6、等待老的master复活作为新的master的slave

 

第二步领导者选取:

原因:

  只需要一个sentinel完成故障转移

过程:

  通过命令询问别的sentinel节点选举自己成为领导者,只要没有投过票就会同意,只要超过quorum就可以成为领导者,如果有多个领导者,等

待一段时间重新选取

 

第三步重新选择master的条件,依次判断,直到满足为止:

  1)、通过slave-priority(如果机器配置不同,可以把高配机器priority设置更高)选择优先级高的

  2)、选择offset最大的节点,和master的offset最接近,数据更加完整

  3)、选择run_id最小的slave节点

对这个slave执行slaveof no one使其成为master

第六步对挂掉的master节点标记为slave,对其保持关注,一旦复活,也要成为新master的slave节点

1.4、sentinel三个定时任务

sentinel通过三个定时任务对master进行异常判断和故障转移

  1、每10s每个sentinel对master和slave执行info,以此来发现slave节点和确定主从关系

  2、每2s每个sentinel通过master节点的channel和其它sentinel交换信息(pub/sub 发布订阅)

  3、每1s每个sentinel对其它sentinel和redis执行ping

sentinel monitor <masterName> IP Port <quorum> quorum指法定人数,sentinel主观下线的人数达到法定人数就可以进行客观下线

主观下线:每个sentinel对Redis节点失败的"偏见"

客观下线:所有sentinel对Redis节点失败的"共识"

 

posted @ 2019-05-21 23:20  Diamond-Shine  阅读(285)  评论(0编辑  收藏  举报