• Redis系列(四)-Redis 哨兵(Sentinel)模式


    Redis的主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工将从节点晋升为主节点, 同时还要通知应用方更新主节点地址, 对于很多应用场景这种故障处理的方式是无法接受的。 可喜的是Redis从2.8开始正式
    提供了Redis Sentinel(哨兵) 架构来解决这个问题。
    Redis主从复制的缺点:没有办法对master进行动态选举,需要使用Sentinel机制完成动态选举。

    1. 哨兵模式介绍
    Sentinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态
    在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)
    其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。

    2.哨兵进程的作用
    监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
    提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
    自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作。

    它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;
    当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。
    Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

    3.哨兵进程的工作方式
    每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。
    如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值,则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)。
    如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有
    Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态。
    当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)。
    在一般情况下, 每个Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。
    当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
    若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。

    4.哨兵实操
    4.1 创建配置文件
    redis根目录/etc/sentinel.conf拷贝到/etc/sentinel目录下
    修改一下node1、node2、node3

    bind 本机IP
    sentinel monitor mymaster redis主IP 6379 2
    sentinel auth-pass mymaster 密码
    dir /var/sentinel/26379

    4.2 启动哨兵进程

    在node1、node2、node3三台机器上,分别启动三个哨兵进程,组成一个集群,观察一下日志的输出

    cd /home/soft/redis-6.0.8/src
    ./redis-sentinel /etc/sentinal/sentinal.conf

    日志里会显示出来,每个哨兵都能去监控到对应的redis master,并能够自动发现对应的slave

    哨兵之间,互相会自动进行发现

    ./redis-cli -h 192.168.2.221 -p 26379
    
    sentinel master mymaster
    SENTINEL slaves mymaster
    SENTINEL sentinels mymaster

    本篇内容是参考网络教程学习过程中的笔记
    开发工作着,生活快乐着,留下总结,相互交流,共同进步
  • 相关阅读:
    小白的基金理财课
    Spring Security 入门原理及实战
    spring-data-rest的魔力 10分钟实现增删改查
    redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用
    Netty开发redis客户端,Netty发送redis命令,netty解析redis消息
    使用Netty实现HTTP服务器
    Netty实现心跳机制
    SpringMVC是怎么工作的,SpringMVC的工作原理
    Netty 学习系列
    Mybatis 源码学习系列
  • 原文地址:https://www.cnblogs.com/lovechengyu/p/15165141.html
Copyright © 2020-2023  润新知