• Redis主从复制+哨兵模式


    必读

    redis的主从复制是单向的,只能有主节点到从节点,主节点以写为主从节点以读为主不能写入数据!因为系统的80%的需求都是读的需求。

    redis服务默认自己是主节点,一个主节点由一个或多个从节点,一个从节点只有一个主节点。

    全量复制:redis的从节点挂掉了,当再次连接到主机后,会全量复制主节点的所有数据来保证数据的一致性;
    增量复制:当主节点挂掉了,从节点再次连接到重启后的主节点时,主节点存入新的数据,从节点也会存入相同的数据;

    查看当前redis信息:

    登录redis:

    redis-cli -p 6379
    
    • 1

    在这里插入图片描述
    有密码的话执行命令:AUTH 设置的redis的密码

    查看主从redis的信息:

     info replication
    
    • 1

    在这里插入图片描述
    role:角色为主节点(默认值)
    connected_slaves:连接的从节点数

    主从复制配置

    我这里有三台服务器,因为redis默认自己是主节点所以在其中任选一台作为主节点,这个服务器的redis不用配置,我们去吧哪两个服务器的redis配置成这个主节点redis的从节点;

    在两个从节点服务器连接redis后都执行:

    slaveof 8.142.99.94 6379
    
    • 1

    在这里插入图片描述
    slaveof :主从复制的命令
    8.142.99.94 :主节点ip
    6379 : 主节点redis的端口号

    注意:如果主节点redis设置了密码一定要在从节点的配置文件中写上;所有节点的redis密码必须一样
    在这里插入图片描述
    加上主节点密码后再次连接即可;

    在这里插入图片描述
    在这里插入图片描述
    可以看到两个从节点都连接上了主节点;

    在这里插入图片描述
    主节点也看到这两个从节点的信息了。

    测试:
    主节点

    在这里插入图片描述
    从节点1
    在这里插入图片描述
    从节点2
    在这里插入图片描述
    主从复制完成;

    哨兵模式

    1) 哨兵模式是Redis的高可用方式,哨兵节点是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。
    2) 哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点挂掉时,哨兵会第一时间感知到,并且在slave节点中重新选出来一个新的master,然后将新的master信息通知给client端,从而实现高可用。这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息
    3) Sentinel 哨兵是redis官方提供的高可用方案,它可以用来监听多个redis实例的运行情况.

    Sentinel是一个进程我们需要启动它,启动方式和redis一样;

    新建一个sentinel文件;
    在这里插入图片描述
    文件夹中在新建一个conf和log文件夹;

    在conf文件夹中创建一个名为sentinel.conf文件;在这里插入图片描述
    文件内容:

    port 26379
    dir "/var/log/sentinel"
    logfile "/var/log/sentinel/sentinel-log.log"
    # sentine1 monitor关键字
    # master 给主从服务器集群起一个名字(监控主服务器,从服务器的信息也就获取了)主服务器的IP和端口
    # 2主服务器失效的统计数,超过2票就认为失效
    sentinel monitor mymaster 8.142.99.94 6379 1
    # 如果主服务器redis有密码就在此设置主节点redis的密码
    sentinel auth-pass mymaster 123456789
    # 主服务器下线超过30秒就进行切换(默认30S)
    #sentinel down-after-milliseconds mymaster 30000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    port:sentinel的端口号(以后就是连接sentinel有sentinel去转发操作redis的命令)
    dir : sentinel的工作目录用于生成文件;
    logfile :日志文件的目录
    sentinel monitor :设置监控的redis主机
    mymaster :微监控的主机redis取一个名字 ;
    192.168.243.4 : 监控主机的ip
    6379 : redis的端口号
    1 :有一个sentinel 连接不上主机的redis时认为主机挂掉了,这时就需要故障转移;

    启动测试:

    docker run -d --name sentinel -v /mydocker/sentinel/conf/sentinel.conf:/conf/sentinel.conf -v /mydocker/sentinel/log:/var/log/sentinel  redis:6.2.6 redis-sentinel /conf/sentinel.conf
    
    
    • 1
    • 2

    1、首先停止主节点redis服务
    在这里插入图片描述
    可以看到主节点变更了;
    在这里插入图片描述
    这个从节点的主节点也改成新的主节点了;
    在这里插入图片描述
    现在重启原先的主节点;
    在这里插入图片描述
    可以看到自动成为从节点并连接到了新的主节点了;
    在这里插入图片描述
    连接状是down 是因为没有在redis配置文件中配置主节点redis的连接密码:

     masterauth 123456789
    
    • 1

    在配置文件中添加以上代码即可:
    在这里插入图片描述
    重启redis:
    在这里插入图片描述
    数据同步成功!

    我这里在增加两个sentinel(哨兵),分别在这两个新的从机上启动sentinel进程使sentinel也实现高可用!
    我这里重新停止了当前的sentinel进程重新在这三台服务器上创建sentinel进程;
    按照上面启动sentinel的步骤在这三台服务器上创建即可:
    在这里插入图片描述

    port 26379
    dir "/var/log/sentinel"
    logfile "/var/log/sentinel/sentinel-log.log"
    # sentine1 monitor关键字
    # master 给主从服务器集群起一个名字(监控主服务器,从服务器的信息也就获取了)主服务器的IP和端口
    # 2主服务器失效的统计数,超过2票就认为失效
    sentinel monitor mymaster 43.143.198.158 6379 2
    # 如果主服务器redis有密码就在此设置主节点redis的密码
    sentinel auth-pass mymaster 123456789
    # 主服务器下线超过10秒就进行切换(默认30S)
    #sentinel down-after-milliseconds mymaster 30000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    分别这在三台服务器上启动即可:

    docker run -d --name sentinel -v /mydocker/sentinel/conf/sentinel.conf:/conf/sentinel.conf -v /mydocker/sentinel/log:/var/log/sentinel  redis:6.2.6 redis-sentinel /conf/sentinel.conf
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到全部成功即可:

    springboot配置:

    spring:
      redis:
        timeout: 5000
        sentinel:
          master: mymaster
          nodes: 8.142.97.14:26379,43.143.198.158:26379,8.142.99.94:26379
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    完事!

  • 相关阅读:
    springboot集成mysql、mybatis-plus、shardingsphere-jdbc实现读写分离
    ROS1 学习11 坐标系tf 管理系统 简介及demo示例
    Chainlit vs Streamlit和Gradio:为什么Chainlit是开发聊天机器人不错的选择
    【c++】向webrtc学比较2: IsNewerSequenceNumber 用于NackTracker及测试
    Vue3理解(7)
    扩容磁盘的inode数量
    MyBatis-Plus删除操作知识点总结
    内置MOS升压芯片FP6293 双节锂升压8.4V/1A
    Linux安装Docker完整教程及配置阿里云镜像源
    MyBatis如何使用delete标签删除数据呢?
  • 原文地址:https://blog.csdn.net/qq_18153681/article/details/128155110