• Redis哨兵机制


    一.什么是哨兵机制?
    答:Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:

           监控(Monitoring):  哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。

           提醒(Notification): 当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

          自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

          哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
          每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).
      若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。
          虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel)。
          哨兵(sentinel) 的一些设计思路和zookeeper非常类似 

          


    二.哨兵模式的配置修改
    实现步骤:
    1.拷贝到etc目录
        cp sentinel.conf  /usr/local/redis/etc

    2. 修改sentinel.conf配置文件

        sentinel monitor mymaster  192.168.110.133 6379 1  #主节点 名称 IP 端口号 选举次数

        注:选举次数多余n的从机作为主机

    3. 修改心跳检测 5000毫秒
        sentinel down-after-milliseconds mymaster 5000

    4. 设置几个slave同时进行切换master

        sentinel parallel-syncs mymaster 2

     选项指定了:在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长,但越大就意味着越多的从服务器因为复制而不可用。可以通过将这个值设为 1 ,来保证每次只有一个从服务器处于不能处理命令请求的状态。这样在某个slave进行切换master同步数据时,其余的slave还能正常工作,以此保证每次只有一个从服务器处于不能处理命令请求的状态。

     

    5. 启动哨兵模式
       ./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &

    6. 停止哨兵模式

    注意:

    1.当启动哨兵模式之后,如果你的master服务器宕机之后,哨兵自动会在从redis服务器里面 投票选举一个master主服务器出来;这个主服务器也可以进行读写操作!

    2.如果之前宕机的主服务器已经修好,可以正式运行了。那么这个服务器只能进行读的操作,会自动跟随由哨兵选举出来的新服务器!

    3.大家可以进入./redis-cli,输入info,查看你的状态信息;

     

    三、哨兵(Sentinel)总结

    1、Sentinel的作用:

    A、Master 状态监测

    B、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave 

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

    2、Sentinel的工作方式:

    1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令。

    2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间,超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。 

    3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel ,要以每秒一次的频率确认Master的确进入了主观下线状态。 

    4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内,确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。

    5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令 。

    6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率,会从 10 秒一次改为每秒一次 。

    7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。 

    若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

    参考:

    1.https://blog.csdn.net/zbw18297786698/article/details/52891695

    2.https://blog.csdn.net/candy_rainbow/article/details/52842402

    3.https://blog.csdn.net/a67474506/article/details/50435498

    4.https://www.cnblogs.com/kevingrace/p/9004460.html

  • 相关阅读:
    ArcEngine9.3没有原生支持64位,而是以32位兼容方式运行
    记一次IIS应用程序域崩溃的原因
    切换添加[置顶] Behaviors扩展根据Pivot的item自动切换AppBar
    参数类型11g_job执行带参数的procedure
    元素返回[Python]python算法入门 栈(stack)
    模型案例复杂性思考
    执行目录glassfish不能远程登录问题
    文件目录IBM的LPI复习资料之LPI101Topic103 :GNU和Unix命令(3)文件和目录管理
    企业网站[正能量系列]失业的程序员(一)
    缓冲区方法你有被stringstream坑过吗?
  • 原文地址:https://www.cnblogs.com/651434092qq/p/11111885.html
Copyright © 2020-2023  润新知