articleList

15-【高级篇】Redis6.X 高可用之主从复制+读写分离

2025/03/16 posted in  Redis
Tags: 

第 1 集 Redis6.X 主从复制+读写分离介绍

简介:Redis6.X 主从复制+读写分离介绍

  • 背景

    • 单机部署简单,但是可靠性低,且不能很好利用 CPU 多核处理能力
    • 生产环境-必须要保证高可用-一般不可能单机部署
    • 读写分离是可用性要求不高、性能要求较高、数据规模小的情况;
  • 目标

    • 读写分离,扩展主节点的读能力,分担主节点读压力
    • 容灾恢复,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来
  • Redis 主从架构介绍

第 2 集 Linux 服务器-Redis6.X 主从复制 一主二从架构环境准备

简介:Redis6.X 主从复制 1 主 2 从架构环境准备

  • 配置

    mkdir -p /data/redis/master/data
    mkdir -p /data/redis/slave1/data
    mkdir -p /data/redis/slave2/data
    ​
    #从节点开启只读模式(默认)
    replica-read-only yes
    #从节点访问主节点的密码,和requirepass一样
    masterauth 123456
    #哪个主节点进行复制
    replicaof 8.129.113.233 6379
    
  • 创建主配置文件 redis.conf

    bind 0.0.0.0
    port 6379
    daemonize yes
    ​
    requirepass "123456"
    ​
    logfile "/usr/local/redis/log/redis1.log"
    dbfilename "xdclass1.rdb"
    dir "/usr/local/redis/data"
    appendonly yes
    appendfilename "appendonly1.aof"
    masterauth "123456"
    
  • 创建两个从配置文件 redis.conf

    bind 0.0.0.0
    port 6380
    daemonize yes
    requirepass "123456"
    logfile "/usr/local/redis/log/redis2.log"
    dbfilename "xdclass2.rdb"
    dir "/usr/local/redis/data"
    appendonly yes
    appendfilename "appendonly2.aof"
    replicaof 8.129.113.233 6379
    masterauth "123456"
    
  • 创建从配置文件 redis.conf

    bind 0.0.0.0
    port 6381
    daemonize yes
    requirepass "123456"
    logfile "/usr/local/redis/log/redis3.log"
    dbfilename "xdclass3.rdb"
    dir "/usr/local/redis/data"
    appendonly yes
    appendfilename "appendonly3.aof"
    replicaof 8.129.113.233 6379
    masterauth "123456"
    
  • 防火墙记得关闭,或者开放对应的端口

    • 阿里云服务器记得开发网络安全组

第 3 集 Redis6.X 主从复制 一主二从架构搭建实战

简介:Redis6.X 主从复制 1 主 2 从架构搭建实战

  • 启动

    #启动主
    ./redis-server /data/redis/master/data/redis.conf
    ​
    ​
    #启动从
    ./redis-server /data/redis/slave1/data/redis.conf
    ​
    #启动从
    ./redis-server /data/redis/slave2/data/redis.conf
    
  • info replication 查看状态

  • 主从复制和读写验证

  • 防火墙和网络安全组记得开放端口

    • 6379 主节点
    • 6380 从节点
    • 6381 从节点

第 4 集 Redis6.X 主从架构-复制读写分离原理解析

简介:Redis6.X 主从复制-读写分离原理解析

  • 主从复制分两种(主从刚连接的时候,进行全量同步;全同步结束后,进行增量同步)

    • 全量复制

      • master 服务器会开启一个后台进程用于将 redis 中的数据生成一个 rdb 文件
      • 主服务器会缓存所有接收到的来自客户端的写命令,当后台保存进程 处理完毕后,会将该 rdb 文件传递给 slave 服务器
      • slave 服务器会将 rdb 文件保存在磁盘并通过读取该文件将数据加载到内存
      • 在此之后 master 服务器会将在此期间缓存的命令通过 redis 传输协议发送给 slave 服务器
      • 然后 slave 服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性
    • 增量复制

      • Slave 初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程
      • 服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令
  • 特点

    • 主从复制对于 主/从 redis 服务器来说是非阻塞的,所以同步期间都可以正常处理外界请求

    • 一个主 redis 可以含有多个从 redis,每个从 redis 可以接收来自其他从 redis 服务器的连接

    • 从节点不会让 key 过期,而是主节点的 key 过期删除后,成为 del 命令传输到从节点进行删除

      • 从节点开启 sync 看日志
  • 加速复制

    • 完全重新同步需要在磁盘上创建一个 RDB 文件,然后加载这个文件以便为从服务器发送数据
    • 在比较低速的磁盘,这种操作会给主服务器带来较大的压力
    • 新版支持无磁盘的复制,子进程直接将 RDB 通过网络发送给从服务器,不使用磁盘作为中间存储
    • repl-diskless-sync yes (默认是 no)
  • 主从断开重连

    • 如果遭遇连接断开,重新连接之后可以从中断处继续进行复制,而不必重新同步
    • 2.8 版本后 部分重新同步这个新特性内部使用 PSYNC 命令,旧的实现中使用 SYNC 命令