Redis主从架构

Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储系统,广泛应用于缓存、消息队列、实时分析等场景。为了提高系统的可用性、可靠性和读写性能,Redis提供了主从复制(Master-Slave Replication)机制。下面将深入探讨Redis的主从架构,包括其工作原理、配置方法、优缺点以及最佳实践。

1. 为什么需要主从架构?

在生产环境中,单个Redis实例可能无法满足高并发、高可用性的需求。主从架构通过将数据复制到多个节点,提供了以下优势:

  • 高可用性:当主节点(Master)出现故障时,从节点(Slave)可以接管服务,确保系统的持续运行。
  • 读写分离:主节点负责写操作,从节点负责读操作,从而提高系统的读写性能。
  • 数据备份:从节点可以作为数据备份,防止数据丢失。

在这里插入图片描述

2. 主从架构的工作原理

Redis的主从架构基于复制(Replication)机制,主节点将数据变更操作同步到从节点。以下是主从复制的基本工作流程:

2.1 初始同步(Full Resynchronization)

当从节点首次连接到主节点时,会进行一次全量同步:

  1. 从节点发送SYNC命令:从节点向主节点发送SYNC命令,请求全量同步。
  2. 主节点生成RDB文件:主节点生成一个RDB快照文件,并将其发送给从节点。
  3. 从节点加载RDB文件:从节点接收并加载RDB文件,完成数据初始化。
  4. 主节点发送缓冲区数据:主节点将生成RDB文件期间产生的写操作命令缓冲区数据发送给从节点。

2.2 增量同步(Partial Resynchronization)

在初始同步完成后,主节点和从节点之间会进行增量同步:

  1. 主节点记录写操作:主节点将每个写操作记录到一个缓冲区(Replication Buffer)中。
  2. 从节点发送PSYNC命令:从节点定期向主节点发送PSYNC命令,请求增量同步。
  3. 主节点发送增量数据:主节点将缓冲区中的增量数据发送给从节点。

2.3 心跳机制

主节点和从节点之间通过心跳机制保持连接状态:

  1. 主节点发送心跳:主节点定期向从节点发送心跳包,确认连接状态。
  2. 从节点发送心跳:从节点定期向主节点发送心跳包,确认连接状态。

3. 配置主从架构

使用Docker启动一个主从架构的Redis集群非常方便,可以通过Docker Compose来管理和配置多个Redis实例。以下是详细的步骤:

3.1. 创建Docker Compose文件

首先,创建一个docker-compose.yml文件,定义主节点和从节点的配置。

version: '3'
networks:redis-net:
services:redis-master:image: redis:latestrestart: alwayscontainer_name: redis-masterports:- "6379:6379"volumes:- ./docker_volume/redis-cluster/redis-master.conf:/usr/local/etc/redis/redis.confnetworks:- redis-netcommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]redis-slave1:image: redis:latestrestart: alwayscontainer_name: redis-slave1ports:- "6380:6379"volumes:- ./docker_volume/redis-cluster/redis-slave1.conf:/usr/local/etc/redis/redis.confnetworks:- redis-netcommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]redis-slave2:image: redis:latestrestart: alwayscontainer_name: redis-slave2ports:- "6381:6379"volumes:- ./docker_volume/redis-cluster/redis-slave2.conf:/usr/local/etc/redis/redis.confnetworks:- redis-netcommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]

3.2. 创建Redis配置文件

为每个Redis实例创建相应的配置文件。

主节点配置文件(redis-master.conf)

bind 0.0.0.0
port 6379

从节点配置文件(redis-slave1.conf)

bind 0.0.0.0
port 6379
replicaof redis-master 6379
replica-read-only yes

从节点配置文件(redis-slave2.conf)

bind 0.0.0.0
port 6379
replicaof redis-master 6379
replica-read-only yes

3.3. 启动Redis主从集群

在包含docker-compose.yml文件的目录下,运行以下命令启动Redis主从集群:

docker-compose up -d

3.4. 验证主从状态

使用redis-cli连接到主节点或从节点,查看主从复制状态。

连接到主节点:

docker exec -it redis-master redis-cli

连接到从节点:

docker exec -it redis-slave1 redis-cli

查看主从状态

redis-cli中,使用INFO replication命令查看主从复制状态:

INFO replication

在输出中,查找以下字段:

  • role:主节点的值为master,从节点的值为slave
  • connected_slaves:主节点连接的从节点数量。
  • master_link_status:从节点的连接状态(up表示正常)

4. 主从架构的优缺点

4.1 优点

  • 高可用性:主节点故障时,从节点可以接管服务,确保系统的持续运行。
  • 读写分离:主节点负责写操作,从节点负责读操作,提高系统的读写性能。
  • 数据备份:从节点可以作为数据备份,防止数据丢失。

4.2 缺点

  • 数据一致性:主从复制是异步的,存在一定的数据延迟,可能导致数据不一致。
  • 单点故障:主节点仍然是单点故障,如果主节点故障且没有配置哨兵(Sentinel)或集群(Cluster),系统将无法写入数据。
  • 配置复杂性:配置和管理多个从节点会增加系统的复杂性。

5. 最佳实践

5.1 配置多个从节点

为了提高系统的可用性和读写性能,建议配置多个从节点。多个从节点可以分担读操作的压力,并在主节点故障时提供更多的备选节点。

5.2 使用哨兵(Sentinel)

为了解决主节点的单点故障问题,建议使用Redis的哨兵(Sentinel)机制。哨兵可以监控主节点和从节点的状态,并在主节点故障时自动进行故障转移,选举新的主节点。

5.3 配置持久化

为了防止数据丢失,建议在主节点和从节点上配置持久化机制(如RDB和AOF)。持久化机制可以在服务器重启或崩溃时恢复数据。

5.4 监控和告警

建议使用监控工具(如Prometheus、Grafana等)监控Redis的主从状态,并设置告警规则。及时发现和处理主从复制的问题,确保系统的稳定运行。

6. 总结

Redis的主从架构通过复制机制提供了高可用性、读写分离和数据备份的优势。通过合理配置和管理主从节点,可以在性能和可靠性之间找到平衡点。在实际应用中,建议结合哨兵机制和持久化配置,进一步提高系统的可用性和数据安全性。

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

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

相关文章

学成在线day08

部署静态页面 相关操作:https://mx67xggunk5.feishu.cn/wiki/FLozwxrrxihTJbkyTHgchDt4nUc nginx的最终配置文件: worker_processes 1; events {worker_connections 1024; } http {include mime.types;default_type application/octet-strea…

Oracle数据恢复—Oracle数据库sysaux文件损坏的数据恢复案例

Oracle数据库故障&分析: 一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求…

ArraList和LinkedList区别

文章目录 一、结构不同二、访问速度三、插入和删除操作的不同1、决定效率有两个因素:数据量和位置。2、普遍说法是“LinkedList添加删除快”,这里是有前提条件的 四、内存占用情况五、使用场景六、总结 一、结构不同 LinkedList:它基于双向链…

B站狂神说Mybatis+Spring+SpringMVC整合理解(ssm框架整合)

文章目录 0.写在前面(对mybatis,spring的理解)(不看可跳过)0.1 为什么需要mybatis0.2 为什么需要spring0.3为什么需要springmvc 1.新建ssmbuild数据库2.新建Maven项目3.初始化步骤3.1 配置下载maven依赖,构建资源导出3.2 连接数据库3.3建包&a…

Java抛出自定义运行运行

1.重新生成异常的.java文件 Empty:空 Exception:异常 加起来就是 空指针异常的文件 2.打上extends 运行的异常(异常的类型) 3.点击ctrlo,选着这两个快捷重写 4.在需要抛出异常的地方写上:th…

项目二技巧一

目录 nginx实现根据域名来访问不同的ip端口 配置Maven私服 快照版和发布版的区别 快照版本(Snapshot) 发布版本(Release) 导入发布版的父工程 理清楚授权规则 一.首先浏览器发送/manager/**路径请求 第二步:构造…

简单获取json预览

data: JSON 数据。 collapsedNodeLength: 对象或数组的长度超过此阈值时会折叠 deep: json路径深度超过此值时会折叠 showLineNumber: 显示左侧行号 showIcon: 显示图标。 virtual: 使用虚拟滚动 height: 使用虚拟滚动时列表的高度 itemHeight: 使用虚拟滚动时节点的高…

使用zabbix监控k8s

一、 参考文献 小阿轩yx-案例:Zabbix监控kubernetes云原生环境 手把手教你实现zabbix对Kubernetes的监控 二、部署经验 关于zabbix监控k8s,总体来说是分为两块内容,一是在k8s集群部署zabbix-agent和zabbix- proxy。二是在zabbix进行配置。…

第三方Express 路由和路由中间件

文章目录 1、Express 应用使用回调函数的参数: request 和 response 对象来处理请求和响应的数据。2、Express路由1.路由方法2.路由路径3.路由处理程序 3. 模块化路由4. Express中间件1.中间件简介2.中间件分类3.自定义中间件 1、Express 应用使用回调函数的参数&am…

港科夜闻 |香港科大推出 InvestLM生成式人工智能平台,支持金融中小企应用AI技术潜力...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大推出 InvestLM生成式人工智能平台,支持金融中小企应用AI技术潜力。香港科大商学院继去年研究团队成功开发本港首个专为金融界而设、应用于生成式人工智能(生成式AI)的开源大语言模型InvestLM后&#…

[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker pull线上镜像方式构建编译环境

T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求: 硬件: 设备容量备注硬盘>500G多版本系统测试,必须固态,否则编译卡死硬盘>300G单系统…

Git 快速入门:全面了解与安装步骤

Git 快速入门:全面了解与安装步骤 一、关于Git 1.1 简介 Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 于 2005 年创建,最初是为了更好地管理 Linux 内核开发而设计。 Git用于跟踪计算机文件的变化,特别是源代码文件…

基于Java Springboot奶茶点餐微信小程序

一、作品包含 源码数据库万字文档全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA,微信开发者工具 数据…

vulnhub靶场【哈利波特】三部曲之Fawkes

前言 这次的靶机与前面不同,这里涉及到缓冲区溢出等 这个靶机也让我知道薄弱点了,缓冲溢出这方面之前接触少,所以刚拿到这个靶机打开后,人蒙了,在网上查阅好多资料,也只是浅学一下,这里主要也是…

神经网络中常见的激活函数Sigmoid、Tanh和ReLU

激活函数在神经网络中起着至关重要的作用,它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景,选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数:Sigmoid、T…

基于Java Springboot蛋糕订购小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…

<项目代码>YOLOv8 红绿灯识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

ProtonBase 教育行业解决方案

01/方案概述 当前,大数据、云计算等技术正加速教育行业的数字化转型,教学模式从线下转向线上,传统教育企业向具有互联网性质的新型教育企业转变。在此背景下,教育企业亟需探索多源数据的融合扩展,以应对复杂的业务场景…

Mybatis:CRUD数据操作之删除一行数据

Mybatis基础环境准备请看:Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之单条删除数据 当用户点击了该按钮,就会将改行数据删除掉。那我们就需要思考,这种删除是根据什么进行删除呢?是通过主键id删除,因为id是…

力扣1382:将二叉搜索树便平衡

给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法,请你返回任意一种。 如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二…