“深入探讨Redis主从复制:原理、配置与优化“

目录

# 概念

1. 配置主从同步步骤

1.1 创建文件夹

1.2 复制配置文件

1.3 配置文件关闭

1.4 查看端口号,发现端口号存在

1.5 连接三个端口号

1.6 查看主机运行情况

1.7 让服务器变成(主机)或(从机)

1.8 实现效果

2. 主从复制(一主二仆)的特点

2.1 从服务器挂掉重启后并没有变成从机而是成为了主机

2.2 主从复制原理

2.3 薪火相传和反客为主

3. 哨兵模式(sentinel)

3.1 创建哨兵文件

3.2 配置哨兵

3.3 启动哨兵

4. 主从复制概念流程

4.1 主从复制的基本概念

4.2 主从复制的工作流程

4.3 主从复制的示例配置

4.4 参考示意图

5. 主从复制的优缺点

6. 主从复制的应用场景


# 概念

  • 概念

    主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主;

    实现:读写分离;性能扩展;容灾快速恢复;

  1. 主从复制:主机挂掉,从机不上位
    • 这种情况通常说明缺少故障转移机制。仅靠 Redis 主从复制,不会自动进行主从切换。在没有哨兵或其他协调机制的情况下如果主机(主节点)挂掉,从机(从节点)不会自动升级为主节点
  2. 从机挂掉重启后的行为
    • 如果 Redis 的从节点挂掉并重启,它会尝试重新连接到当前的主节点。如果主节点仍然是原来的主节点从节点会继续作为从节点。如果原主节点已挂掉且有故障转移机制(如 Redis Sentinel)新的主节点会替代旧主节点从节点重启时会连接到新的主节点并同步数据
    • 从节点(Slave)在挂掉后重启,不会自动变成主节点(Master)。它会继续作为从节点存在,并尝试重新连接并同步主节点的数据。这个行为在 Redis 主从复制和哨兵模式下均为默认行为。
  3. 哨兵模式
    • Redis Sentinel 监控主节点和从节点的状态。哨兵集群可以自动检测主节点的故障,并通过投票机制选举一个从节点作为新的主节点。同时,它们会通知其他从节点和客户端关于新主节点的信息。这实现了自动化的主从切换(即故障转移)。

1. 配置主从同步步骤

1.1 创建文件夹

1.2 复制配置文件

在三个文件中写入内容

直接复制并修改配置文件中的6379分别为6379、6380、6381(三个地方的值都修改)

1.3 配置文件关闭

1.4 查看端口号,发现端口号存在

1.5 连接三个端口号

(三个连接都是同样操作)

通过端口号连接上服务器:redis-cli -p 6379、redis-cli -p 6380 、redis-cli -p 6381

连接成功:

1.6 查看主机运行情况

查看三台主机运行情况(没有设置都是主机,没有从机);

此时我们并没有配置谁是从服务器,都是主服务器,所以需要配置一下;

info replication :打印主从复制的相关信息;

可以看到当前的6379服务是一个主机master;

1.7 让服务器变成(主机)或(从机)

使用命令使6380和6381变成从机;

成为某个实例的从服务器:slaveof <ip> <port>

在6380和6381上都执行:slaveof 127.0.0.1 6379

成功后查看 6381 变成了slave从机:

在6379服务中查看,它是master主机:

实现一主二从:

  • 此操作完成后,他们就变成了主从关系,主机通过写入时同时主机也会把数据复制到从机中,读取的时候读的是从机的信息。(主机只用写,从机只用读)
  • (一主两从)代表的是主机可以写入数据的同时把数据也复制一份到他下面的从机中(从机可以有多个),从机也可以查到主机写入的值

1.8 实现效果

主机写入:

从机读取:

2. 主从复制(一主二仆)的特点

2.1 从服务器挂掉重启后并没有变成从机而是成为了主机

  • 从服务器在重启后有可能会成为主服务器的情况:
    • 哨兵(Sentinel)故障转移:当主服务器(Master)宕机时,Redis Sentinel 进行故障转移(Failover),选举一个从服务器(Slave)为新的主服务器。如果该从服务器重新启动,可能会继续作为新的主服务器,尤其是在它已经被选为主服务器之前。
    • 没有正确配置从服务器:如果从服务器重启后没有正确配置为从服务器(Replica),或者在重启时无法连接到指定的主服务器,它可能会以独立的主服务器启动。

特点一:

如果又继续把他变成6379的从服务器,那么他会把他挂掉之前的数据全部一个个的复制过来。

所以当他又变成从服务器的时候,他又会有了主机复制的数据;

特点二:

当主服务器挂掉的时候,从服务器并不会上位,还是原来的从服务器;

2.2 主从复制原理

  1. 当从连接上主服务器之后,从服务器向主服务发送进行数据同步消息;
  2. 主服务器接到从服务器发送过来同步消息,把主服务器数据进行持久化rdb文件,把rdb文件发送从服务器,从服务器拿到rdb进行读取;
  3. 每次主服务器进行写操作之后,和从服务器进行数据同步;
    • 不过从服务器只会在第一次连接主服务器的时候发起同步消息,当连接后,都是主服务器主动发起请求给从服务器,进行复制同步rbd数据;

2.3 薪火相传和反客为主

1. 薪火相传概念及缺点:

缺点:当从服务器挂掉之后,主服务器无法直接连接从机下的从机;

类似管理层职位划分,当人的数量变多了,这会变得不好管理,这时就会分出小组长去管理其他人,以此类推;

2. 反客为主:

当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改;

slaveof no one :将从机变为主机;

  • 场景:

    当发布上线的服务器挂掉之后,我们程序员需要手动的去操作,执行命令,这个也需要一段时间;

  • 缺点:

    手动操作;

    耗时;

3. 哨兵模式(sentinel)

  • (哨兵模式与主从复制关联:当配置了哨兵之后,那么当主服务器挂掉之后,哨兵立马顶上,且哨兵也可以配置多个)

  • 概念

    反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库;

3.1 创建哨兵文件

myredis是创建服务器的时候,自己创建的一个文件,里面放的是redis配置文件;

进入myredis文件,创建sentinel.conf;

3.2 配置哨兵

  • 在哨兵文件中写入sentinel monitor mymaster 127.0.0.1 6379 1
  • 其中mymaster为监控对象起的服务器名称,1为至少有多少个哨兵同意迁移的数据;
  • 1数量代表有1个哨兵同意切换,为2就是有两个哨兵同意切换才能切换。

我如何知道哨兵有几个同意我迁移的?

        在Redis的哨兵模式中,当主节点出现故障时,哨兵会选举一个新的主节点并进行迁移。在迁移过程中,哨兵需要确保有足够的从节点同意迁移才能进行。

在默认情况下,哨兵模式中至少需要有一半以上的从节点同意迁移才能进行。这个比例可以通过配置文件中的quorum参数进行设置,默认值为2(即至少需要2个从节点同意迁移)。

如果你想要知道当前哨兵模式中有多少个从节点同意迁移,可以使用Redis的命令SENTINEL sentinels <master-name>来获取哨兵的信息。其中<master-name>是主节点的名称。

命令的返回结果中会包含一个num-slaves字段,表示有多少个从节点,以及一个num-other-sentinels字段,表示有多少个其他哨兵节点。通过计算num-slavesnum-other-sentinels的和,再与quorum进行比较,就可以知道有多少个从节点同意迁移。

3.3 启动哨兵

  • 当我们的主机挂掉之后,这时候从机就可以自动上位了,这时候之前的主机,就变成了当前主机的从机了;(老主机就变成了新上位主机的从机了)
  • 其它从机也隶属于当前新主机了;
  • redis-sentinel sentinel.conf :Sentinel 的启动与使用;

  • 作用:

    高可用性:在 Redis 主节点失效时,自动将一个从节点提升为新的主节点,确保服务可用性。

    监控:监控 Redis 主从结构的健康状态,并在问题发生时通知管理员。

    自动修复:执行自动故障转移和配置修复,减少手动干预。

从机的优先级:

        在 Redis Sentinel 进行故障转移时,从机(slave,或 replica)的优先级影响它们被提升为主机(master)的顺序。Redis 使用一个叫做replica-priority的参数来决定哪个从机有更高的优先级。了解和配置这个优先级参数可以帮助控制从机在故障转移中的选择顺序......

4. 主从复制概念流程

        Redis 主从复制(Master-Slave Replication)是 Redis 用于实现数据分发和高可用性的核心机制。它允许一个 Redis 实例(主机,Master)自动将数据复制到一个或多个 Redis 实例(从机,Slave),从而实现读写分离和数据冗余。下面是主从复制的概念和流程的详细说明。

4.1 主从复制的基本概念

  1. 主机(Master):
    • 处理所有的写请求和修改数据的操作。
    • 将数据变更传播给从机。
  2. 从机(Slave):
    • 从主机同步数据。
    • 通常处理只读请求,减轻主机的负载。
    • 可以被配置为其他从机的主机,形成级联复制。
  3. 全量复制:
    • 从机第一次连接主机或与主机数据差异过大时进行。
    • 发送整个数据快照(RDB 文件)给从机。
  4. 部分复制:
    • 用于同步期间的增量数据变化。
    • 通过复制流(replication stream)将新命令发送给从机。

4.2 主从复制的工作流程

  1. 配置从机:

    • 在从机的配置文件 redis.conf 中指定主机的 IP 和端口,或者使用 SLAVEOF 命令动态配置。
    • 配置文件方式
      replicaof 192.168.1.1 6379

    • 命令方式:
      redis-cli SLAVEOF 192.168.1.1 6379

  2. 初次同步(全量复制):

    • 从机连接主机,发送 PSYNC 命令。
    • 如果是第一次同步或主从数据差异过大,主机生成 RDB 快照。
    • 主机将 RDB 文件发送给从机。
    • 从机载入 RDB 文件以获得主机的完整数据快照。
  3. 增量复制(部分复制):

    • 主机发送从 PSYNC 开始以来的所有写操作命令(即复制流)给从机。
    • 从机将这些命令应用到本地数据中,保持与主机数据一致。
  4. 复制流和心跳机制:

    • 主机持续向从机发送命令流保持数据同步。
    • 主机和从机之间定期发送 PING/PONG 命令确保连接健康。
  5. 故障恢复:

    • 如果从机断开连接,在重新连接后会尝试部分同步,尽量恢复增量数据。
    • 如果部分同步失败(例如,主机的复制缓冲区数据丢失),将重新进行全量同步。

4.3 主从复制的示例配置

主机配置(master.conf):

port 6379
# 其他主机配置

从机配置(slave.conf):

port 6380
replicaof 127.0.0.1 6379

4.4 参考示意图

基本架构图:

5. 主从复制的优缺点

优点:

  • 读写分离: 减轻主机负载,提高读性能。
  • 数据冗余: 提高数据的可靠性。
  • 扩展性: 通过增加从机进行水平扩展。

缺点:

  • 一致性问题: 复制过程中存在延迟,可能导致短暂的不一致。
  • 故障处理: 如果主机故障,需要手动或借助 Sentinel 执行故障转移。
  • 复制延迟: 由于所有的写操作都是先在 Master 上操作,然后同步更新到 slave 上,所以从 Master同步到 slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。

6. 主从复制的应用场景

  • 分布式缓存: 在大型分布式系统中,通过增加从机来处理高并发读请求。
  • 数据备份: 通过从机进行数据异地备份,提高数据可靠性。
  • 读写分离架构: 实现读写分离,提高系统整体性能和可用性。

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

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

相关文章

【达梦数据库】typeorm+node.js+达梦数据库返回自增列值

1.配置环境&#xff0c;下载依赖包 typeorm init --name test22 --database mysql typeorm-dm&#xff0c;uuid,typeorm2,修改连接信息 修改src/ data-source.ts 文件 连接dm&#xff0c;可参考刚刚安装typeorm-dm 模块中的 README.md 3.修改自增信息 /* 修改前*/PrimaryGen…

【数据结构与算法 刷题系列】判断链表是否有环(图文详解)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法 经典例题》C语言 期待您的关注 ​ ​ 目录 一、问题描述 二、解题思路 1.解题思路: 2.快慢指针的移动分三个…

✅生产问题之Emoji表情如何操作存储,MySQL是否支持

针对 Emoji 表情 MySQL 存储是否支持的问题&#xff0c;结论是&#xff1a; MySQL 中可以存储 emoji 表情&#xff0c;但需要使用 UTF8MB4 字符编码。如果使用 UTF8MB3&#xff0c;存储这些扩展字符会导致解析错误。 课外补充 MySQL 对 Unicode 的支持 Unicode 字符集已成为…

6.17作业

升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面显示。 //发送端头文件…

AI训练Checkpoint对存储的影响

检查点&#xff08;Checkpoints&#xff09;是机器学习和深度学习训练过程中的一个重要机制&#xff0c;旨在定期保存训练状态&#xff0c;以便在训练过程中遇到失败或中断时能够从中断处恢复训练&#xff0c;而无需从头开始。 随着模型参数量的剧增&#xff0c;Checkpoint文件…

经历的分享

我是三本计算机科学技术跨考上岸的学生&#xff0c;本科阶段技术能力并没有掌握多少&#xff0c;在选择导师时屡屡碰壁&#xff0c;我当时向许多计算机方向的导师&#xff0c;比如大数据方向,计算机视觉 迁移学习和图像处理方向的导师全都拒绝了我&#xff0c;最终学校给我分配…

【机器学习300问】122、RNN面临哪些问题?

循环神经网络&#xff08;RNN&#xff09;主要面临梯度消失和梯度爆炸两个核心问题&#xff0c;这严重影响了其处理长期依赖的能力。此外&#xff0c;还存在一些其他的技术挑战。 一、两个主要问题 &#xff08;1&#xff09;梯度消失和梯度爆炸问题 这是RNN中最显著的问题之…

区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-ABKDE卷积神经网络自适应…

大话设计模式解读03-装饰模式

本篇文章&#xff0c;来解读《大话设计模式》的第6章——装饰模式。并通过C代码实现实例代码的功能。 注&#xff1a;第3~6章讲的是设计模式中的一些原则&#xff08;第3章&#xff1a;单一职责原则&#xff1b;第4章&#xff1a;开放-封闭原则&#xff1b;第5章&#xff1a;依…

嵌入式linux系统中SPI子系统原理分析01

大家好,今天给大家分享一下,如何使用linux系统中的SPI通信协议,实现主从设备之间的信息传递。 SPI是一种常见的设备通用通信协议。它是一个独特优势就是可以无中断发送数据,可以连续发送或接收任意数量的位。而在I2C和UART中,数据以数据包的形式发送,有限定位数。 …

FreeBSD通过CBSD管理低资源容器jail来安装Ubuntu子系统实践

简介 FreeBSD、CBSD、Jail和Ubuntu&#xff0c;四者的组合方案可以说是强强联合&#xff0c;极具性价比和竞争力&#xff01;同时安装简单方便&#xff0c;整体方案非常先进。 CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案…

wondershaper 一款限制 linux 服务器网卡级别的带宽工具

文章目录 一、关于奇迹整形器二、文档链接三、源码下载四、限流测试五、常见报错1. /usr/local/sbin/wondershaper: line 145: tc: command not found2. Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs.. 一、关于奇迹整形…

Langchain中使用Ollama提供的Qwen大模型进行Function Call实现天气查询、网络搜索

Function Call&#xff0c;或者叫函数调用、工具调用&#xff0c;是大语言模型中比较重要的一项能力&#xff0c;对于扩展大语言模型的能力&#xff0c;或者构建AI Agent&#xff0c;至关重要。 Function Call的简单原理如下&#xff1a; 按照特定规范&#xff08;这个一般是L…

多尺度特征提取:原理、应用与挑战

多尺度 多尺度特征提取&#xff1a;原理、应用与挑战**原理****应用****挑战****总结** 多尺度特征提取&#xff1a;原理、应用与挑战 在计算机视觉、自然语言处理和信号处理等领域&#xff0c;有效地捕捉和解析数据的多种尺度特性是至关重要的。多尺度特征提取是一种技术&…

融资融券有哪些交易技巧,两融利率现在最低多少?4.0%!

融资融券交易技巧 授信额度技巧 当我们账户净资产有显著增长时&#xff0c;最好主动申请增加信用额度&#xff0c;这样在后面行情好转入资金需要进行更多融资融券交易时就不会受限于授信额度&#xff0c;避免因为临时申请增加额度而错过交易机会。 买入委托技巧 现金的折算率…

小孟再接盲盒小程序,3天开发完!

大家好&#xff0c;我是程序员小孟。 前面开发了很多的商业的单子&#xff0c;私活联盟的小伙伴慢慢的逐渐搞自己的产品。 前面的话&#xff0c;开发了盲盒小程序&#xff0c;最近又接了一款盲盒小程序。因为前面有开发过&#xff0c;所以我们的成本也少了很多。 盲盒小程序…

2024.6.17 作业 xyt

今日作业&#xff1a; 升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确…

Marin说PCB之orcad-capture原理图封装库的创建总结----01

今天是个不错的日子&#xff0c;我早上一出门刚骑车到半路就开始下大雨了&#xff0c;可是天气预报上明明说的没有雨啊&#xff0c;所以说天气预报就像是女人的脾气一样&#xff0c;难以揣摩啊&#xff0c;也尽量少去揣摩吧。 小编我刚刚到公司&#xff0c;就收到美国分部同事J…

【C语言】排序算法 -------- 计数排序

个人主页 创作不易&#xff0c;感谢大家的关注&#xff01; 文章目录 1. 计数排序的概念2. 计数排序使用场景3. 计数排序思想4. 计数排序实现过程5. 计数排序的效率6. 总结&#xff08;附源代码&#xff09; 1. 计数排序的概念 计数排序是一种非比较的排序算法&#xff0c;其…

分享三款AI智能修图工具,超实用!

随着AI技术的飞速发展&#xff0c;图像处理领域正经历着一场颠覆性的革新。如今&#xff0c;众多繁琐的图像处理任务&#xff0c;诸如修图、抠图以及高清修复等&#xff0c;均可以借助先进的AI技术实现自动化处理。相较于传统的人工操作&#xff0c;AI图像工具不仅极大地提升了…