zoukankan      html  css  js  c++  java
  • 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节点失败的"共识"

  • 相关阅读:
    错误:net::ERR_BLOCKED_BY_CLIENT
    ui-grid angularjs
    angular Js 回车处理
    百度云盘-真实地址 F12 控制台
    Js 跨域CORS报错 Response for preflight has invalid HTTP status code 405
    angularjs 路由参数
    AngularJs Angular数据类型判断
    Bootstrap+AngularJS对话框实例
    AngularJs表单自动验证
    IIS7.5上的REST服务的Put操作发生HTTP Error 405.0
  • 原文地址:https://www.cnblogs.com/huigelaile/p/10900008.html
Copyright © 2011-2022 走看看