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教程,阳哥亲自带练

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024美赛备战2--模型建立(*****必看****)

建模 美赛涉及的建模知识范围非常广且深,纵观美赛真题不难发现,很多的模型 都是读研或者读博的时候才会真正深入开始研究,因此,对于做建模的同学来说, 是无法在赛前吃透大量模型的。推荐本科生分两个步骤去有效准备比赛…

设计模式——建造者模式(创建型)

引言 生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 问题 假设有这样一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。 这些初始化代码…

探索Scrapy-spider:构建高效网络爬虫

Spider简介 Scrapy中的Spider是用于定义和执行数据抓取逻辑的核心组件。Spider负责从指定的网站抓取数据,并定义了如何跟踪链接、解析内容以及提取数据的规则。它允许您定制化地指定要抓取的网站、页面和所需的信息。Spider的作用是按照预定的规则爬取网页&#xf…

关于个人职业选择

职业选择,一直是个老生常谈的话题。这并不是一个容易做的决定。 让我们来看看AI怎么说。 首先是方向性的回答: 然后是一些具体的回答 我个人比较倾向于深耕网络安全。这是一个很有趣也是一个持续发展着的领域。 不知道关于这个事情你怎么看&#xff0…

【C++】POCO学习总结(十二):流(文本编解码、数据压缩、文件读写流等)

【C】郭老二博文之:C目录 1、说明 POCO提供了多种流类,与标准c IOStreams兼容。 大多数POCO流类被实现为过滤器,这意味着它们不写入或读取设备,而是从它们连接的另一个流。 2、文本编解码 2.1 说明 POCO提供了用于编码和解码…

【每日一题】最小体力消耗路径

文章目录 Tag题目来源解题思路方法一:二分枚举答案 写在最后 Tag 【二分枚举答案】【图】【2023-12-11】 题目来源 1631. 最小体力消耗路径 解题思路 拿到这个题目,计算从左上角到右下角的最小体力消耗值,有点像 64. 最小路径和。在 64 题…

散点图直方图折线图的替代

散点图直方图折线图的替代 seaborn官网 数据科学数据可视化,散点图 直方图 折线图的新方法 1.hexbinplot https://seaborn.pydata.org/examples/hexbin marginals.html相当于散点图做了聚合/分箱,使数据的分布展示更明显。Library: seaborn 2.瀑布图展示…

Linux 驱动开发需要掌握哪些编程语言和技术?

Linux 驱动开发需要掌握哪些编程语言和技术? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「Linux从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家&#xf…

图论专栏一《图的基础知识》

图论(Graph Theory)是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些实体之间的某种特定关系,用点代表实体,用连接两点的线表示两个实体间具有的…

OpenVINS学习2——VIRAL数据集eee01.bag运行

前言 周末休息了两天,接着做上周五那个VIRAL数据集没有运行成功的工作。现在的最新OpenVINS需要重新写配置文件,不像之前那样都写在launch里,因此需要根据数据集情况配置好estimator_config.yaml还有两个标定参数文件。 VIRAL数据集 VIRAL…

从零开始实现神经网络(三)_RNN循环神经网络

参考文章:rnn循环神经网络介绍 循环神经网络 (RNN) 是一种专门处理序列的神经网络。它们通常用于自然语言处理 (NLP) 任务,因为它们在处理文本方面很有效。在这篇文章中,我们将探讨什么是 RNN&a…

【简易版】Linux下Protobuf 实现网络版通讯录--C++

一、介绍 该项目的主要目的是用于熟悉protobuf的使用,体验数据在网络中序列化反序列化的形式,并非一个完整的项目。 该通讯录只实现了增加联系人的功能。服务器端接收到请求后会将联系人的信息打印。 二、环境搭建 使用Httplib库,可以快速…

【ClickHouse】ClickHouse与MySQL之间实时同步数据(MySQL引擎),将MySQL数据实时同步到clickhouse

参考1:MySQL(通过该配置实现了实时同步) 参考2:experimental MaterializedMySQL 参考3:[experimental] MaterializedMySQL(包含设置 allow_experimental_database_materialized_mysql) MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行I…

亚信科技AntDB携手蓝凌软件,助推企业数字化办公转型升级

随着企业数字化转型的深入,企业对于协同办公、移动门户、数字运营、智能客服等方面的需求越来越高,数智化正成为催生新动能和新优势的关键力量。数字化的办公平台可以帮助企业实现各类信息、流程的集中化、数字化和智能化管理,为企业管理者提…

2-7、转义字符

语雀原文链接 文章目录 1、转义字符2、\r\n的遗留问题3、System 1、转义字符 \r 回车,将光标定位在当前行的开头,不会跳到下一行。return\n 换行符,将光标定位在下一行的开头。newline 2、\r\n的遗留问题 我们在平时使用电脑时&#xff0c…

Mybatis是如何进行分页的?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

WRF--修改geo_em.d01.nc中的变量,保持其他信息不变

WRF–修改geo_em.d01.nc中的变量,保持其他信息不变 首先呢,找到编译WRF过程中自带的读取nc的一个fortran函数:read_wrf_nc.f90 可以使用Linux命令: find / -name read_wrf_nc.f90 找到之后,修改这个文件&#xff0c…

镜头驱动芯片选型 GC6236,GC6208,GC6209的型号分析,多应用于摄像机镜头,家庭监控云台驱动等产品中

国产芯片GC6236,GC6208,GC6209 为5V摄像机镜头驱动芯片,电压范围在3~5.5(V),最大持续电流可达0.8(A)最高工作温度在-40~100之间。其特点都具有5V多通道,低噪步进电机驱动和霍尔自动光圈驱动等。可应用在摄像机镜头,家庭…

【SpringBoot教程】SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder)

作者简介:大家好,我是撸代码的羊驼,前阿里巴巴架构师,现某互联网公司CTO 联系v:sulny_ann(17362204968),加我进群,大家一起学习,一起进步,一起对抗…