Redis高并发高可用

1. 复制机制

在分布式系统中,为了解决单点问题,通常会将数据复制多个副本部署到其他机器,以满足故障恢复和负载均衡等需求。Redis提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础,后面的哨兵和集群都是在复制的基础上实现高可用的。

默认情况下,Redis实例都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。

2. 复制拓扑结构

Redis 的复制拓扑结构可以支持单层或多层复制关系,根据拓扑复杂性可以分为以下三种:一主一从、一主多从、树状主从结构。

  1. 一主一从结构

    一主一从结构是最简单的复制拓扑结构,用于主节点出现宕机时从节点提供故障转移支持。

    image.png

    当应用写命令并发量较高且需要持久化时,可以只在从节点上开启AOF,这样既保证数据安全性同时也避免了持久化对主节点的性能干扰。但需要注意的是,当主节点关闭持久化功能时,如果主节点脱机要避免自动重启操作。

    因为主节点之前没有开启持久化功能,自动重启后数据集为空,这时从节点如果继续复制主节点会导致从节点数据也被清空的情况,丧失了持久化的意义。安全的做法是在从节点上执行slaveof no one断开与主节点的复制关系,再重启主节点从而避免这一问题。

  2. 一主多从结构

    一主多从结构(又称为星形拓扑结构)使得应用端可以利用多个从节点实现读写分离。

    image.png

    对于读占比较大的场景,可以把读命令发送到从节点来分担主节点压力。同时在日常开发中如果需要执行一些比较耗时的读命令,如:keys、sort等,可以在从节点上执行,防止慢查询对主节点造成阻塞从而影响线上服务的稳定性。对于写并发量较高的场景,多个从节点会导致主节点写命令的多次发送,从而过度消耗网络带宽,同时也加重了主节点的负载,影响服务稳定性。

  3. 树状主从结构

    树状主从结构(又称为树状拓扑结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。通过引入复制中间层,可以有效降低主节点负载和需要传送给从节点的数据量。

    image.png

    数据写入节点A后会同步到B和C节点,B节点再把数据同步到D和E节点,实现一层一层的向下复制。当主节点需要挂载多个从节点时,为了避免对主节点的性能干扰,可以采用树状主从结构降低主节点压力。

3. 复制配置

建立复制

参与复制的Redis实例划分为主节点(master)和从节点(slave)。默认情况下,Redis实例都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。

配置复制的方式有以下三种:

  1. 在配置文件中加入slaveof {masterHost} {masterPort}随Redis启动生效。
  2. redis-server启动命令后加入--slaveof {masterHost} {masterPort}生效。
  3. 直接使用命令:slaveof {masterHost} {masterPort}生效。

综上所述,slaveof命令在使用时,可以运行期动态配置,也可以提前写到配置文件中。

比如:在机器上启动两台Redis实例,分别是6379和6380两个端口。

image.png

image.png

slaveof本身是异步命令,执行slaveof命令时,节点只保存主节点信息后返回,后续复制流程在节点内部异步执行。主从节点复制成功建立后,可以使用info replication命令查看复制相关状态。

断开复制

slaveof命令不但可以建立复制,还可以在从节点执行slaveof no one来断开与主节点的复制关系。例如在6881节点上执行slaveof no one来断开复制。

image.png

断开复制主要流程:

  1. 断开与主节点复制关系。
  2. 从节点晋升为主节点。

从节点断开复制后并不会抛弃原有数据,只是无法再获取主节点上的数据变化。

通过slaveof命令还可以实现切主操作,所谓切主是指把当前从节点对主节点的复制切换到另一个主节点。执行slaveof {newMasterIp} {newMasterPort}命令即可,例如把6881节点从原来的复制6880节点变为复制6879节点。

image.png

切主内部流程如下:

  1. 断开与旧主节点复制关系。
  2. 与新主节点建立复制关系。
  3. 删除从节点当前所有数据。
  4. 对新主节点进行复制操作。
只读

默认情况下,从节点使用slave-read-only=yes配置为只读模式。由于复制只能从主节点到从节点,对于从节点的任何修改主节点都无法感知,修改从节点会造成主从数据不一致。因此建议线上不要修改从节点的只读模式。

image.png

传输延迟

主从节点一般部署在不同机器上,复制时的网络延迟需要考虑。Redis提供了repl-disable-tcp-nodelay参数用于控制是否关闭TCP_NODELAY,默认关闭。说明如下:

image.png

当关闭时,主节点产生的命令数据无论大小都会及时地发送给从节点,这样主从之间延迟会变小,但增加了网络带宽的消耗。适用于主从之间网络环境良好的场景,如同机架或同机房部署。

当开启时,主节点会合并较小的TCP数据包从而节省带宽。默认发送时间间隔取决于Linux的内核,一般默认为40毫秒。这种配置节省了带宽但增大主从之间的延迟。适用于主从网络环境复杂或带宽紧张的场景,如跨机房部署。

总结

Redis的高并发高可用性主要通过其复制机制实现,支持多种复制拓扑结构和灵活的配置选项。复制流程确保数据在主从节点间的一致性,从而实现故障转移、读写分离和负载均衡。了解和配置Redis的复制机制,对于构建高可用的分布式系统至关重要。

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

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

相关文章

Unity 6预览版即将增加对visionOS 2的支持

Unity表示,届时将能帮助你创建更为身临其境的体验,并通过以下主要功能实现更大的视觉多样性: 支持混合形状,以实现更广泛的几何应用,包括变形和平滑,自然的动画。 立体渲染目标,帮助用户实现广…

长亭网络通信基础

长亭笔试之前就已经学过一遍了 这算温故而知新吧 TCP/IP 首先我在这里默写一下之前的7层和4层 应用层 应 【表示层 数据格式转换 传 【会话层 …

Vue 3 的常用响应式 API 总结

在vue3.x版本中,setup函数就是vue3 组合式API的入口,换句话说就是在setup中的写的代码,就是组合式API 的写法。下面总结常用的与响应式相关的api, 帮助您在 Vue 3 中创建响应式应用程序。 reactive() 和 ref(): 创建响应式对象和…

课设--学生成绩管理系统(一)

欢迎来到 Papicatch的博客 文章目录 🍉技术核心 🍉引言 🍈标识 🍈背景 🍈项目概述 🍈 文档概述 🍉可行性分析的前提 🍈项目的要求 🍈项目的目标 🍈…

Android 蓝牙配对Settings应用里面的简要流程记录

Android 蓝牙配对Settings应用里面的简要流程记录 文章目录 Android 蓝牙配对Settings应用里面的简要流程记录一、前言二、Settings蓝牙配对的关键代码1、接收蓝牙请求的地方 AndroidManifest.xml2、BluetoothPairingRequest3、BluetoothPairingService4、BluetoothPairingDial…

神经网络-文本-图像-音频-视频基础知识

文本、图像、音频和视频是数字媒体中的四种基本类型,它们各有不同的组成、单位和基础知识。下面我将逐一解释: 文本 组成:文本由字符组成,可以表示字母、数字、标点符号、特殊字符等。单位:文本的单位通常是字符&#…

宿舍用电管理模块一进三出的升级改造

宿舍用电管理模块一进三出石家庄光大远通电气有限公司产品在高校日常管理工作中,宿舍管理是一项重要工作。宿舍管理内容复杂,而且涉及学生的日常生活,意义重大。其中,学生宿舍内漏电,超负荷用电,违规用电等现象一直是困扰后勤管理的普遍问题。随着学生日常生活方式以及生活用品…

驱动开发(五):Linux内核定时器

驱动开发系列文章: 驱动开发(一):驱动代码的基本框架 驱动开发(二):创建字符设备驱动 驱动开发(三):内核层控制硬件层 驱动开发(四&#xff…

移动端超超超详细知识点总结(Part4)

rem基础 1. rem单位 rem (root em)是一个相对单位,类似于em,em是父元素字体大小。不同的是rem的基准是相对于html元素的字体大小。比如,根元素(html)设置font-size12px; 非根元素设置width:2rem;则换成px表示就是24p…

数据防泄漏的六个步骤|数据防泄漏软件有哪些

在当前复杂多变的网络安全环境下,数据防泄漏软件成为了企业信息安全架构中不可或缺的一环。下面以安企神软件为例,告诉你怎么防止数据泄露,以及好用的防泄露软件。 1. 安企神软件 安企神软件是当前市场上备受推崇的企业级数据防泄漏解决方案…

CPU中的寄存器CPU能理解的指令(指令集)

CPU中的寄存器 寄存器有很多种。如指令寄存器,专门存储指令 问:CPU的寄存器存的是什么? 答:CPU寄存器是中央处理器(CPU)内部的一小部分高速存储资源,用于快速访问和存储各种类型的数据和信息。以下是CPU…

Nvidia TensorRT系列01-TensorRT的功能1

Nvidia TensorRT系列01-TensorRT的功能1 B站:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) 博客:肆十二-CSDN博客 问答:(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com) C和Python API TensorRT的API同时支持C和Pyth…

【网络协议栈】TCP/IP相关知识点收集

TCP/IP知识点收集 1 TCP分段 在TCP/IP协议栈中,“MSS”(Maximum Segment Size)是一个关键参数,它指定了TCP协议在发送数据时可以使用的最大数据段(segment)的大小。这个参数是TCP连接建立时通过三次握手&…

web前端任职条件:全面解析

web前端任职条件:全面解析 在当今数字化快速发展的时代,Web前端技术已经成为互联网行业不可或缺的一部分。作为一名Web前端开发者,需要具备哪些任职条件呢?本文将从四个方面、五个方面、六个方面和七个方面为您深入剖析。 四个方…

【ARM-Linux篇】智能家居语音模块配置

1. pin脚配置: 2. 命令词自定义基本信息: 3. 命令词自定控制详情: • 测试:串口模块可先通过串口助手验证每个指令的准确性, 然后运行wiringOP中的serialTest程序(需把/dev/ttyS2改成/dev/ttyS5) 然后语音接收到指令后(比如喊你好…

Ionic 复选框:实现与应用详解

Ionic 复选框:实现与应用详解 Ionic 是一个强大的开源框架,用于构建高性能、高质量的移动和网页应用程序。它结合了 Angular 的强大功能和 Cordova 的设备访问能力,使得开发者能够轻松地创建跨平台的应用程序。在 Ionic 应用中,复…

10大wordpress外贸主题

手动工具wordpress外贸模板 适合生产套筒扳、管钳、工具箱、斧子、锤子、防爆工具、螺丝刀、扳手等手动工具的厂家。 https://www.jianzhanpress.com/?p4806 Invisible Trade WP外贸网站模板 WordPress Invisible Trade外贸网站模板,做进出口贸易公司官网的word…

开源高效API管理工具:RAP

RAP:简化API开发,提升团队协作效率- 精选真开源,释放新价值。 概览 RAP(RESTful API Project)是一个开源的API管理工具,由阿里巴巴团队开发并维护。它旨在帮助前后端开发人员通过一个统一的平台来设计、开…

软件方案评审与模块优化:从FOC模块出发的电控平台建设

一、背景 洞悉模块发展趋势,定制行业应用特点,明确优化方向与阶段性目标 随着科技进步的飞速发展,模块化设计已成为众多行业产品开发的核心理念。无论是软件系统、硬件组件,还是复杂系统中的功能模块,都需要对其发展…

DVR系统设计的大致思路和模块划分

DVR系统设计的大致思路和模块划分 1. 源由2. 设计步骤2.1 需求分析2.2 系统架构设计2.3 硬件设计与选择2.4 软件开发2.5 测试与调试2.6 部署与运维2.7 持续优化 3. 模块切割3.1 摄像头3.2 视频处理单元3.3 存储系统3.4 网络模块3.5 视频编码/解码3.6 接口与连接3.7 控制与操作3…