zoukankan      html  css  js  c++  java
  • Redis 哨兵 Sentinel

    Redis Sentinel:redis集群应用,分布式系统。

    • 多个Sentinal进程之间通过 gossip 协议来接收主服务器是否下线的信息,通过 Raft 一致性协议来决定故障转移及转移服务器。
    • 监控(monitoring):PING消息检查主从服务器运行状态
    • 通知(notification):通知问题服务器信息
    • 故障迁移(automatic failover):提升失效主服务器的从服务器为新的主服务器,其它从属服务器从新的主服务器复制信息,集群向客户端返回新的主服务器地址,

    1、启动命令:

    redis-server /path/to/sentinel.conf --sentinel

    配置文件

    sentinel monitor mymaster 127.0.0.1 6379 2 //主服务器名称 ip port 判定失效投票数

    sentinel down-after-milliseconds mymaster 60000 //sentinel判定服务器失效所需的毫秒数

    sentinel failover-timeout mymaster 180000 //故障转移时限

    sentinel parallel-syncs mymaster 1 //故障转移时,最多可以有多少个从服务器对新的主服务器请求同步 同一时间只让一个从服务器置于不可用状态

    2、自动发现Sentinel实例及从服务器: 

    • sentinel实例发现:监视相同主机的sentinel实例,通过订阅发布功能实现相互发现,频道: _sentinel_:hello

    • 从服务器发现:sentinel实例通过询问主服务来获取其下从属服务器信息:

    • 发现流程:

    sentinel 发送本实例 ip、port、runid 到监视的主从服务器频道 sentinel:hello
    |                                                                                                                                     |
    sentinel 从订阅的 主从服务器 sentinel:hello 频道 获取监视的sentinel信息                     从订阅的 主从服务器 sentinel:hello 频道获取监视的sentinel主发送的服务器配置信息
    |                                                                                                                                     |
    自动添加新的sentinel实例到配置列表(所有监视同一主服务器的所有sentinel实例列表) 将主服务器配置信息更新到最新的配置
    (相同runid或者相同ip:port的列表条目会被移除,然后添加新的条

    3、下线:

    • 主观下线(SDOWN):单个sentinel判定服务器下线

    • 客观下线(ODOWN):多个sentinel判定服务器SDOWN,并通过SENTINEL is-master-down-by-addr命令相互交互后,得出服务器下线判断。只适用于主服务器

    • 判定流程: 

      • sentinel PING消息;服务器回复 +PONG -LOADING -MASTERDOWN 
      • 服务器在master-down-after-milliseconds内连续回复无效信息 认定主观下线
      • 发现主服务器客观下线的sentinel进行故障迁移操作
      • sentinel 实例 只提供了订阅功能的redis服务器,订阅相应的频道获取监控服务器的相关信息。
      • Raft协议领导者选举。

    4、故障转移过程:

    • 主服务器客观下线

    • sentinel epoch自增,试图当选执行故障转移

    • Raft协议选择一个从属服务器为新的主服务器

    • 发送SLAVEOF NO ONE 使其转变为主服务器

    • 通过订阅发布向其它sentinel发送最新的主服务器配置信息。

    • 向原来的从服务器发送SLAVEOF命令,使他们向心的主服务器请求信息复制同步

    • 当所有从服务器想新的主服务器请求数据复制同步事,sentinel终止故障转移

    4、附注:

    • Redis Sentinel严重依赖系统时间,例配置
    • lua脚本执行超时,redis返回-BUSY状态,Sentinel会在故障转移前杀死脚本。
    • 哨兵是为了解决单点故障问题
     
  • 相关阅读:
    [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想)
    怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32
    iOS悬浮窗口(无论界面跳转、View始终在视图上显示,可移动)
    开发工程中遇到的BUG
    iOS基于B站的IJKPlayer框架的流媒体探究
    iOS 快速集成ijkplayer视频直播与录播框架
    每日英语:Air Pollution From Coal Use Cuts Lifespans in China, Study Shows
    每日英语:Do Successful People Need Sleep?
    每日英语:Risk-Averse Culture Infects U.S. Workers, Entrepreneurs
    每日英语:How to find the career of your dreams
  • 原文地址:https://www.cnblogs.com/niejunlei/p/8657615.html
Copyright © 2011-2022 走看看