美文网首页
Redis哨兵模式

Redis哨兵模式

作者: JBryan | 来源:发表于2020-04-28 22:01 被阅读0次

    1、哨兵简介

    哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。

    哨兵的作用

    监控
    不断的检查master和slave是否正常运行。
    master存活检测、master与slave运行情况检测

    通知(提醒)
    当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。

    自动故障转移
    断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址。

    注意:
    哨兵也是一台redis服务器,只是不提供数据服务
    通常哨兵配置数量为单数

    2、启用哨兵模式

    redis-sentinel sentinel-端口号.conf

    [root@localhost redis-4.0.6]# redis-sentinel sentinel.conf 
    2238:X 28 Apr 20:39:09.934 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    2238:X 28 Apr 20:39:09.934 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=2238, just started
    2238:X 28 Apr 20:39:09.934 # Configuration loaded
    2238:X 28 Apr 20:39:09.935 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                    _._                                                  
               _.-``__ ''-._                                             
          _.-``    `.  `_.  ''-._           Redis 4.0.6 (00000000/0) 64 bit
      .-`` .-```.  ```\/    _.,_ ''-._                                   
     (    '      ,       .-`  | `,    )     Running in sentinel mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
     |    `-._   `._    /     _.-'    |     PID: 2238
      `-._    `-._  `-./  _.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |           http://redis.io        
      `-._    `-._`-.__.-'_.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |                                  
      `-._    `-._`-.__.-'_.-'    _.-'                                   
          `-._    `-.__.-'    _.-'                                       
              `-._        _.-'                                           
                  `-.__.-'                                               
    
    2238:X 28 Apr 20:39:09.937 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    2238:X 28 Apr 20:39:09.938 # Sentinel ID is 0899fe69d4ddfc0456ac47fea0290072e8240894
    2238:X 28 Apr 20:39:09.938 # +monitor master mymaster 127.0.0.1 6379 quorum 2
    

    sentinel.conf文件中配置哨兵:

    sentinel monitor mymaster 127.0.0.1 6379 1   
    sentinel down-after-milliseconds mymaster 10000
    sentinel failover-timeout mymaster 60000
    sentinel parallel-syncs mymaster 1
    
    配置哨兵.jpg

    3、哨兵工作原理

    哨兵在进行主从切换过程中经历三个阶段:监控、通知、故障转移。

    3.1、监控阶段

    用于同步各个节点的状态信息
    1、获取各个sentinel的状态(是否在线)
    2、获取master的状态:master属性、runid、role:master、各个slave的详细信息
    3、获取所有slave的状态(根据master中的slave信息):slave属性、runid、role:slave、master_host、master_port、offset……

    哨兵监控阶段.jpg

    1、sentinel1向master发送了一条info指令,拿到master的info信息,就可以获取master和slave的状态。
    2、sentinel1建立和master的cmd连接,然后保存所有的哨兵状态。
    3、sentinel1向slave发送info指令,获取slave的状态。
    4、启动sentinel2,向master发送info指令。
    5、建立cmd连接,获取哨兵状态,发现此master已经有一个哨兵在监控。
    6、sentinel2和sentinel1建立发布订阅通道,相互连接,并发送ping命令
    以此类推,直到sentinel3与sentinel1和sentinel2建立通道,并获取master、slave信息。

    3.2、通知阶段

    三个sentinel组成了一个小的群体,他们之间进行信息的互通。sentinel通过与master和slave建立的cmd连接,获取他们的工作状态。sentinel定时向各个服务器发送信息,拿到服务器响应的结果之后,会在sentinel小群体里面,共享信息。


    通知阶段.jpg
    3.3、故障转移阶段
    故障转移.jpg

    1、sentinel向master发送指令(假设master宕机),得不到响应,于是标记master为S_DOWN(主观下线:一台sentinel认为他挂了)。
    2、然后将这条信息传播到sentinel小群体内。
    3、其他sentinel查看master的状态,将自己观察到的信息也传播到内网里。
    4、当超过半数的sentinel都认为master挂了的时候,就将master的状态标记为O_DOWN(客观下线:一台sentinel认为他挂了)。
    5、sentinel小群体投票选出一个领头sentinel。
    6、领头sentinel从服务器列表中,挑选备选master:挑选在线的,过滤掉响应慢的,过滤掉与master断开时间久的,应用优先级原则(优先级、offset、runid)挑选出新的master。
    7、向新的master发送slaveof no one,向其他slave发送slaveof 新masterIP端口

    相关文章

      网友评论

          本文标题:Redis哨兵模式

          本文链接:https://www.haomeiwen.com/subject/qgubwhtx.html