• Redis(六) 主从模式


    一.主从复制

    1.1 什么是主从复制

    主从复制可以在一定程度上扩展redis性能,redis的主从复制和关系型数据库的主从复制类似,从机能够精确的复制主机上的内容。实现了主从复制之后,一方面能够实现数据的读写分离,降低master的压力,另一方面也能实现数据的备份。

    二. 主从复制第一种:主从模式

    1.2 如何配置

    1.2.1 弄三个Reis实例,地址如下

    1.12.235.192:6379
    1.12.235.192:6380
    1.12.235.192:6381

    配置方法

    首先进入Redis.conf

    在这里插入图片描述

    配置Redis.conf 第一点

    appendonly yes 改为appendonly no
    在这里插入图片描述

    配置Redis.conf 第二点

    logfile 改为logfile "6379.log"

    在这里插入图片描述
    在这里插入图片描述

    更名–生成第一个配置文件redis6379.conf

    在这里插入图片描述

    复制–生成第二个第三个配置文件

    在这里插入图片描述

    并且把他们配置里的端口号都改为对应的。
    全局更改代码::%s/6379/6380/g

    1.3 配置主从

    前置设置:我们把6379设置为主机,6381设置为从机。

    首先我们来设置6380从机

    在这里插入图片描述

    在这里插入图片描述

    再来配置我们的6381从机-配置同上

    1.4 启动

    1.4.1 启动主机

    在这里插入图片描述

    查看主从配置

    info replication
    在这里插入图片描述

    1.4.2 启动从机

    同上

    启动完成之后查看主从配置

    查看主机配置
    在这里插入图片描述

    查看从机配置
    在这里插入图片描述

    在这里插入图片描述

    1.5 测试主从结构

    主机写入数据
    在这里插入图片描述

    从机6380读取数据
    在这里插入图片描述

    从机6381读取数据
    在这里插入图片描述

    注意:

    1.主从配置之前写入了主机的数据,在配置完成之后也会自动同步到从机中
    2.逻辑上来说,写入数据的操作只能在6379主机上进行否则会报如下错误(进行配置之后可以,但是不推荐)
    在这里插入图片描述
    3.从2.6版本开始,默认从机是只能读取数据的
    在这里插入图片描述
    4.同步需要网络消耗,要过一段时间才有数据。

    1.6 降低主机压力的主从模式

    例如: 6380 配置成6379的从机
    6381配置成6380的从机

    注意只要一台机器是别人的从机,即使它有自己的从机,那么它也是从机
    在这里插入图片描述
    实际上,一主二仆的主从复制,我们可以搭建成下面这种结构:

    即我们所说的降低主机压力的主从模式
    在这里插入图片描述

    1.7 主从复制注意点

    1.如果主机已经运行了一段时间了,并且了已经存储了一些数据了,此时从机连上来,那么从机会将主机上所有的数据进行备份,而不是从连接的那个时间点开始备份。
    2.配置了主从复制之后,主机上可读可写,但是从机只能读取不能写入(可以通过修改redis.conf中 replica-read-only 的值让从机也可以执行写操作)。
    3.在整个主从结构运行过程中,如果主机不幸挂掉,重启之后,他依然是主机,主从复制操作也能够继续进行。

    1.8 复制原理

    每一个master都有一个replication ID,这是一个较大的伪随机字符串,标记了一个给定的数据集。每个master也持有一个偏移量,master将自己产生的复制流发送给slave时,发送多少个字节的数据,自身的偏移量就会增加多少,目的是当有新的操作修改自己的数据集时,它可以以此更新slave的状态。复制偏移量即使在没有一个slave连接到master时,也会自增,所以基本上每一对给定的Replication ID, offset都会标识一个master数据集的确切版本。当slave连接到master时,它们使用PSYNC命令来发送它们记录的旧的master replication ID和它们至今为止处理的偏移量。通过这种方式,master能够仅发送slave所需的增量部分。但是如果master的缓冲区中没有足够的命令积压缓冲记录,或者如果slave引用了不再知道的历史记录(replication ID),则会转而进行一个全量重同步:在这种情况下,slave会得到一个完整的数据集副本,从头开始(参考redis官网)。

    简单来说,就是以下几个步骤:

    1.slave启动成功连接到master后会发送一个sync命令。
    2.Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令。
    3.在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
    4.全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
    5.增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。
    6.但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。

  • 相关阅读:
    JWT(2):JWT入门使用
    docker network create
    Java注解与反射系列——利用反射进行数据自动填充(代替Mybatis-plus的自动填充)
    猿创征文 | 详解二叉树之遍历及其应用(动图遍历演示)
    【力扣 Hot100 | 第六天】4.21(最长连续序列)
    numpy详解
    德迅云安全数据库审计——如何保障企业数据库安全
    动手学深度学习(Pytorch版)代码实践 -深度学习基础-09过拟合与欠拟合
    C语言源代码系列-管理系统之实验设备管理系统
    Ant Design Pro删除国际化时错误的解决
  • 原文地址:https://blog.csdn.net/weixin_43189971/article/details/126196305