• Redis哨兵集群搭建


    redis一主两从集群搭建:https://editor.csdn.net/md/?articleId=127769968
    如果slave节点宕机恢复后可以找到master节点同步数据,那master节点宕机了怎么办?
    一、哨兵的作用与原理
    Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:
    (1)监控:Sentinel会不断检测master和slave是否按预期工作。
    (2)自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主。
    (3)通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端。

    服务状态监控
    Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:
    主观下线:如果某个Sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
    客观下线:若超过指定数量(quorum)的Sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。

    选举新的master
    一旦发现master故障,Sentinel需要在slave中选择一个作为新的master,选择依据如下:
    (1)首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该节点
    (2)然后判断slave节点的slave-priority值,越小优先级越高,如果是0则用不参与选举
    (3)如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
    (4)最后是判断slave节点的运行id大小,越小优先级越高

    如何实现故障转移
    当选择了其中一个slave为新的master后,故障的转移步骤如下:
    (1)Sentinel给备选的slave节点发送slaveof on one命令,让该节点成为master
    (2)Sentinel给所有其它slave发送slaveof ip 端口号命令,让这些slave成为新master的从节点,开始从新的master上同步数据
    (3)最后,Sentinel将故障点标记为slave,当故障节点恢复后会自动成为新的master的slave节点

    二、搭建哨兵集群,一主两从三哨兵
    环境:我是在3台阿里云实例上安装了3个redis
    (1)创建配置文件(3台redis上都需要,除了自己的ip不一样,其他内容一模一样),/usr/local/src/redis-7.0.5/sentinel/sentinel.conf,内容如下:

    #当前sentinel实例的端口
    port 26379
    #声明自己的ip地址
    sentinel announce-ip ip
    #声明sentinel的监控并设置主节点,sentinel monitor mymaster(主节点名称,自定义,任意写),2(超过2则表示客观下线)
    sentinel monitor mymaster 主节点ip 6379 2
    sentinel auth-pass mymaster 主节点密码
    #设置超时时间
    sentinel down-after-milliseconds mymaster 5000
    #故障恢复超时时间
    sentinel failover-timeout mymaster 60000
    #工作目录
    dir "/usr/local/src/redis-7.0.5/sentinel"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (2)启动哨兵(3台都需要启动):redis-sentinel sentinel/sentinel.conf
    在这里插入图片描述
    (3)创建日志文件目录,用于查看日志,修改redis.conf文件的logfile属性

    logfile "/usr/local/src/redis-7.0.5/log/redis.log"
    
    • 1

    测试
    (1)关掉主节点redis:systemctl stop redis
    (2)测试方法1:打开sentinel/sentinel.conf文件,查看主节点ip是否变更,有变更,那么它指向的就是新的主节点
    (3)测试方法2:去两个从节点中往redis设值,如果能设值进去,它就是新的主节点

    注意:如果用的是云服务器,redis端口和哨兵端口都要放行,如果云服务器开启了防火墙,防火墙端口也要放行,或者直接关闭防火墙。

  • 相关阅读:
    [附源码]java毕业设计置地房屋租赁信息系统
    02_数据类型及其运算
    用openhub无法拿到query里面信息对象的文本
    内存逃逸分析
    【React源码】(十七)React 算法之深度优先遍历
    艾美捷ProSci丨ProSci I kappa B 激酶检测套装解决方案
    HTTP缓存协议实战
    [附源码]计算机毕业设计少儿节目智能推荐系统Springboot程序
    利用现有数据库管理系统创建一个安全的分布式数据库集群
    功能测试自动化测试流程
  • 原文地址:https://blog.csdn.net/weixin_43526092/article/details/127777186