当前位置: 首页 > news >正文

Redis 主从复制详解:实现高可用与数据备份

目录

引言

1. 什么是 Redis 主从复制?

1.1 定义

1.2 核心概念

2. Redis 主从复制的工作原理

2.1 复制流程

2.2 复制流程图

3. Redis 主从复制的配置方法

3.1 通过配置文件配置

主节点配置

从节点配置

3.2 通过命令行配置

设置从节点

取消从节点

4. Redis 主从复制的使用场景

4.1 数据备份

4.2 读写分离

4.3 高可用性

4.4 数据分发

5. Redis 主从复制的优缺点

5.1 优点

5.2 缺点

6. Redis 主从复制的实际应用示例

7. Redis 主从复制的常见问题

7.1 数据延迟

7.2 主节点故障

7.3 数据不一致

8. Redis 主从复制的替代方案

9. 总结


引言

在现代分布式系统中,高可用性数据备份是两个至关重要的需求。Redis 作为一个高性能的内存数据库,提供了强大的 主从复制(Replication) 功能,能够有效提升系统的可用性和数据安全性。通过主从复制,Redis 可以将数据从主节点(Master)复制到一个或多个从节点(Slave),从而实现数据的冗余备份和读写分离。

本文将深入探讨 Redis 主从复制的原理、配置方法、使用场景以及常见问题,帮助读者全面理解并掌握这一功能。


1. 什么是 Redis 主从复制?

1.1 定义

Redis 主从复制是一种数据同步机制,允许将一个 Redis 实例(主节点)的数据复制到一个或多个 Redis 实例(从节点)。主节点负责处理写操作,而从节点负责复制主节点的数据,并提供读操作。

1.2 核心概念

  • 主节点(Master):负责处理写操作,并将数据同步到从节点。

  • 从节点(Slave):复制主节点的数据,并提供读操作。

  • 复制流(Replication Stream):主节点将写操作以命令的形式发送给从节点,从节点执行这些命令以保持数据一致性。


2. Redis 主从复制的工作原理

2.1 复制流程

  1. 建立连接:从节点通过 SLAVEOF 命令或配置文件连接到主节点。

  2. 全量同步:从节点首次连接主节点时,主节点会生成一个 RDB 快照 并将其发送给从节点,从节点加载快照以初始化数据。

  3. 增量同步:主节点将后续的写操作以命令的形式发送给从节点,从节点执行这些命令以保持数据同步。

  4. 心跳检测:主从节点之间通过心跳机制保持连接,确保复制过程的稳定性。

2.2 复制流程图


3. Redis 主从复制的配置方法

配从库不配主库

3.1 通过配置文件配置

在 Redis 配置文件中,可以通过以下参数配置主从复制:

主节点配置

# 主节点无需特殊配置

从节点配置

# 设置主节点的 IP 和端口
replicaof <master-ip> <master-port>

# 如果主节点需要认证,设置主节点的密码
masterauth <master-password>

每次与 master 断开之后,都需要重新连接,除非你配置进 redis.conf 文件

3.2 通过命令行配置

在 Redis 运行时,可以通过 SLAVEOF 命令动态配置主从复制:

设置从节点

# 设置从节点的主节点
SLAVEOF <master-ip> <master-port>

取消从节点

# 取消从节点的主节点
SLAVEOF NO ONE

4. Redis 主从复制的使用场景

4.1 数据备份

通过主从复制,可以将主节点的数据复制到从节点,从而实现数据的冗余备份。如果主节点发生故障,可以从从节点恢复数据。

4.2 读写分离

主节点负责处理写操作,而从节点可以处理读操作,从而分担主节点的负载,提升系统的整体性能。

4.3 高可用性

通过主从复制,可以实现 Redis 的高可用性。如果主节点发生故障,可以将从节点提升为新的主节点,从而保证系统的持续运行。

4.4 数据分发

通过主从复制,可以将数据分发到多个从节点,从而实现数据的分布式存储和访问。


5. Redis 主从复制的优缺点

5.1 优点

  • 数据冗余:通过复制实现数据的冗余备份,提高数据的安全性。

  • 读写分离:从节点可以处理读操作,分担主节点的负载。

  • 高可用性:通过主从切换实现高可用性。

  • 扩展性:可以通过增加从节点扩展系统的读能力。

5.2 缺点

  • 数据延迟:从节点的数据可能存在延迟,无法实时同步。

  • 写性能瓶颈:主节点需要处理所有写操作,可能成为性能瓶颈。

  • 故障切换复杂:主节点故障时,需要手动或通过工具进行主从切换。

6. Redis 主从复制的实际应用示例

准备工作:我们配置主从复制,至少需要三个,一主二从!配置三个客户端!

1、拷贝多个redis.conf 文件

2、指定端口 6379,依次类推

3、开启daemonize yes

4、Pid文件名字 pidfile /var/run/redis_6379.pid , 依次类推

5、Log文件名字 logfile "6379.log" , 依次类推

6、Dump.rdb 名字 dbfilename dump6379.rdb , 依次类推 

上面都配置完毕后,3个服务通过3个不同的配置文件开启,我们的准备环境就OK 了! 

一主二从

1、环境初始化

默认三个都是Master 主节点

2、配置为一个Master 两个Slave

3、在主机设置值,在从机都可以取到!从机不能写值!

7. Redis 主从复制的常见问题

7.1 数据延迟

从节点的数据可能存在延迟,无法实时同步。可以通过以下方法减少延迟:

  • 优化网络:确保主从节点之间的网络连接稳定。

  • 增加从节点:通过增加从节点分担读操作,减少主节点的负载。

7.2 主节点故障

如果主节点发生故障,需要手动或通过工具进行主从切换。可以使用 Redis Sentinel 或 Redis Cluster 实现自动故障切换。

7.3 数据不一致

如果主从节点之间的网络中断,可能导致数据不一致。可以通过以下方法解决:

  • 全量同步:从节点重新连接主节点时,会进行全量同步以恢复数据一致性。

  • 监控工具:使用监控工具检测主从节点的数据一致性。


8. Redis 主从复制的替代方案

虽然 Redis 主从复制功能强大,但在某些场景下可能需要更高级的功能(如自动故障切换、分布式存储等)。以下是一些常见的替代方案:

  • Redis Sentinel:提供自动故障切换和监控功能,适合高可用性场景。

  • Redis Cluster:提供分布式存储和自动分片功能,适合大规模数据存储场景。


9. 总结

Redis 主从复制是一种高效、简单的数据同步机制,适用于数据备份、读写分离、高可用性等场景。尽管它存在数据延迟和故障切换复杂的缺点,但在许多场景中仍然表现出色。

拓展:

1.层层链路

上一个Slave 可以是下一个slave 和 Master,Slave 同样可以接收其他 slaves 的连接和同步请求,那么 该 slave 作为了链条中下一个的master,可以有效减轻 master 的写压力!

 

测试:6379 设置值以后 6380 和 6381 都可以获取到!OK!

2.谋朝篡位

一主二从的情况下,如果主机断了,从机可以使用命令 SLAVEOF NO ONE 将自己改为主机!这个时候其余的从机链接到这个节点。对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

主机再回来,也只是一个光杆司令了,从机为了正常使用跑到了新的主机上!

 复制原理

Slave 启动成功连接到 master 后会发送一个sync命令

Master 接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行 完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。

全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

增量复制:Master 继续将新的所有收集到的修改命令依次传给slave,完成同步

但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

相关文章:

  • 【MySQL - 表的内外连接】
  • 【13】单片机编程核心技巧:乘法运算
  • 《Python全栈开发》第2课:HTML骨架搭建 - 从零编写个人简历页面
  • 数字IC后端设计实现教程 |Innovus ICC2 Routing Pin Access Setting设置方法
  • 第十五届蓝桥杯大学B组(握手问题、小球反弹、好数)
  • ChatGPT课件分享(37页PPT)
  • 【亲测有效】Mac系统升级或降级Node.js版本,Mac系统调整node.js版本
  • 【3D视觉学习笔记1】针孔相机模型与坐标系变换
  • 【Azure 架构师学习笔记】- Azure Databricks (17) --Delta Live Table和Delta Table
  • 面试之《webpack从输入到输出经历了什么》
  • 基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求
  • GB8599-2023标准测试包/小规格测试包/标准生物测试包1.5kg/满负载织物7.5kg/不锈钢金属测试包/空腔负载试验的过程挑战装置(PCD)
  • Linux网络编程之——网络初认识
  • 启智畅想的集装箱号码识别技术,效率与技术的完美结合
  • [杂学笔记] TCP和UDP的区别,对http接口解释 , Cookie和Session的区别 ,http和https的区别 , 智能指针 ,断点续传
  • AF3 shaped_categorical函数解读
  • 大数据hadoop课程笔记
  • HTTPS协议原理:在Linux世界里的加密冒险
  • Jupyter Notebook 全平台安装与配置教程(附Python/Anaconda双方案)
  • Spring(3)—— 获取http头部信息
  • 美政府被曝下令加强对格陵兰岛间谍活动,丹麦将召见美代办
  • 大四本科生已发14篇SCI论文?学校工作人员:已记录汇报
  • 同为“东部重要中心城市”后交出首份季报:宁杭苏表现如何?
  • 金价大反攻,国内金饰价格涨回千元,能否重返巅峰?
  • 预告:央行等部门将发声,介绍“一揽子金融政策支持稳市场稳预期”有关情况
  • 机关食堂向游客开放的重庆荣昌区,“消费市场迎来历史性突破”