• Redis(四)Redis的高可用方案【主从】


    一、主从架构

    架构图

    构建步骤

    1、创建一个新的目录,模拟用【从根目录开始演示】
    cd zhTools/redis-5.0.3
    mkdir zhRedisDemo #创建目录
    cd zhRedisDemo
    mkdir slave #创建主从模式的目录
    cd slave
    mkdir 6380 #用于存放6380端口的数据【主】
    mkdir 6381 #用于存放6381端口的数据【从】
    
    2、把redis的配置文件复制2份分别放到对应的目录下【从根目录开始演示】
    cd zhTools/redis-5.0.3
    cp redis.conf zhRedisDemo/slave/6380
    cp redis.conf zhRedisDemo/slave/6381
    
    3、进入6380目录,并修改redis.conf【主】
    port 6380 #端口
    pidfile /var/run/redis_6380.pid #把pid进程号写入pidfile配置的文件
    logfile "6380.log" #日志文件存放在当前目录
    bind 0.0.0.0 #开放访问
    dir /root/zhTools/redis-5.0.3/zhRedisDemo/slave/6380/data # 指定数据存放目录
    
    4、进入6381目录,并修改redis.conf【从】
    port 6381 #端口
    pidfile /var/run/redis_6381.pid #把pid进程号写入pidfile配置的文件
    logfile "6381.log" #日志文件存放在当前目录
    bind 0.0.0.0 #开放访问
    dir /root/zhTools/redis-5.0.3/zhRedisDemo/slave/6381/data # 指定数据存放目录
    replicaof 120.24.58.161 6380 # 从本机6380的redis实例复制数据,Redis 5.0之前使用slaveof
    replica‐read‐only yes #配置从节点只读
    masterauth xxxxxxxxx #配置主节点密码【若主节点设置了密码则需要这个配置项】
    
    5、分别使用刚才6380、6381的配置文件启动主节点、从节点
    
    6、链接客户端开始测试

     

     

    二、Redis主从工作原理

      主从同步流程:

    • 1、当我们为master配置了一个slave,管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据
    • 2、master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件
    • 3、持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中
    • 4、当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中
    • 5、master再将之前缓存在内存中的命令发送给slave

      PS:当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave

      PS:SYNC使用的是全量复制PSYNC使用的是增量复制

      PS:主从结构一般会设置成:主节点负责写入从节点负责备份和读取

    全量同步

      PS:主从同步与开不开启持久化无关,是redis服务端做的事情。至于为什么用rdb文件来同步也是因为rdb是二进制形式的数据,同步起来比aof更快。

    增量同步、断点续传

    三、Redis主从复制风暴的解决方案

      刚听到这个名词觉得相当高大上,这里解释一下:

      主从复制风暴:多个从节点同时复制主节点导致主节点压力过大

      解决方案:让部分从节点向另一些从节点同步数据PS:这里被同步的从节点要持续与主节点进行同步。

      PS:主节点一般配置不超过10个G因为太大了会影响同步时的效率

  • 相关阅读:
    Locust性能测试-环境准备与基本使用 转自:悠悠
    Locust性能测试_先登录场景案例
    python_协程
    python_进程池以及线程池
    python_并发与通信
    python_进程与线程的补充
    python_并行与并发、多线程
    Hash算法:双重散列
    AVL树的插入和删除
    查找最小生成树:普里姆算法算法(Prim)算法
  • 原文地址:https://www.cnblogs.com/riches/p/15091870.html
Copyright © 2020-2023  润新知