Redis主从复制—看完这篇你就懂了

2023-05-16

Redis主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
image.png

  1. 一个master可以有多个slave
  2. 一个slave只能有一个master
  3. 数据流向是单向的,master到slave

主从复制的作用

单机存在的问题

  • 机器故障
  • 容量瓶颈
  • QPS瓶颈

单机如果硬件发生故障,redis发生宕机且无法重启,那么会造成巨大的问题。
计算机的内存是有效的,不断扩大内存的方式显然是不现实的。
单机的情况下,在高读写情况下,读的性能会收到限制。为了高可用,可以做读写分离。

总结

  1. 作为数据副本
  2. 扩展读性能

主从复制的配置

由于资源限制,演示使用单机多部署的方式。

演示的准备工作

  1. 在redis安装目录,新建data文件夹,以及config文件夹
    image.png
  2. 复制redis.conf到config文件夹。cp redis.conf config/redis-6379.conf, cp redis.conf config/redis-6380.conf
    image.png
  3. 以配置文件的方式启动redis。redis-server redis-6379.conf,redis-server redis-6380.conf,并修改端口号保存
  4. 打开redis客户端。redis-cli -p 6379,redis-cli -p 6380
  5. 我们默认6379为主机。6380为从机。

slaveof命令

# 在6380的客户端
slaveof 127.0.0.1 6379

使用info replication命令查看主从关系

image.png
image.png

配置conf文件

redis.conf中关于主从复制的部分配置:

 # replicaof <masterip> <masterport> 配置主节点的ip以及端口号
 # masterauth <master-password> 填写主节点的密码
 replica-read-only yes 默认从节点为只读

我们可以修改redis-6380.conf文件,并重新启动redis。效果如上图不做展示。
当对从节点进行写操作时:
image.png

如何结束主从关系

我们可以通过slaveof no one来解除主从关系,此时从机将变为默认(master)。
image.png

复制内部做了什么事

在解释复制原理之前,我们需要了解一下几个概念:

  1. psync
  2. runid
  3. offset复制偏移量
  4. 复制积压缓冲区(repl_back_buffer)

详细解析可查看博客:psync原理

psync

Redis在2.8版本提供了PSYNC命令来带代替SYNC命令,为Redis主从复制提供了部分复制的能力。

 PSYNC <runid> <offset>
 runid:主服务器ID
 offset:从服务器最后接收命令的偏移量

runid

每个Redis服务器都会有一个表明自己身份的ID。在PSYNC中发送的这个ID是指之前连接的Master的ID,如果没保存这个ID,PSYNC的命令会使用”PSYNC ? -1” 这种形式发送给Master,表示需要全量复制。

offset复制偏移量

在主从复制的Master和Slave双方都会各自维持一个offset。Master成功发送N个字节的命令后会将Master的offset加上N,Slave在接收到N个字节命令后同样会将Slave的offset增加N。Master和Slave如果状态是一致的那么它的的offset也应该是一致的。

复制积压缓冲区(repl_back_buffer)

复制缓冲区,又名复制积压缓冲区,是一个先进先出(FIFO)的队列,用于存储服务器执行过的命令,每次传播命令,master都会将传播的命令记录下来,并存储在复制缓冲区

全量复制以及部分复制

大家先看完大佬分享的psync的原理,再看下面的解析会更透彻一点。

全量复制

image.png

  1. 当从服务器与主服务器第一次连接,从节点会根据是否保存有主节点runid来判断是否第一次复制。
  2. 查无runid,此时向主节点发生psync?-1
  3. master收到命令,并返回一个全量复制的命令,并带上自己的runid以及偏移量。
  4. slave会保存master发送的信息
  5. master调用bgsave生成RDB文件,并把届时收到的写请求写入到复制积压缓冲区
  6. 快照生成完毕后,master会将RDB以及buffer发送到slave。
  7. slave接收到数据后,会清除缓存flush all,加载RDB文件以及buffer。

全量复制是一个开销较大的操作

  1. bgsave的时间
  2. RDB网络传输时间
  3. 从节点数据清除时间
  4. 从节点加载RDB时间
  5. 可能的AOF重写时间(保持数据最新的状态,如果开启AOF的话)

部分复制

部分复制一般发生在:

  • 从服务器断线后重新和之前连接的主服务器恢复连接,即断线后重复制
  • 网络抖动,数据不同步

image.png

  1. slave于master断开连接后,master接收到的命令依然会写入到复制积压缓冲区
  2. slave重连后,向master发送psync offset runid,带上偏移量以及runid。
  3. master先对runid进行对比,判断是否和本节点的runid一致。
  4. 然后master会对偏移量进行一个对比,如果偏移量在缓冲区的区间(缓冲区是一个FIFO的队列)内,master向slave发送CONTINUE,此时Slave只需要等待master传回失去连接期间丢失的命令。

如果runid不一致或者偏移量差距过大。
master会返回FULLRESYNC runid offset,进行一个全量复制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis主从复制—看完这篇你就懂了 的相关文章

随机推荐

  • Python练习:天天向上的力量III

    练习 xff1a 天天向上的力量III 平台 xff1a Python123 io 教师 xff1a 嵩天 描述 一年365天 xff0c 以第1天的能力值为基数 xff0c 记为1 0 当好好学习时 xff0c 能力值相比前一天提高N x
  • Python练习:求100以内的素数和

    练习 xff1a 求100以内的素数和 平台 xff1a Python123 io 教师 xff1a 嵩天 求100以内的素数和 描述 求100以内的素数之和并输出 def sushu n for i in range 2 n if n i
  • Python练习:四叶玫瑰数

    练习 xff1a 四叶玫瑰数 平台 xff1a Python123 io 教师 xff1a 嵩天 描述 四叶玫瑰数是4位数的自幂数 自幂数是指一个 n 位数 xff0c 它的每个位上的数字的 n 次幂之和等于它本身 xff08 例如 xff
  • 使用云服务器搭建Hexo个人博客

    彻底搞懂如何使用Hexo 43 GitHubPages搭建个人博客 讲解了如何使用Hexo 43 GitHubPages来搭建一款属于自己的个人博客 使用了一段时间后 xff0c 发现访问速度偏慢 xff0c 而且自己也在前段时间腾讯云做活
  • Python追赶法解方程组

    A 61 定义一个列表存储系数矩阵 L 61 U 61 Y 61 a 61 1 b 61 4 c 61 1 S 61 a S T 61 T R 61 R Answer X 61 N 61 5 X 61 39 x1 39 39 x2 39 3
  • 手把手教你安装Spring+搭建Spring开发环境

    为了让新手安装Spring时少走弯路 xff0c 小编写下详细步骤 xff08 以win8 xff0c 64位为例 xff09 请系好安全带 xff0c 坐好扶稳 一 xff1a 安装eclipse 如果已经安装请忽略此步 官网下载地址 x
  • 在Ubuntu上如果权限不够时,并且使用sudo还是权限不够,获得root权限

    如果用户具有sudo权限 xff0c 那么直接可以运行如下命令 xff1a sudo su root 输入当前用户的密码 passwd 输入密码 再次输入密码 退出root权限 按下ctrl 43 D
  • yum 安装libpcap

    针对于centos系统安装libpcap库命令 xff1a yum install libpcap yum install libpcap devel
  • 计算机网络自考2020,2020年8月自考02141计算机网络技术真题及答案

    以下是湖南自考生网为考生们整理的 2020年8月自考02141计算机网络技术真题及答案 xff0c 考生可通过自考历年真题练习更有把握的面对考试 xff0c 对题型更加熟悉 xff0c 从而取得更佳的成绩 供考生参考 2020年8月高等教育
  • DLL丢失一键修复

    DLL丢失一键修复 今天不小心删了DLL相关的库 xff0c 费了好久才搞好 xff0c 记录一下 原因 xff1a 删除了win10中的这些库 解决办法 xff1a 使用一键修复工具 DLL丢失一键修复工具 xff1a 获取工具
  • springmvc的配置文件详解

    springmvc xml需要配置的东西 配置controller扫描包 使用组件扫描器省去在spring容器配置每个Controller类的繁琐 使用context component scan自动扫描标记 64 Controller的控
  • Bug随手记----关于java.lang.IllegalStateException: The following classes could not be excluded because the

    Consider the following If you want an embedded database H2 HSQL or Derby please put it on the classpath If you have data
  • linux:Systemd使用(systemctl)

    系统服务管理工具systemd是为了便于linux用户操作系统服务的管理 xff0c systemd提供了systemctl命令工具进行systemd的各项操作 Systemd的版本 systemd version systemd和syst
  • C++面试宝典:进程间通讯方式概述

    1 管道 我们来看一条 Linux 的语句 netstat tulnp grep 8080 学过 Linux 命名的估计都懂这条语句的含义 xff0c 其中 是管道的意思 xff0c 它的作用就是把前一条命令的输出作为后一条命令的输入 在这
  • ubuntu16.04LTS更换阿里源

    sudo gedit etc apt sources list 替换 xff1a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 deb cdrom Ubuntu 16 04 LTS Xenial
  • a++多线程下出现消失的请求现象

    a 43 43 多线程下出现消失的请求现象 a 43 43 多线程下出现消失的请求现象是一个常见的多线程运行结果错误的例子 我们先来看一下a 43 43 代码执行图 xff1a 按照我们想让它执行的顺序执行 xff0c 结果应该是3 但在多
  • 2013年十佳优秀主席将获得传智播客.NET学院培训名额

    2013年CSDN高校俱乐部十佳优秀主席将会免费获得价值9580元的传智播客 NET学院免费培训名额 培训时间为2015年之前有效 优秀主席评选截止日期为10月底 截止日期之前请提交你的评选内容 评选内容是俱乐部介绍 自我介绍和俱乐部活动介
  • MySQL各数据类型的特点

    MySQL各数据类型的特点 常用的整数类型 常见误区 int n 是设置数据最大的显示宽度 xff0c 所占的存储空间不会改变 常用的浮点类型 123456789 987654321 61 decimal 18 9 占用9个字节 涉及财务等
  • Redis持久化——RDB、AOF

    Redis持久化 RDB AOF 什么是持久化 redis所有数据都保存在内存中 xff0c 对数据的更新异步保存到磁盘上 在Redis中持久化的方式有两种 xff0c 一种是快照持久化 xff0c 一种是AOF持久化 xff0c 各有各的
  • Redis主从复制—看完这篇你就懂了

    Redis主从复制 主从复制 xff0c 是指将一台Redis服务器的数据 xff0c 复制到其他的Redis服务器 前者称为主节点 master leader xff0c 后者称为从节点 slave follower xff1b 数据的复