• redis进阶:redis主从架构原理及搭建


    0.引言

    单节点redis可用性始终无法保障,用一句话来讲:说挂就挂。于是乎搭建高可用的redis服务的第一步,从节点诞生了,也就是redis的主从架构。

    1. 概念

    redis主从架构的原理是从节点(slave)从主节点(master)同步数据,主从节点保持数据的一致性。写操作只允许主节点执行,从节点专用于读操作,以此做到读写分离,查询效率的提升。

    同时redis的主从架构还是redis集群的基础,具体我们会在后续演示,所以redis主从架构是高可用的第一步。

    每个从节点只允许有一个主节点,一个主节点下可以有多个从节点。

    1.1 redis主从同步类型

    redis中主从同步分为全量同步和增量同步,从节点开启AOF就会进行全量同步,如果从节点宕机,再次启动时就会讲本机的数据清除,然后重新从主节点全量同步一遍。

    从节点如果只开启了RDB,是会记录主节点的主机ID的。我们可以在rdb文件中看到这个ID,这样如果中间宕机了,再重启时,从节点只会同步宕机期间的增量数据

    主从刚刚连接的时候,会进行全量同步;全量同步结束后,进行增量同步。如果增量同步失败,会再尝试全量同步

    1.2 redis主从同步过程

    在描述同步过程之前先要带大家理解一下思路,我们在传输数据时,因为数据本身还在不停的产生,所以我们肯定是从一个时间节点开始,传这个节点之前的所有数据,同时记录这个节点之后产生的增量数据,待全量数据传输完成后,再补上增量的数据,以此完成数据同步

    redis的思路也如此:

    1、从节点向主节点发送同步指令sync

    2、主节点收到sync指令后,执行bgsave,生成rdb文件,并在一个缓冲区中记录从现在开始执行的写命令

    3、主节点将生成的rdb发送给从节点,从节点收到后用它来同步数据历史的全量数据

    4、之后主节点再将缓冲区内的写命令发送给从节点,从节点收到这些指令并执行,增量的数据写入完成

    5、至此数据同步完成

    在这里插入图片描述

    2.搭建主从架构

    1、首先需要安装redis,如果不知道如何安装的可以参考我之前的博文。这里我演示使用的是redis6.2.7。这里我准备了两个节点,一主一从

    mac for m1(arm):安装redis的四种方式

    2、创建日志文件夹

    mkdir -p /var/local/redis/logs
    
    • 1

    3、修改主节点redis配置文件,redis配置文件默认在redis安装目录下,这里我已经复制到/etc/redis/6379.conf

    vim /etc/redis/6379.conf
    
    • 1

    修改内容:

    # 开启守护进程
    daemonize yes
    # 设置日志目录
    logfile /var/local/redis/logs/6379.log
    # 开启AOF持久化功能
    appendonly yes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注:vim指令中,/加关键字可搜索指定内容

    在这里插入图片描述

    4、启动主节点,这里我已经将redis_init_script脚本复制到/etc/init.d文件夹下并命令为redis了,所以可以直接使用server redis的形式启动。具体配置参照上述安装redis的文章

    service redis start
    
    • 1

    如果没有配置的,请使用redis-server /etc/redis/6379.conf命令启动

    5、修改从节点redis配置文件

    # 开启守护进程
    daemonize yes			
    # 指定日志		
    logfile /var/local/redis/logs/6379.log
    # 开启AOF持久化功能
    appendonly yes
    # 指定主节点
    replicaof 192.168.244.27 6379
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6、启动从节点

    7、查看主节点日志

    tail -n 100 -f /var/local/redis/logs/6379.log
    
    • 1

    在这里插入图片描述

    可以看到日志中已经显示了从节点的连接信息

    我们通过日志也可以佐证主从同步步骤:

    # 1. 从节点发起sync指令
    2060:M 31 Oct 2022 04:53:50.282 * Replica 192.168.244.28:6379 asks for synchronization
    2060:M 31 Oct 2022 04:53:50.282 * Full resync requested by replica 192.168.244.28:6379
    2060:M 31 Oct 2022 04:53:50.282 * Replication backlog created, my new replication IDs are '9f8bdcdd700a79fa84442284b3ad7e4fff9209ab' and '0000000000000000000000000000000000000000'
    # 2. 主节点执行BGSAVE指令
    2060:M 31 Oct 2022 04:53:50.282 * Starting BGSAVE for SYNC with target: disk
    2060:M 31 Oct 2022 04:53:50.282 * Background saving started by pid 2072
    # 数据保存到磁盘
    2072:C 31 Oct 2022 04:53:50.283 * DB saved on disk
    2072:C 31 Oct 2022 04:53:50.283 * RDB: 0 MB of memory used by copy-on-write
    2060:M 31 Oct 2022 04:53:50.327 * Background saving terminated with success
    # 同步成功
    2060:M 31 Oct 2022 04:53:50.327 * Synchronization with replica 192.168.244.28:6379 succeeded
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    测试

    1、我们连接主节点,并且写入一个key

    在这里插入图片描述

    2、再连接从节点,查看key

    在这里插入图片描述

    如此可证明主从数据同步成功

    3、我们尝试在从节点写入一个key

    在这里插入图片描述

    会发现报错了,这是因为从节点不允许写入数据

    总结

    至此,我们的主从架构就搭建完成了,实际上我们只需要一个replicaof 主节点IP 端口就能实现主从同步,非常简单。

    需要注意的是,实际操作过程中注意开启对应的redis端口或者关闭防火墙(生产环境不建议关闭)

    下期继续带大家实操redis哨兵模式

  • 相关阅读:
    LeaRun模型驱动开发框架 重塑企业生产力
    Java跨模块无法扫描到controller问题解决
    [附源码]计算机毕业设计springboot校园生活服务平台
    Linux 2.0总结
    高德 几千条数据,点标记Marker转海量标注 LabelMarker
    mac跑分工具Geekbench v6.2.1
    数论简单问题
    java计算机毕业设计H5新冠防疫宣传网站设计与实现源码+mysql数据库+系统+lw文档+部署
    python经典百题之分桃子
    QT学习笔记1-Hello, QT
  • 原文地址:https://blog.csdn.net/qq_24950043/article/details/127524421