Redis系列十三:Redis高可用之主从复制

redis系统深度学习四:主节点自动化故障恢复——哨兵 前言 在深入学习Redis(3):主从复制中曾提到,Redis主从复制的作用有数据热备、负载均衡、故障恢复等;但主从复制存在的一个问题是故障恢复无法自动化。本文将要介绍的哨兵,它基于Redis主从复制,主要作用便是解决主节点故障恢复的自动化问题,进一步提高系统的高可用性。 文章主要内容如下:首先介绍哨兵的作用和架构;然后讲述哨兵系统的部署方法,以及通过客户端访问哨兵系统的方法;然后简要说明哨兵实现的基本原理;最后给出关于哨兵实践的一些建议。文章内容基于Redis 3.0版本。 目录 一、作用和架.. 阅读详情

一、主从复制概述

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

主从复制的作用

 

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
     

二、如何使用主从复制

1、建立复制

主从复制的开启,完全是在从节点发起的;不需要我们在主节点做任何事情。
从节点开启主从复制,有3种方式:

a、配置文件

在从服务器的配置文件中加入:slaveof

slaveof 127.0.0.1 6379

在6379启动完后再启6380,完成配置;

b、启动命令

redis-server启动命令后加入 –slaveof

./redis-server -slaveof 127.0.0.1 6379

c、客户端命令

Redis服务器启动后,直接通过客户端执行命令:slaveof ,则该Redis实例成为从节点。

slaveof 127.0.0.1 6379

2、断开复制

在slave节点,执行6380:> slaveof no one
需要注意的是,从节点断开复制后,不会删除已有的数据,只是不再接受主节点新的数据变化。

断开复制之后同样可以通过slaveof 建立复制。
可以用指令info replication 查看主从复制状态。

补充

a、读写分离:从节点建议用只读模式slave-read-only=yes, 因为从节点修改数据,主从数据不一致。并且这样读写分离可减轻主节点压力。
b、传输延迟:主从一般部署在不同机器上,复制时存在网络延时问题,redis提供repl-disable-tcp-nodelay参数决定是否关闭TCP_NODELAY(默认为关闭)
参数关闭时:无论大小都会及时发布到从节点,占带宽,适用于主从网络好的场景。
参数启用时:主节点合并所有数据成TCP包节省带宽,默认为40毫秒发一次,取决于内核,主从的同步延迟40毫秒,适用于网络环境复杂或带宽紧张,如跨机房。

三、Redis主从拓扑

1、一主一从

用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要),这样即保证了数据的安全性,也避免持久化对主节点的影响。

在这里插入图片描述

2、一主多从

针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点同步到多节点的次数也越多,影响带宽,也加重主节点的稳定。
在这里插入图片描述

3、树状主从

一主多从的缺点是主节点推送次数多压力大,若主节点只推送一次数据到从节点1,再由从节点2推送到11,减轻主节点推送的压力。
在这里插入图片描述

三、主从复制的实现原理

主从复制过程大体可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段;下面分别进行介绍。

1、连接建立阶段

该阶段的主要作用是在主从节点之间建立连接,为数据同步做好准备。
以下细节内容了解即可,不必细究。

步骤1:保存主节点信息

从节点服务器内部维护了两个字段,即masterhost和masterport字段,用于存储主节点的ip和port信息。
需要注意的是,slaveof是异步命令,从节点完成主节点ip和port的保存后,向发送slaveof命令的客户端直接返回OK,实际的复制操作在这之后才开始进行。

步骤2:建立socket连接

从节点每秒1次调用复制定时函数replicationCron(),如果发现了有主节点可以连接,便会根据主节点的ip和port,创建socket连接。如果连接成功,则:

从节点:为该socket建立一个专门处理复制工作的文件事件处理器,负责后续的复制工作,如接收RDB文件、接收命令传播等。

主节点:接收到从节点的socket连接后(即accept之后),为该socket创建相应的客户端状态,并将从节点看做是连接到主节点的一个客户端,后面的步骤会以从节点向主节点发送命令请求的形式来进行。

步骤3:发送ping命令


从节点成为主节点的客户端之后,发送ping命令进行首次请求,目的是:检查socket连接是否可用,以及主节点当前是否能够处理请求。

从节点发送ping命令后,可能出现3种情况:

(1)返回pong:说明socket连接正常,且主节点当前可以处理请求,复制过程继续。

(2)超时:一定时间后从节点仍未收到主节点的回复,说明socket连接不可用,则从节点断开socket连接,并重连。

(3)返回pong以外的结果:如果主节点返回其他结果,如正在处理超时运行的脚本,说明主节点当前无法处理命令,则从节点断开socket连接,并重连。

步骤4:身份验证

如果从节点中设置了masterauth选项,则从节点需要向主节点进行身份验证;没有设置该选项,则不需要验证。从节点进行身份验证是通过向主节点发送auth命令进行的,auth命令的参数即为配置文件中的masterauth的值。

如果主节点设置密码的状态,与从节点masterauth的状态一致(一致是指都存在,且密码相同,或者都不存在),则身份验证通过,复制过程继续;如果不一致,则从节点断开socket连接,并重连。

步骤5:发送从节点端口信息(可忽略)
身份验证之后,从节点会向主节点发送其监听的端口号(前述例子中为6380),主节点将该信息保存到该从节点对应的客户端的slave_listening_port字段中;该端口信息除了在主节点中执行info Replication时显示以外,没有其他作用。

2、数据同步阶段
该阶段可以理解为从节点数据的初始化。具体执行的方式是:从节点向主节点发送psync命令(Redis2.8以前是sync命令),开始同步。
这一阶段及以后,主从节点互为客户端,在数据同步阶段和后面的命令传播阶段,主节点需要主动向从节点发送请求(如推送缓冲区中的写命令),才能完成复制。

3、命令传播阶段
在这个阶段主节点将自己执行的写命令发送给从节点,从节点接收命令并执行,从而保证主从节点数据的一致性。

四、全量复制和部分复制

1、全量复制

用于初次复制或其他无法进行部分复制的情况,将主节点中的所有数据都发送给从节点,是一个非常重型的操作。

Redis通过psync命令进行全量复制的过程如下:

(1)从节点判断无法进行部分复制,向主节点发送全量复制的请求;或从节点发送部分复制的请求,但主节点判断无法进行全量复制;具体判断过程需要在讲述了部分复制原理后再介绍。
(2)主节点收到全量复制的命令后,执行bgsave,在后台生成RDB文件,并使用一个缓冲区(称为复制缓冲区)记录从现在开始执行的所有写命令。
(3)主节点的bgsave执行完成后,将RDB文件发送给从节点;从节点首先清除自己的旧数据,然后载入接收的RDB文件,将数据库状态更新至主节点执行bgsave时的数据库状态。
(4)主节点将前述复制缓冲区中的所有写命令发送给从节点,从节点执行这些写命令,将数据库状态更新至主节点的最新状态。
(5)如果从节点开启了AOF,则会触发bgrewriteaof的执行,从而保证AOF文件更新至主节点的最新状态。

2、部分复制

用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节点,与全量复制相比更加高效。需要注意的是,如果网络中断时间过长,导致主节点没有能够完整地保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制。

部分复制的实现,依赖于三个重要的概念:

(1)复制偏移量
主节点和从节点分别维护一个复制偏移量(offset),代表的是主节点向从节点传递的字节数;主节点每次向从节点传播N个字节数据时,主节点的offset增加N;从节点每次收到主节点传来的N个字节数据时,从节点的offset增加N。

offset用于判断主从节点的数据库状态是否一致:如果二者offset相同,则一致;如果offset不同,则不一致,此时可以根据两个offset找出从节点缺少的那部分数据。

(2)复制积压缓冲区
复制积压缓冲区是由主节点维护的、固定长度的、先进先出(FIFO)队列,默认大小1MB;当主节点开始有从节点时创建,其作用是备份主节点最近发送给从节点的数据。注意,无论主节点有一个还是多个从节点,都只需要一个复制积压缓冲区。

在命令传播阶段,主节点除了将写命令发送给从节点,还会发送一份给复制积压缓冲区,作为写命令的备份;除了存储写命令,复制积压缓冲区中还存储了其中的每个字节对应的复制偏移量(offset)。由于复制积压缓冲区定长且是先进先出,所以它保存的是主节点最近执行的写命令;时间较早的写命令会被挤出缓冲区。

由于该缓冲区长度固定且有限,因此可以备份的写命令也有限,当主从节点offset的差距过大超过缓冲区长度时,将无法执行部分复制,只能执行全量复制。

从节点将offset发送给主节点后,主节点根据offset和缓冲区大小决定能否执行部分复制:

如果offset偏移量之后的数据,仍然都在复制积压缓冲区里,则执行部分复制;
如果offset偏移量之后的数据已不在复制积压缓冲区中(数据已被挤出),则执行全量复制。
(3)服务器运行ID(runid)
每个Redis节点(无论主从),在启动时都会自动生成一个随机ID(每次启动都不一样),由40个随机的十六进制字符组成;runid用来唯一识别一个Redis节点。

主从节点初次复制时,主节点将自己的runid发送给从节点,从节点将这个runid保存起来;当断线重连时,从节点会将这个runid发送给主节点;主节点根据runid判断能否进行部分复制:

如果从节点保存的runid与主节点现在的runid相同,说明主从节点之前同步过,主节点会继续尝试使用部分复制(到底能不能部分复制还要看offset和复制积压缓冲区的情况);
如果从节点保存的runid与主节点现在的runid不同,说明从节点在断线前同步的Redis节点并不是当前的主节点,只能进行全量复制。

补充

在命令传播阶段,除了发送写命令,主从节点还维持着长连接心跳机制:PING和REPLCONF ACK。心跳机制对于主从复制的超时判断、数据安全等有作用。主节点默认每10S向从节点发ping命令,repl-ping-slave-period控制发送频率。

 

 

 

 

十二、Redis主从复制 本文详细介绍了Redis主从复制的概念、作用、配置方法和复制原理。主从复制是Redis数据库实现读写分离和容灾恢复的重要机制。文章通过配置实例,演示了如何设置主从复制,并探讨了一主多从、链式复制和故障转移等高级应用。同时,还介绍了哨兵模式,这是一种自动监控主机状态并实现故障恢复的高级功能。文章内容丰富,适合需要深入了解Redis高可用性配置的开发者和运维人员。 阅读详情

相关推荐

Redis教程(十三):Redis的主从复制模式搭建

Redis的主从复制模式是一种常用的数据复制和备份机制,其核心目的是将一台Redis服务器(称为“主”服务器)的数据复制到一个或多个Redis服务器(称为“从”服务器)。这种机制提供了数据的高可用性、负载均衡和故障恢复解决方案。在Redis的主从复制模式中,数据的读写操作主要在主服务器上执行,而从服务器主要用于读操作和备份,以此来分担主服务器的读负载压力并提供数据的高可用性。

十三月的博客 1072

面试笔记整理(一)

面试笔记整理(一) 一、中间件相关 1.1.1 Redis相关 Redis本身是线程安全的吗? 两个线程同时修改Redis会不会出现线程安全问题 答案: Redis高并发总结 1. Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很短,时间的花费主要集中在IO上,所以读取速度快。 2. Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。 3. 再说一下IO,Redis使用的是非阻塞IO,IO多路复用,使用了单线程来轮询描述符,将数据库的开、

baidu_38900596的博客 165

从‘炼丹’到‘讲理’:物理信息神经网络(PINN)的硬约束 vs 软约束,我该选哪个?

本文深入探讨了物理信息神经网络(PINN)中硬约束与软约束的选择策略,帮助研究者在深度学习中有效融入物理先验知识。通过对比两种约束方法的实现复杂度、数据效率和计算性能,提供了针对材料科学和流体动力学等领域的实用决策指南,并介绍了自适应约束和混合约束等前沿技术。

weixin_42535703的博客 526

Redis 主从复制

Redis 主从复制 由经验而得的智慧,胜于学习而得的智慧。个人文章精选合集 更多文章分享请关注微信公众号 星河之码 Redis高可用的方案包括持久化、主从复制(及读写分离)、哨兵和集群。 持久化侧重解决的是Redis数据的单机备份问题(从内存到硬盘的备份) 而主从复制则侧重解决数据的多机热备。此外,主从复制还可以实现负载均衡和故障恢复。 一、什么是主从复制 主从复制指将一台Redis服务器(master)的数据其他的Redis服务器(slave)的过程。数据的复制是单向的,只能由主节点到从节

Edwin_Hu的博客 541

Flink实战项目——城市交通实时监控平台

本项目是与公安交通管理综合应用平台、机动车缉查布控系统等对接的,并且基于交通部门现有的数据平台上,进行的数据实时分析项目。

yangwei2048的博客 837

【国产MCU】-CH32V307-通用定时器(GPTM)-输入捕获模式测量脉冲

CH32V307的通用定时器模块包含一个16 位可自动重装的定时器(TIM2、TIM3、TIM4和TIM5),用于测量脉冲宽度或者产生特定频率的脉冲、PWM波等。可用于自动化控制、电源等领域。 输入捕获是通用定时器功能之一,一般用于测量频率和测量脉冲宽度。本文将详细介绍如何通用定时器的输入捕获功能。

视觉与物联智能 2814

一遍文章搞懂Redis主从复制原理

主从复制概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave); 数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。 目前很多中小企业都没有使用到 Redis 的集群,但是至少都做了主从。有了主从,当 master 挂掉的时候,运维让从库过来接管,服务就可以继续,否则 master 需要经过数据恢复和重启的过程

Ethan_199402的博客 416

基于SAGE算法的宽带信道参数估计算法的MATLAB仿真

本文将介绍如何使用MATLAB进行SAGE算法的仿真,以便更好地理解和应用该算法。SAGE算法是一种基于最大期望(Expectation-Maximization)方法的迭代估计算法,用于估计未知的参数。在宽带信道参数估计中,SAGE算法通过迭代优化来估计信道的传输函数。总结起来,本文介绍了如何使用MATLAB进行基于SAGE算法的宽带信道参数提取算法的仿真。通过以上步骤,我们可以得到估计的信道响应,并与真实信道响应进行比较。此外,SAGE算法还可以与其他信道估计算法相结合,以提高估计的准确性和性能。

CodeRoarX的博客 1075

进阶Redis系列(十三):Redis主从复制【图解+实践】

在redis的路上越走越深远。

一颗剽悍的种子的博客 600

VMware系列:此平台不支持虚拟化 Intel-VT-x/EPT 或 AMD-V/RVI

VMware系列:此平台不支持虚拟化 Intel-VT-x/EPT 或 AMD-V/RVI

weixin_54626591的博客 1万+

AI驱动芯片设计的端到端验证:AI应用架构师的全流程指南

想象你要建造一座1000层的超级摩天大楼,每个房间都有独特的功能,管道、电路、电梯系统交织如迷宫。传统的检查方式是派1000个工程师逐层逐房手动检查,耗时十年且仍可能遗漏火灾隐患。这就是今天芯片设计面临的困境:7nm芯片含百亿晶体管,相当于百亿个"房间",传统验证方法(人工编写测试用例、随机仿真)已难以应对。本文的目的,是为AI应用架构师提供一份"AI驱动芯片验证导航图",范围涵盖从验证需求分析到芯片签核的全流程,包括AI模型如何融入传统验证工具链、数据如何驱动验证效率提升、以及端到端闭环系统的构建方法。

2501_92132293的博客 1240

Redis学习十三:Redis主从复制

文章目录一、概念二、环境配置2.1 查看主从复制的信息info replication2.2配置N个redis步骤1.复制redis.conf2.改端口号等配置2.1:6379端口当做主 服务器2.2:其他端口当做从服务器3.1启动3.2 查看是否启动三、配置主从3.1细节3.2复制原理3.3层层链路四、哨兵模式(自动选举老大的模式)4.1概述4.2这里的哨兵有两个作用4.3 配置测试1、配置哨兵配置文件 sentinel.conf2、启动哨兵redis-sentinel kconfig/sentinel.

huiguo_的博客 398

PCL K4PCS算法实现点云粗配准【2026最新版】

K4PCS算法实现点云粗配准。博客长期更新,本文最近一次更新时间为:2026年5月4日。

点云侠的博客 42万+

【Docker系列十三】使用 Docker Compose 部署 Redis

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 1万+

【目标跟踪】多目标跟踪的评价工具motmetrics怎么使用?

多目标跟踪,通过motmetrics测试评价对应的视频。

聿默的博客 5368

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

系列十三、Redis的哨兵机制

Sentinel(哨兵)是Redis的高可用解决方案,由一个或者多个Sentinel实例组成集群,可以监视任意多个主服务器,以及这些服务器下属的所有从服务器,并在被监视的主服务器下线或者宕机时,自动得将下线主服务器属下的某个从服务器升级为新的主服务器。简单来说哨兵就是带有自动故障转移功能的主从架构。

仰望星空,脚踏实地!安全感是自己给的,努力才是一辈子的安全感。 584

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

(十三)Redis数据库-Redis主从复制原理

(十三)Redis数据库-Redis主从复制原理,在centos7下配置Redis5.0主从主从复制原理PSYNC实现复制偏移量复制积压缓冲区设置复制积压缓冲区大小服务器运行IDCentos7下配置Redis5.0主从主服务器配置:从服务器配置:配置防火墙:主从复制的其他配置:Redis主从复制详细过程步骤1:设置主服务器的地址和端口步骤2:建立套接字连接步骤3:发送PING命令步骤4:身份验证步...

巴拉巴拉小魔仙 577

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

redis主从复制、哨兵、集群

redis主从复制、哨兵、集群

qq_59161414的博客 373

Redis 学习笔记(十三)Redis Sentinel 介绍与部署

Redis Sentinel 介绍与部署1. Sentinel介绍1.1 主从复制的问题Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。 扩展主节点的读能力,分担主节点读压力。 但是问题来了: 一旦主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。 主

men_wen的博客 5万+

Redis从入门到入坟系列文章(十三):主从复制

今天来聊一下Redis的主从复制。Redis的主从复制跟关系型数据库(比如mysql)的主从复制类似。主从复制由于能够实现读写分离和从机实现对主机的数据备份的特点,所以在一定程度上是可以扩展Redis的性能的。 接下来,就看下Redis主从复制的实现。我们配置一个主机Master和一个从机Slave: 192.168.43.241:6379(这个ip即为本地的ip) 192.168.43.241:6380 把6380从机的redis.windows.conf文件改为re...

qq_34804559的博客 298

Redis完整笔记——上到主从复制配置分析,下到基本数据类型

文章目录Redis一、Nosql为什么使用Nosql什么是NosqlNosql特点NoSQL的四大分类KV键值对文档型数据库(bson格式)列存储数据库图关系数据库二、Redis入门Redis是什么?Redis能干什么?环境搭建window搭建Linux搭建性能测试工具—redis-benchmark基础知识三、五大数据类型Redis-keyString(字符串)List(列表)Set(集合)HashZset(有序集合)四、三种特殊数据类型Geospatial(地理位置)Hyperloglog(基数统计)B

5akura's Blog 5310

面试篇:Redis

缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用布隆过滤器来解决它。布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。

JackMa的博客 9437

十三.redis主从复制

redis主从复制

醉卧雕龙舫,的博客 273

瑟瑟发抖的Redis夺命连环75问(六万多字答案和示例代码)

六万三千多字答案和示例代码,75道Redis题含盖Redis相关基础、高级和实践问题。Redis(Remote Dictionary Server,远程字典服务器)是一个开源的高性能键值对存储系统,通常被用作数据库、缓存或消息中间件。支持多种数据结构,如字符串(strings)、集合(sets)、有序集合(sorted sets)、哈希表(hashes)、列表(lists)等。1性能高、支持多种数据结构:、原子操作、持久性、主从复制、高可用与分区、发布/订阅和Lua 脚本待特性。

制定明确可量化的目标,坚持默默的做事。 1万+

十三、Redis哨兵模式--Sentinel

每个Sentinel以每秒一次的频率向他所知master、slave以及其他Sentinel发送一次ping命令。如果一个实例距离最后一次回复ping命令的时间超过指定的值,则这个实例会被Sentinel标记为主观下线。如果一个master被标记为主观下线,则正在监控这个master的其他Sentinel要以每秒一次的频率确认master是否进入主观下线。如果有足够数量的Sentinel(大于等于quorum指定的值)认为master确实处于主观下线状态,那么master会被标记为客观下线。

qq_41056506的博客 1010
上一篇: Redis系列十四:Redis高可用之哨兵
下一篇: NIO多路复用机制
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值