Redis主从架构
Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储系统,广泛应用于缓存、消息队列、实时分析等场景。为了提高系统的可用性、可靠性和读写性能,Redis提供了主从复制(Master-Slave Replication)机制。下面将深入探讨Redis的主从架构,包括其工作原理、配置方法、优缺点以及最佳实践。
1. 为什么需要主从架构?
在生产环境中,单个Redis实例可能无法满足高并发、高可用性的需求。主从架构通过将数据复制到多个节点,提供了以下优势:
- 高可用性:当主节点(Master)出现故障时,从节点(Slave)可以接管服务,确保系统的持续运行。
- 读写分离:主节点负责写操作,从节点负责读操作,从而提高系统的读写性能。
- 数据备份:从节点可以作为数据备份,防止数据丢失。

2. 主从架构的工作原理
Redis的主从架构基于复制(Replication)机制,主节点将数据变更操作同步到从节点。以下是主从复制的基本工作流程:
2.1 初始同步(Full Resynchronization)
当从节点首次连接到主节点时,会进行一次全量同步:
- 从节点发送SYNC命令:从节点向主节点发送
SYNC命令,请求全量同步。 - 主节点生成RDB文件:主节点生成一个RDB快照文件,并将其发送给从节点。
- 从节点加载RDB文件:从节点接收并加载RDB文件,完成数据初始化。
- 主节点发送缓冲区数据:主节点将生成RDB文件期间产生的写操作命令缓冲区数据发送给从节点。
2.2 增量同步(Partial Resynchronization)
在初始同步完成后,主节点和从节点之间会进行增量同步:
- 主节点记录写操作:主节点将每个写操作记录到一个缓冲区(Replication Buffer)中。
- 从节点发送PSYNC命令:从节点定期向主节点发送
PSYNC命令,请求增量同步。 - 主节点发送增量数据:主节点将缓冲区中的增量数据发送给从节点。
2.3 心跳机制
主节点和从节点之间通过心跳机制保持连接状态:
- 主节点发送心跳:主节点定期向从节点发送心跳包,确认连接状态。
- 从节点发送心跳:从节点定期向主节点发送心跳包,确认连接状态。
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的主从架构通过复制机制提供了高可用性、读写分离和数据备份的优势。通过合理配置和管理主从节点,可以在性能和可靠性之间找到平衡点。在实际应用中,建议结合哨兵机制和持久化配置,进一步提高系统的可用性和数据安全性。
相关文章:
Redis主从架构
Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储系统,广泛应用于缓存、消息队列、实时分析等场景。为了提高系统的可用性、可靠性和读写性能,Redis提供了主从复制(Master-Slave Replication…...
logback动态获取nacos配置
文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog,使用的时候、特别是部署的时候,需要改环境&#…...
KETTLE安装部署V2.0
一、前置准备工作 JDK:下载JDK (1.8),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中。如果你的环境中已存在,可以跳过这步。KETTLE(8.2)压缩包:LHR提供关闭防火墙…...
[RabbitMQ] 保证消息可靠性的三大机制------消息确认,持久化,发送方确认
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
aws服务--机密数据存储AWS Secrets Manager(1)介绍和使用
一、介绍 1、简介 AWS Secrets Manager 是一个完全托管的服务,用于保护应用程序、服务和 IT 资源中的机密信息。它支持安全地存储、管理和访问应用程序所需的机密数据,比如数据库凭证、API 密钥、访问密钥等。通过 Secrets Manager,你可以轻松管理、轮换和访问这些机密信息…...
Java设计模式笔记(一)
Java设计模式笔记(一) (23种设计模式由于篇幅较大分为两篇展示) 一、设计模式介绍 1、设计模式的目的 让程序具有更好的: 代码重用性可读性可扩展性可靠性高内聚,低耦合 2、设计模式的七大原则 单一职…...
Unity3d C# 实现一个基于UGUI的自适应尺寸图片查看器(含源码)
前言 Unity3d实现的数字沙盘系统中,总有一些图片或者图片列表需要点击后弹窗显示大图,这个弹窗在不同尺寸分辨率的图片查看处理起来比较麻烦,所以,需要图片能够根据容器的大小自适应地进行缩放,兼容不太尺寸下的横竖图…...
【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解
vuejs中实现数据的劫持,v2中使用的是Object.defineProperty()来实现的,在大版本v3中彻底重写了这部分,使用了proxy这个数据代理的方式,来修复了v2中对数组和对象的劫持的遗留问题。 proxy是什么 Proxy 用于修改某些操作的默认行为࿰…...
w~视觉~3D~合集3
我自己的原文哦~ https://blog.51cto.com/whaosoft/12538137 #SIF3D 通过两种创新的注意力机制——三元意图感知注意力(TIA)和场景语义一致性感知注意力(SCA)——来识别场景中的显著点云,并辅助运动轨迹和姿态的预测…...
IT服务团队建设与管理
在 IT 服务团队中,需要明确各种角色。例如系统管理员负责服务器和网络设备的维护与管理;软件工程师专注于软件的开发、测试和维护;运维工程师则保障系统的稳定运行,包括监控、故障排除等。通过清晰地定义每个角色的职责࿰…...
一文学习开源框架OkHttp
OkHttp 是一个开源项目。它由 Square 开发并维护,是一个现代化、功能强大的网络请求库,主要用于与 RESTful API 交互或执行网络通信操作。它是 Android 和 Java 开发中非常流行的 HTTP 客户端,具有高效、可靠、可扩展的特点。 核心特点 高效…...
自研芯片逾十年,亚马逊云科技Graviton系列芯片全面成熟
在云厂商自研芯片的浪潮中,亚马逊云科技无疑是最早践行这一趋势的先驱。自其迈出自研芯片的第一步起,便如同一颗石子投入平静的湖面,激起了层层涟漪,引领着云服务和云上算力向着更高性能、更低成本的方向演进。 早在2012年&#x…...
Stable Diffusion 3 部署笔记
SD3下载地址:https://huggingface.co/stabilityai/stable-diffusion-3-medium/tree/main https://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium comfyui 教程: 深度测评:SD3模型表现如何?实用教程助你玩转Stabl…...
微信小程序WXSS全局样式与局部样式的使用教程
微信小程序WXSS全局样式与局部样式的使用教程 引言 在微信小程序的开发中,样式的设计与实现是提升用户体验的关键部分。WXSS(WeiXin Style Sheets)作为微信小程序的样式表语言,不仅支持丰富的样式功能,还能通过全局样式与局部样式的灵活运用,帮助开发者构建美观且易于维…...
Docker 部署 MongoDB
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🍃 vue-uniapp-template 🌺 仓库主页: GitCode💫 Gitee …...
Unity图形学之法线贴图原理
1.正常贴图:RGBA 4通道 每个通道取值范围 0-255 贴图里面取值是 0-1 2.法线贴图:法线怎么存入正常贴图的过程 每个通道里面存储的是一个向量(x,y,z,w) 通常我们会对应xyzw为rgba 存储值的范围也是0-1向量的取值范围是 -1到1法线怎么存入正常贴图的过程&…...
爬虫开发(5)如何写一个CSDN热门榜爬虫小程序
笔者 綦枫Maple 的其他作品,欢迎点击查阅哦~: 📚Jmeter性能测试大全:Jmeter性能测试大全系列教程!持续更新中! 📚UI自动化测试系列: SeleniumJava自动化测试系列教程❤ 📚…...
JVM系列之OOM观测准备
OOM, 全称 “Out Of Memory”,即内存用完的意思。JVM 因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时(可分配内存大于需要分配的内存), 就会抛出 java.lang.OutOfMemoryError。在实际的生产应用中,一旦…...
Qt | 开发技能提升档次哈
点击上方"蓝字"关注我们 01、Creator常用快捷键 >>> F1 查看帮助 F2 跳转到函数定义 Shift+F2 声明和定义之间切换 F3 查找下一个 F4 头文件和源文件之间切换 Ctrl+1 欢迎模式 Ctrl+2 编辑模…...
D79【 python 接口自动化学习】- python基础之HTTP
day79 requests模块发送请求 学习日期:20241125 学习目标:http定义及实战 -- requests模块进行get请求带参数&requests模块进行post请求 学习笔记: requests模块进行get请求 import requestsparams{"shouji":"130999…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
