• redis哨兵功能


    redis哨兵功能

    redis-Sentinel(哨兵)

    • 前言
      • 当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户都没有实现主从切换的功能
    • redis-sentinel是redis官方推荐的高可用性解决方案,
    • 而redis-Sentinel就是一个独立运行的进程,用于监控多个master-slave集群,自动发现master宕机,进行自动切换slave>master
    • 功能:
      • 不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
      • 如果被标识的是主节点,Sentinel就会和其他的Sentinel节点'协商',如果其他节点也人为主节点不可达,就会选举一个Sentinel节点来完成自动故障转义
      • 在master-slave(主-从)进行切换后,master_redis.conf,slave_redis.conf和Sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,Sentinel.conf的监控目标会随之调换

    redis主从复制背景

    • redis主从复制可将主节点数据同步给从节点,从节点此时有俩个作用:

      • 一旦主节点宕机,从节点作为主节点的备份可以随机顶上来.
      • 扩展主节点的读能力,分担主节点读压力
    • 存在问题:

      • 一旦主节点宕机,从节点上位,那么需要人为修改所有应用方的主节点地址(改为新的master地址),还需要命令所有从节点复制新的主节点

      所以要实现这些功能,redis-sen就可以解决

    主从复制架构

    img

    img

    • redis-Sentinel(哨兵功能):
      • 哨兵进行检测,主从架构是否正常,如果主库挂掉,哨兵会自动修复redis.conf,进行添加/删除slaveof 指令
      • 作用:只是监控redis

    redis-Sentinel(哨兵)配置

    • 这里是以三个redis为实例,一主俩从
    1. 准备三个redis实例,一主俩从

      # 主配置
      vim redis-6379.conf
      # 插入数据
      port 6379
      daemonize yes
      logfile "6379.log"
      dbfilename "dump-6379.rdb"
      dir "/var/redis/data/"
      
      #从节点配置
      vim redis-6380.conf
      #插入数据
      port 6380
      daemonize yes
      logfile "6380.log"
      dbfilename "dump-6380.rdb"
      dir "/var/redis/data/" 
      slaveof 127.0.0.1 6379      // 从属主节点
      
      # 从节点配置
      vim redis-6381.conf
      #插入数据
      port 6381
      daemonize yes
      logfile "6380.log"
      dbfilename "dump-6380.rdb"
      dir "/var/redis/data/" 
      slaveof 127.0.0.1 6379      // 从属主节点
      
    2. 启动主节点

      redis-server redis-6379.conf
      
      #登录客户端
      redis-cli -p 6380 
      # 检测是否通信
      ping   # 输出为pong则为正常
      

      注意问题:这里如果启动客户端显示

      Could not connect to Redis at 127.0.0.1:6379: Connection refused

      解决方法:创建mkdir /var/redis/data/

    3. 启动俩个slave(从)节点

      redis-server  redis-6380.conf
      redis-server  redis-6381.conf
      
      # 登录客服端验证
      与上述主节点验证方法一样
      
    4. 检测主从的状态是否正常

      redis-cli  -p 6379 info replication
      
      
      # 输出内容如下为正常
      # Sentinel
      sentinel_masters:1
      sentinel_tilt:0
      sentinel_running_scripts:0
      sentinel_scripts_queue_length:0
      sentinel_simulate_failure_flags:0
      master0:name=qsmaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3
      

      注意:

      ​ 如果发现实验不成功,需删掉所有的配置文件,从新来过

      准备三个哨兵,开始监控主从架构

      1. 准备三个配置文件,哨兵文件

        vim redis-26379.conf    # 名字随意起,
        #插入内容
        port 26379  
        dir /var/redis/data/
        logfile "26379.log"
        sentinel monitor qsmaster  127.0.0.1 6379 2
        sentinel down-after-milliseconds qsmaster 30000
        sentinel parallel-syncs qsmaster 1
        sentinel failover-timeout qsmaster 180000
        daemonize yes 
        
        #第二个哨兵
        vim redis-26380.conf
        
        port 26380  
        dir /var/redis/data/
        logfile "26380.log"
        sentinel monitor qsmaster  127.0.0.1 6379 2
        sentinel down-after-milliseconds qsmaster 30000
        sentinel parallel-syncs qsmaster 1
        sentinel failover-timeout qsmaster 180000
        daemonize yes 
        
        #第三哨兵
        vim redis-26381.conf
        
        port 26381  
        dir /var/redis/data/
        logfile "26381.log"
        sentinel monitor qsmaster  127.0.0.1 6379 2
        sentinel down-after-milliseconds qsmaster 30000
        sentinel parallel-syncs qsmaster 1
        sentinel failover-timeout qsmaster 180000
        daemonize yes 
        
      2. 启动三个哨兵

        redis-sentinel redis-26379.conf 
        redis-sentinel redis-26380.conf 
        redis-sentinel redis-26381.conf 
        

        注意!!如果发现实验不成功,需删掉所有的哨兵配置文件,从新来过

        注意!!如果发现实验不成功,需删掉所有的哨兵配置文件,从新来过

      3. 检查哨兵状态

        redis-cli -p 26379 info sentinel
        
        
        信息如下为正常
        # Sentinel
        sentinel_masters:1
        sentinel_tilt:0
        sentinel_running_scripts:0
        sentinel_scripts_queue_length:0
        sentinel_simulate_failure_flags:0
        master0:name=qsmaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3
        
      4. 模拟哨兵自动进行主从切换

        # 查看进程信息
        ps -ef |grep redis
        # 杀死6379的进程
        kill -9  6379的进程号
        
        # 查看6380和6381的身份信息,看是否进行主从切换
        redis-cli  -p 6380 info replication
        redis-cli  -p 6381 info replication
        
        # 手动启动6379挂掉的数据库,看是否会被哨兵,添加进信息主从集群
        redis-server redis-6379.conf
        
        redis-cli  -p 6379 info replication
        
  • 相关阅读:
    如何将u盘、移动硬盘转化为活动分区--绝招
    jstl错误排除:According to TLD or attribute directive in tag file, attribute value does not accept any expressions
    eclipse中package explore和project explore 怎么相互切换???
    硬盘知识区
    Sublime Text 3下Emmet使用技巧
    sublime text3中设置Emmet输入标签自动闭合
    window如何分区
    HTTP缓存
    react-router 4实现代码分割(code spliting)
    Vue练手项目(包含typescript版本)
  • 原文地址:https://www.cnblogs.com/yuncong/p/10293592.html
Copyright © 2020-2023  润新知