美文网首页
Redis的主从与redis-sentinel自愈

Redis的主从与redis-sentinel自愈

作者: 火鸡不肥 | 来源:发表于2019-03-07 17:58 被阅读0次
    1. 原理:

    从服务器向主服务器发送 SYNC 命令。
    接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
    当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
    主服务器将缓冲区储存的所有写命令(广播形式)发送给从服务器执行。

    1. 主从数据一致性保证:
    min-slaves-to-write   # 以及执行写操作所需的至少从服务器数量
    min-slaves-max-lag   # 用户可以通过配置, 指定网络延迟的最大值
    
    这个特性的运作原理:
    从服务器以每秒一次的频率 PING 主服务器一次, 并报告复制流的处理情况。
    主服务器会记录各个从服务器最后一次向它发送 PING 的时间。
    
    1. 主从复制实现:
    1. 环境:
      准备两个或两个以上redis实例
     mkdir /data/638{0..2}
    
     配置文件示例:
     cat >> /data/6380/redis.conf << EOF 
     port 6380
     daemonize yes
     pidfile /data/6380/redis.pid
     loglevel notice
     logfile "/data/6380/redis.log"
     dbfilename dump.rdb
     dir /data/6380
     requirepass 123
     masterauth 123
     EOF
    
     cp /data/6380/redis.conf /data/6381/redis.conf
     cp /data/6380/redis.conf /data/6382/redis.conf
    
     sed -i 's#6380#6381#g' /data/6381/redis.conf
     sed -i 's#6380#6382#g' /data/6382/redis.conf
    
     启动:
     redis-server /data/6380/redis.conf
     redis-server /data/6381/redis.conf
     redis-server /data/6382/redis.conf
    
     查看
     netstat -lnp|grep 638
    
     主节点:6380
     从节点:6381、6382
    
    1. 开启主从:
      6381/6382命令行:
    redis-cli -p 6381 -a 123 SLAVEOF 127.0.0.1 6380
    redis-cli -p 6382 -a 123 SLAVEOF 127.0.0.1 6380
    
    1. 查询主从状态
    redis-cli -p 6380 -a 123 info replication
    redis-cli -p 6381 -a 123 info replication
    redis-cli -p 6382 -a 123 info replication
    
    1. 模拟主库故障 , 从库切为主库
    redis-cli -p 6380 -a 123 shutdown
    redis-cli -p 6381 -a 123
    info replication
    slaveof no one
    
    6382连接到6381:
    [root@db03 ~]# redis-cli -p 6382 -a 123
    127.0.0.1:6382> SLAVEOF no one
    127.0.0.1:6382> SLAVEOF 127.0.0.1 6381
    
    1. 基于redis-sentinel实现自愈
      redis-sentinel(哨兵)
      作用:

      1. 监控
      2. 自动选主,切换(6381 slaveof no one)
      3. 2号从库(6382)指向新主库(6381)
      4. 应用透明

    sentinel搭建过程

    mkdir /data/26380
    cd /data/26380
    
    cat >> sentinel.conf << EOF
    port 26380
    dir "/data/26380"
    sentinel monitor mymaster 127.0.0.1 6380 1
    sentinel down-after-milliseconds mymaster 5000
    sentinel auth-pass mymaster 123 
    EOF
    
    启动:
    redis-sentinel /data/26380/sentinel.conf &
    

    效果: 当主库挂了, 主库自动切换为数据最新的那台, 其他库将这个库设为主库
    当挂了的主库修好加入进来, 自动变为从库

    1. Sentinel管理命令:
    
    PING :返回 PONG 。
    SENTINEL masters :列出所有被监视的主服务器
    SENTINEL slaves <master name> 
    SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。 
    SENTINEL reset <pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。 
    SENTINEL failover <master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。
    

    缓存穿透, 雪崩, 击穿概念

    概念
    访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。
    
    解决方案
    采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;
    访问key未在DB查询到值,也将空值写进缓存,但可以设置较短过期时间。
    
    缓存雪崩
    概念
    大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。
    
    解决方案
    可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。
    
    缓存击穿
    概念
    一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。
    
    解决方案
    在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。
    

    相关文章

      网友评论

          本文标题:Redis的主从与redis-sentinel自愈

          本文链接:https://www.haomeiwen.com/subject/tpjhpqtx.html