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.rhkb.cn/news/215170.html

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

相关文章

Go json 差异比较 json-diff(RFC6902)

Go json 差异比较 json-diff(RFC 6902) 毕业设计中过程中为了比较矢量图的差异而依据 RFC 6902 编写的一个包,现已开源: Json-diff 使用 go get -u github.com/520MianXiangDuiXiang520/json-diff序列化与反序列化 与官方 json 包的序列化和反序列化不…

NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserv

问题 在IDEA运行HBASE脚本时出现如下报错: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 i…

深入学习锁--Lock各种使用方法

一、什么是Lock Lock是一个接口,通常所说的可重入锁是指Lock的一个实现子类ReentrantLock 二、Lock实现步骤: ①创建锁对象Lock lock new ReentrantLock(); ②加锁lock.lock(); ③释放锁lock.unlock(); import java.util.concurrent.locks.Lock; import java.util…

我有才打造专属个人或企业知识付费平台,核心功能设计

在当今信息爆炸的时代,知识管理已经成为了每个人必须面对的问题。然而,市面上的知识付费平台大多数都是通用的,无法满足个性化需求。 因此,我有才提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下: 一…

AGM离线下载器使用说明

AGM专用离线下载器示意图: 供电方式: 通过 USB 接口给下载器供电,跳线 JP 断开。如果客户 PCB 的 JTAG 口不能提供 3.3V 电源,或仅需烧写下载器,尚未连接用户 PCB 时,采用此种方式供电。 或者&#xff1a…

入职字节外包一个月,我离职了。。。

有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…

PET(Point-Query Quadtree for Crowd Counting, Localization, and More)

PET(Point-Query Quadtree for Crowd Counting, Localization, and More) 介绍实验记录训练阶段推断阶段 介绍 论文:Point-Query Quadtree for Crowd Counting, Localization, and More 实验记录 训练阶段 TODO 推断阶段 下面是以一张输…

软件运行原理 - 内存模型 - 栈内存

说明 C/C软件运行时,内存根据使用方式的不同分为堆内存和栈内存,栈内存使用有以下特征: 栈内存使用(申请、释放)由系统自动分配和释放,程序员不用做任何操作。栈内存重复使用,进入函数时数据入…

Vue学习计划-Vue2--VueCLi(二)vuecli脚手架创建的项目内部主要文件分析

1. 文件分析 1. 补充: 什么叫单文件组件? 一个文件中只有一个组件 vue-cli创建的项目中,.vue的文件都是单文件组件,例如App.vue 2. 进入分析 1. package.json: 项目依赖配置文件: 如图,我们说主要的属性…

STM32F407-14.1.0-01高级定时器简介

TIM1 和 TIM8 简介 高级控制定时器(TIM1 和 TIM8)包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。 此类定时器可用于各种用途,包括测量输入信号的脉冲宽度(输入捕获),或者生成输出…

xtts和ogg不选择?

不选择ogg的理由: 1.需要在源端创建用户赋权,启用数据库最小日志,附加日志等操作--对生产影响较大 2.外键约束过多,割接启用可能很慢https://www.modb.pro/db/201126--割接停机时间影响 3.初始化配置expdp导出可能快照过旧&#x…

18.Java程序设计-基于Springboot的电影院售票系统的设计与实现

摘要 电影产业在当今社会中占据着重要地位,电影院作为观影的主要场所,其售票系统的高效性和用户体验至关重要。本文基于Spring Boot框架设计并实现了一款电影院售票系统,旨在提高售票效率、优化用户体验,并解决传统售票方式存在的…

Java王者荣耀火柴人

主要功能 键盘W,A,S,D键:控制玩家上下左右移动。按钮一:控制英雄发射一个矩形攻击红方小兵。按钮控制英雄发射魅惑技能,伤害小兵并让小兵停止移动。技能三:攻击多个敌人并让小兵停止移动。普攻:对小兵造成基础伤害。小…

JS实现返利网注册系统(网页数据验证)

主代码 <!DOCTYPE HTMLPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"><head><title>返利网注册</tit…

TeeChart.NET 2023.11.17 Crack

.NET 的 TeeChart 图表控件提供了一个出色的通用组件套件&#xff0c;可满足无数的图表需求&#xff0c;也针对重要的垂直领域&#xff0c;例如金融、科学和统计领域。 数据可视化 数十种完全可定制的交互式图表类型、地图和仪表指示器&#xff0c;以及完整的功能集&#xff0c…

基于SSM的健身房预约系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

webSRc实现浏览器播放rtsp【海康】

先上代码 <template><div>video的配置自己写<video id"video" autoplay width"900" height"900"></video></div> </template><script> export default {name: index1,data() {return {webRtcServer: …

【开源】基于JAVA的木马文件检测系统

项目编号&#xff1a; S 041 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S041&#xff0c;文末获取源码。} 项目编号&#xff1a;S041&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 木马分类模块2.3 木…

智能优化算法应用:基于灰狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于灰狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于灰狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.灰狼算法4.实验参数设定5.算法结果6.参考文献7.MA…