Redis基础系列-主从复制

Redis基础系列-主从复制

文章目录

  • Redis基础系列-主从复制
    • 1. 什么是 Redis 主从复制?
    • 2. 主从复制有什么好处?
    • 3. 如何配置 Redis 主从复制?
    • 4. 主从复制的验证
      • 4.1 如何查看主从搭建成功
      • 4.2 主从常见疑问
      • 4.3 主从常见命令
    • 5. 主从复制的原理和工作流程
    • 6. 特殊的主从复制(薪火相传)
    • 7. 总结
    • 8. 参考和感谢

1. 什么是 Redis 主从复制?

Redis 主从复制是一种数据复制机制,通过该机制,我们可以将 Redis 数据库的数据从一个主 Redis 实例复制到多个从 Redis 实例,从而实现数据的备份和读写分离。主 Redis 实例负责写入操作,而从 Redis 实例则负责读取操作,从而提供更好的性能和可扩展性。
下面是经典的主从架构(一主二仆)

2. 主从复制有什么好处?

  1. 读写分离
  2. 容灾恢复
  3. 数据备份
  4. 水平扩容支撑高并发

3. 如何配置 Redis 主从复制?

  1. 配置主 Redis 实例(示例:redis6379.conf)
# 1. 开启后台模式
daemonize yes
# 2.注释掉回环地址限制
#bind 127.0.0.1@
# 3.关闭保护模式
protected-mode no
# 4.指定端口
port 6379
# 5.指定当前工作目录(配置文件和快照文件路径)
dir /myredis
# 6.pid进程文件名字
pidfile /var/run/redis_6379.pid
# 7.log文件名字
logfile "/myredis/6379.log"
# 8.redis密码
requirepass 123456
# 9.快照文件路径
dbfilename dump6379.rdb
  1. 配置第一个从 Redis 实例(示例:redis6380.conf)

按照上述redis6379.conf进行配置,需要调整以下配置

# 4.指定端口
port 6380
# 6.pid进程文件名字
pidfile /var/run/redis_6380.pid
# 7.log文件名字
logfile "/myredis/6380.log"

新增加以下配置(这才是主从复制的关键配置)

# 1.设置主 Redis 实例的信息
replicaof 192.168.10.110 6379
# 2.设置主 Redis 认证信息
masterauth "123456"
  1. 配置第二个从 Redis 实例(示例:redis6381.conf)

按照上述redis6379.conf进行配置,需要调整以下配置

# 4.指定端口
port 6381
# 6.pid进程文件名字
pidfile /var/run/redis_6381.pid
# 7.log文件名字
logfile "/myredis/6381.log"

新增加以下配置(这才是主从复制的关键配置)

# 1.设置主 Redis 实例的信息
replicaof 192.168.10.110 6379
# 2.设置主 Redis 认证信息
masterauth "123456"

从上述配置来看,我们可以清晰的了解到,主从配置的关键信息配置在slave上

4. 主从复制的验证

按照上述步骤配置配置好主从rdis,要求三台服务器两两能互相访问先启动主机,然后启动两台从机

4.1 如何查看主从搭建成功

  • 使用命令查看
info replication

主机

从机1

从机2

  • 日志查看

主机日志

从机1日志

从机2日志

4.2 主从常见疑问

  1. 从机可以执行写命令吗?

    严格的读写分离,主机负责写数据(也可以读数据),从机负责读数据

  2. 从机切入点问题

    从机首次启动,主机的数据覆盖掉从机的数据,后续主机写,从机跟着同步写入

  3. 主机shutdown后,从机会上位吗?

    从机不动,原地待命,从机数据可以正常使用;等待主机重启

  4. 主机shutdown后,重启后主从关系还在吗?从机还能否顺利复制?

    存在,能顺利复制(青山依旧在)

  5. 某台从机down后,master继续,从机重启后它能跟上大部队吗?

    可以

4.3 主从常见命令

可以查看复制节点的主从关系和配置信息

info replication

从机在运行的状况下,通过命令设置主机(改换门庭)

slaveof 主机ip 主机port

从机在运行的状况下,通过命令断掉与主机的关系(自立为王)

slaveof no one

5. 主从复制的原理和工作流程

  1. slave启动,同步初请(发送同步的初始化请求)

slave启动成功连接到master后会发送一个sync命令
slave首次全新连接master,一次完全同步 (全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除

  1. 首次连接,全量复制

master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集的命令缓存起来,master节点执行RDB持久化完后,master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步
而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化

  1. 心跳持续,保持通信
# 10s发送一次心跳
repl-ping-replica-period 10
  1. 进入平稳,增量复制

Master继续将新的所有收集到的修改命令自动依次传给slave,完成同步

  1. 从机下线,重连续传

master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId,offset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传

在 Redis 主从复制中,backlog(复制积压缓冲区)是一个用于存储主节点未能及时传递给从节点的写命令的缓冲区。当主节点生成 RDB 快照或 AOF 日志文件时,或者主从节点之间的网络连接出现故障时,主节点上新接收到的写命令将会存储在 backlog 中,等待后续的传输。backlog 的作用是确保在主节点和从节点之间的复制过程中数据的准确性和一致性。当连接恢复时,从节点会获取 backlog 中的命令,执行它们以补充在复制过程中可能丢失的数据。backlog 的大小是通过 `repl-backlog-size` 参数来配置的,默认情况下是 1MB。如果 backlog 中缓存的命令数量超过了配置的大小,最早的命令将被丢弃。值得注意的是,backlog 只用于短暂的数据流失或网络中断情况下的数据恢复,而不是用于持久化的数据备份。因此,当出现较长时间的故障或大量数据丢失时,可能需要使用其他策略或手段进行数据恢复和同步。

6. 特殊的主从复制(薪火相传)

  • 上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master.可以有效减轻主master的写压力
  • 中途变更转向:会清除之前的数据,重新建立拷贝最新的

7. 总结

主从复制虽然可以实现读写分离,很大程度上提高redis的使用性能,但是它的缺点也是显而易见的:

  1. 由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

  1. master宕机了,从机不会竞选master,此时只能读,不能写

8. 参考和感谢

尚硅谷Redis零基础到进阶,最强redis7教程,阳哥亲自带练

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/214749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握1688官方API接口:开启智能商务合作新篇章

当涉及到与1688官方合作的API接口时,以下是一些建议和指导,以帮助您开始编写相关的代码。 了解API接口文档: 在编写与1688官方合作的API接口之前,首先需要了解1688官方提供的API接口文档。您可以在1688开放平台上找到相关的文档…

12.11 作业

1, 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码…

王道数据结构课后代码题p150 第13——17 (c语言代码实现)

目录 13.p 和 q 分别为指向该二叉树中任意两个结点的指针,试编写算法 ANCESTOR(ROOT,P,q,r),找到P和q的最近公共祖先结点 r 14.假设二叉树采用二叉链表存储结构,设计一个算法,求非空二叉树 b的宽度(即具有结点数最多的那一层的结点…

Draw.io绘图操作

使用步骤 以下是使用 draw.io(现在的 diagrams.net)的一些基本操作步骤: 访问网站: 打开浏览器,访问 https://app.diagrams.net/。 创建新文档: 在 diagrams.net 主页,点击 “New Diagram” 或…

2023最新vue安装(npm,yarn,国内镜像,vue安装,vue导包)全套教程2023年12月最新

第一步(安装npm) 官网地址:https://nodejs.org/en/download windows安装yarn 详细教程_windows yarn-CSDN博客 第二步(yarn下载) windows 下需要下载msi文件 ,下载地址:https://yarnpkg.com/latest.msi npm install -g…

力扣198. 打家劫舍

动态规划 思路: 寻找状态转移方程: 假设有 n 个房间; 如果偷第 n 个房间,那么第 n - 1 个房间不偷,之前的 n - 2 个房间偷窃到了 M(n - 2),总共可以偷窃到 M(n - 2) N(n);如果不偷第 n 个房间…

第11节: Vue3 动态参数

在UniApp中使用Vue3框架使用动态参数&#xff1a; <template> <view> <text>{{ dynamicText }}</text> <button click"changeText">点击改变文本</button> </view> </template> <script> export de…

SD-WAN解决企业国际互联组网需求

随着云计算、移动应用和企业全球化的浪潮&#xff0c;实时应用在不同地点之间的传输需求不断增加&#xff0c;涵盖异地办公、视频会议、远程桌面、支付交易系统以及远程医疗等。这些应用的顺畅传输对于企业至关重要&#xff0c;而SD-WAN&#xff08;软件定义广域网&#xff09;…

Spring MVC详解、静态资源访问、拦截器

1. Spring MVC概述 1.1 Spring MVC是什么 SpringMVC是Spring的一个模块&#xff0c;是一个基于MVC设计模式的web框架。 1.2 Spring MVC执行流程。 1.3 组件分析 前端控制器&#xff08;默认配置&#xff09;Dispatcher Servlet 作用&#xff1a;只负责分发请求。可以很好的对…

这样的软件测试面试题,谁面试遇到谁淘汰!!!

88 11.6 自动化测试用例的来源 手工编写测试用例 把原来手工的测试用例&#xff0c;当成自动化测试用例 11.7 自动化测试的优点与缺点 优点: 1、对程序的回归测试更方便 2、可以运行更多更繁琐的测试 3、提高测试效率和准确性&#xff0c;节约时间成本 4、可以执行一些手工测试…

【源码解析】从ReentrantLock角度聊聊AQS原理

AQS结构 //头节点 当前持有锁的线程private transient volatile Node head;/*** Tail of the wait queue, lazily initialized. Modified only via* method enq to add new wait node.*///每个进来的线程都插入到最后private transient volatile Node tail;/*** The synchroni…

MLIR笔记(6)

5. 方言与操作 5.1. 方言的概念 在MLIR里&#xff0c;通过Dialect类来抽象方言。具体的每种方言都需要从这个基类派生一个类型&#xff0c;并实现重载自己所需的虚函数。 MLIR文档里这样描述方言&#xff08; MLIR Language Reference - MLIR&#xff09;&#xff1a; 方言…

手把手教你玩转ESP8266(原理+驱动)

在嵌入式开发中&#xff0c;无线通信的方式有很多&#xff0c;其中 WIFI 是绕不开的话题。说到 WIFI 通信&#xff0c;就不得不提 ESP8266了。 ESP8266 是一款高性能的 WIFI 串口模块&#xff0c;实现透明传输。只要有一定的串口知识&#xff0c;不需要知道 WIFI 原理就可以上…

作为一个产品经理带你了解Axure的安装和基本使用

1.Axure的简介 Axure是一种强大的原型设计工具&#xff0c;它允许用户创建交互式的、高保真度的原型&#xff0c;以及进行用户体验设计和界面设计。Axure可以帮助设计师和产品经理快速创建和共享原型&#xff0c;以便团队成员之间进行沟通和反馈。Axure提供了丰富的交互组件和功…

Spring--10--Spring Bean的生命周期

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.Spring Bean1.1 什么是 Bean简而言之&#xff0c;bean 是由 Spring IoC 容器实例化、组装和管理的对象。 1.2 Spring框架管理Bean对象的优势 2.Bean的生命周期实例…

西工大网络空间安全学院计算机系统基础实验二(phase_2下——漫漫深夜过后的黎明!!!)

内存地址内存地址中的数注释指向这块内存的寄存器0xffffd0e8函数phase_2的栈帧0xffffd0e40xffffd0f4函数phase_2的栈帧0xffffd0e00x5655b7b0函数phase_2的栈帧0xffffd0dc0x565566ca函数read_six_numbers的返回地址&#xff0c;函数phase_2的栈帧0xffffd0d80x5655af64旧%ebx的值…

SpringIOC之ConditionEvaluator

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

Netty性能好的原因是什么

Netty性能好的原因 废话篇Netty性能好的原因是什么1. 非阻塞IO模型高效的Reactor线程模型零拷贝内存池设计无锁串行化设计高性能序列化协议 废话篇 相信有同学会经常被问到这样的问题&#xff0c;不妨下次被面试官问到这种问题&#xff0c;我们可以这样回答&#xff01; Nett…

简单实用的firewalld命令

简单实用的firewalld命令 一、查看防火墙是否打开二、查询、开放、关闭端口三、查看已监听端口四、验证 一、查看防火墙是否打开 systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.…

map.getOrDefault

map.getOrDefault 是 Java 中的一个方法&#xff0c;用于从 Map 中获取指定键的值&#xff0c;如果键不存在&#xff0c;则返回指定的默认值。 方法签名如下&#xff1a; V getOrDefault(Object key, V defaultValue) 其中&#xff0c;key 是要获取值的键&#xff0c;defaul…