• Redis 主从模式


    Redis 主从模式

    目录

    Redis 主从模式

    Redis 的集群历史

    Redis 主从模式架构

    Redis主从复制原理

    redis < 2.8

    redis >= 2.8

    notice

    SYNC 工作原理

    PSYNC 工作原理

    Redis 主从模式环境搭建

    1. 静态配置

    2. 动态配置

    3. 启动参数(不推荐)


    Redis 的集群历史

    Redis 有三种集群模式,分别是:主从模式、哨兵模式、Cluster 模式。

    Rdis 最开始使用主从模式做集群,若 master 宕机,需要手动配置 slave 转为 master

    为了高可用后来提出来哨兵模式,该模式下有一个哨兵集群监视 master 和 slave,若 master 宕机可自动将 slave 转为 master

    但哨兵模式有一个问题,就是内存有限,写性能上限为单点,不能扩容;所以 Redis 在 3.x 后,官方发布了 cluster 集群模式

    集群模式

    特性

    缺点

    代表产品

    主从模式

    通过主从模式可以提升读性能

    故障时需要手工切换,内存瓶颈

    主从

    哨兵模式

    仍然采用主从模式,增加了从自动转主功能

    故障主从可自动切换,但是写性能仍有限,内存瓶颈

    哨兵

    代理模式

    通过代理进行节点路由,达到水平扩展

    某些原生命令不支持,代理降低部分性能,

    某些不支持最新 Redis 功能

    Twemproxy、Codis

    集群模式

    数据分布式存储、节点水平扩容、故障自动转移

    需要轻量级客户端计算路由

    最新集群

    Redis 主从模式架构

    在主从复制中,Redis 数据库分为两种角色:主数据库(master)和从数据库(slave),从可以是多个

    1. 主数据库可以进行读写操作,当读写操作导致数据变化时会自 动将数据同步给从数据库

    2. 复制的数据流是单向的,只能由主节点复制到从节点。

    3. 从数据库一般都是只读的,并且接收主数据库同步过来的数据

    4. 一个 master 可以拥有多个 slave,但是一个 slave 只能对应一个 master

    5. slave 挂了不影响其他 slave 的读和 master 的读和写,重新启动后会将数据从 master 同步过来

    6. master 挂了以后,不影响 slave 的读,但 redis 不再提供写服务,master 恢复后 redis 将重新对外提供写服务

    7. master 挂了以后,不会在 slave 节点中重新选一个 master

    Redis主从复制原理

    redis < 2.8

    场景

    实现方式

    说明

    第一次启动

    sync 复制

    全量复制

    正常运行

    缓冲区复制

    增量复制

    第二次启动

    sync 复制

    全量复制,短暂的停启会对主造成较影响

    redis >= 2.8

    场景

    实现方式

    说明

    第一次启动

    psync 复制

    全量复制

    正常运行

    缓冲区复制

    增量复制

    第二次启动((Master 缓冲区未溢出)

    缓冲区复制

    部分复制,短暂的停启不会对主造成影响

    Redis>=2.8 第二次启动(Master

    psync 复制

    全量复制

    notice

    无是哪种场景,Redis 的主从复制机制均采用异步复制,也称为乐观复制,因此不能完全保证主从数据的一致性。

    SYNC 工作原理

    总体思路: 先RDB 再 类AOF 发送补充指令

    1. 当 slave 启动后或者断开重连后,会向 master 发送 sync 命令

    2. master 节点收到 sync 命令后会开始在后台保存快照(即 RDB 持久化,主从复制时会触发 RDB),并将保存快照期间接收到的命令缓存起来

    3. master 节点执行 RDB 持久化完后,向所有 slave 节点发送快照 RDB 文件,并在发送快照期间继续记录被执行的写命令

    4. slave 节点收到快照文件后丢弃所有旧数据(会清空所有数据),载入收到的快照

    5. master 节点快照发送完毕、slave 节点载入快照完毕后,master 节点开始向 slave 节点发送缓冲区中的写命令

    6. master 节点完成对快照的载入,开始接收命令请求,并执行来自主数据库缓冲区的写命令。(从数据库初始化完成)

    7. 后续 master 节点每执行一个写命令就会向 slave 节点发送相同的写命令,slave 节点接收并执行收到的写命令

    PSYNC 工作原理

    总体思路:判断是否是第一次同步,以及缓存区是否溢出,来决定是不是全量同步。

    1. 当 slave 启动后或者断开重连后,slave 根据自己是否保存 Master runid 来判断是否是第一次连接

    2. 如果是第一次同步则向 Master 发送 psync -1 命令来进行全量同步;如果是重连接,则发送 PSYNC runid offset 命令(runid 是身份 ID,offset

    是从节点同步命令的全局迁移量)

    3. Master 接收到 PSYNC 命令后,首先判断 runid 是否和本机的 id 一致,同时会判断 offset 偏移量有没有超过复制积压缓冲区大小,如果没有那

    么就给 Slave 发送 CONTINUE,此时 Slave 只需要等待 Master 传回失去连接期间丢失的命令。

    4. 如果 runid 和本机 id 不一致或者 offset 偏差超过了复制积压缓冲区大小,那么就会返回 FULLRESYNC runid offset,Slave 将 runid 保存起来,

    并进行全量同步

    5. 后续过程中,主数据库会将每一个写命令传递给从数据库的同时,都会将写命令存放到复制积压队列,并记录当前积压队列中存放命令的全局

    偏移量 offset。当 salve 重连接时,会从复制积压队列进行增量复制。

    Redis 主从模式环境搭建

    谁从谁配

    1. 静态配置

    在6380 的 redis.conf 中我们增加如下配置,代理 6380(从)追随 6379(主)

    replicaof 192.168.128.167 6379

    2. 动态配置

    分别启动 192.168.128.167:6379,192.168.128.167:6380,连接 6380 端口,输入如下命令

    replicaof 192.168.128.167 6379

    一般这种模式需要回写配置,通过 config rewrite 命令,将内存中的配置重写写入 redis.conf

    如果想断开,输入

    replicaof no one,然后再执行 config rewrite

    如果想切换新主节点

    slaveof 新 ip 新 port

    1. 断开与旧主节点主从关系。

    2. 与新主节点建立主从关系。

    3. 删除从节点当前所有数据。

    4. 对新主节点进行复制操作。

    3. 启动参数(不推荐)

    在 6380 进程启动时加入参数

    ./redis-server ../conf/redis_6380.conf --replicaof 192.168.128.167 6379

  • 相关阅读:
    GhatGPT AIGC 人工智能数据分析与可视化Python
    【PSDK】基于DOCKER的开发环境配置
    Elasticsearch:检索增强生成 (Retrieval Augmented Generation -RAG)
    [附源码]SSM计算机毕业设计足球队管理系统JAVA
    【论文阅读】基于卷积神经的端到端无监督变形图像配准
    【SSO单点登录】ticket+token+redis 实现sso单点登录 && 防重放、防盗用、防篡改
    谈谈数据决策平台搭建的必要性
    【每日一题】避免洪水泛滥
    MySQL运维10-Mycat分库分表之一致性哈希分片
    生产环境nsx-v升级为nsx-t的一些问题
  • 原文地址:https://blog.csdn.net/qq_32378713/article/details/126301218