Redis轻松添加从节点:零阻塞、零烦恼,系统性能再飙升

news2024/10/6 14:36:19

点击上方蓝字关注我

09d889c6c249d65ab0b1ed3cbd1cdeac.png

生成环境的Redis有时需要替换或添加从节点,如果此时主库较大,添加从节点时将可能因为主节点在做bgsave数据备份时使得主库压力大,从而引起其他操作变慢,进而出现阻塞等操作。那么有什么方法可以尽最大程度地减少对主节点的阻塞和影响呢?

1.   措施

当向Redis主节点添加从节点时,可以采取以下措施以最大程度地减少对主节点的阻塞和影响:

  • 使用初始同步:在添加从节点之前,可以先使用初始同步功能将主节点的数据复制到从节点。这样,在将从节点添加到主节点之前,从节点已经具有与主节点相同的数据集。通过这种方式,可以避免在添加从节点时对主节点进行复制,减少对主节点的阻塞。

  • 使用复制积压缓冲区:Redis提供了复制积压缓冲区(repl-backlog)的配置选项。通过适当调整该选项的大小,可以在添加从节点时允许主节点保存一定数量的复制命令,而不会阻塞主节点。复制积压缓冲区可以在一定程度上缓解主节点与从节点之间的网络延迟和传输速率不匹配的问题。

  • 配置合理的复制延迟:可以通过调整从节点的复制延迟(replica-replica-lag)来减轻主节点的压力。将复制延迟设置为适当的值,可以使从节点稍微滞后于主节点,从而减少对主节点的复制负载。

  • 增加主节点的资源:如果主节点的负载较重,而添加从节点会进一步加重主节点的负担,可以考虑增加主节点的资源,如增加内存、CPU等。这样可以提高主节点的处理能力,使其能够更好地处理复制请求和其他客户端请求。

  • 控制并发复制连接数:可以通过限制从节点的并发复制连接数,以控制对主节点的并发复制请求。通过适当设置最大连接数,可以确保主节点不会过载。

  • 调整其他复制相关参数: 通过加大复制相关参数的值,可以使得在大数据量复制过程中不会因为时间过长或数据在缓冲区中被刷掉导致初始化失败。

2.  具体操作

2.1  配置复制积压缓冲区

通过配置复制积压缓冲区大小,我们可以在添加从节点时缓解主从节点之间的网络延迟。

在主节点的redis.conf文件中添加以下配置:

repl-backlog-size 10mb  # 适当调整大小,根据需求设置

或 通过config set 命令进行设置

config set repl-backlog-size 10mb

这个缓冲区将保存历史复制数据,确保即使在添加从节点期间也能保留完整的复制记录。

2.2  配置复制延迟

调整从节点的复制延迟,以确保从节点稍微滞后于主节点,减轻主节点的复制压力。执行以下命令:

CONFIG SET replica-replica-lag 5  # 适当调整延迟时间

这样可以确保从节点不会对主节点造成过大的负担。

2.3 增加主节点资源

如果主节点负载较重,考虑增加主节点的资源。增加内存、CPU等可以提高主节点的处理能力,使其更好地处理复制请求和其他客户端请求。不过,在现实情况下,一般没有操作空间,因为主库主机在使用,无法扩容CPU或内存(非绝对,有的虚拟化方式可以做到在线扩容)

2.4 控制并发复制连接数

通过限制从节点的并发复制连接数,可以避免主节点过载。在从节点上执行以下命令:

CONFIG SET replica-max-replication-jobs 5  # 适当调整连接数

这有助于确保添加从节点时的流量控制,避免对主节点的并发请求过多。

2.5 从节点的磁盘写入延迟

通过配置repl-diskless-sync-delay参数,可以调整从节点在同步期间的磁盘写入频率。这对于降低从节点对磁盘的写入负载很有帮助。

CONFIG SET repl-diskless-sync-delay 5  # 适当调整延迟时间

2.6 从节点的最大内存限制

Redis从节点可以配置一个最大使用的内存量,以确保不会占用过多系统资源。

CONFIG SET maxmemory 8gb  # 适当调整内存限制

2.7  从节连接超时时间设置

根据系统的需要,你可能需要调整从节点的连接超时等设置。

CONFIG SET repl-timeout 60  # 适当调整超时时间

2.8 从节点检活时间修改

repl-ping-slave-period:该参数定义主节点定期检查从节点是否存活的时间间隔。增加这个间隔可能减轻主节点的负载,但会使主从节点之间的同步变得更加滞后。

CONFIG SET repl-ping-slave-period 60  # 适当调整间隔时间

2.9 复制积压缓冲区存活时间

repl-backlog-ttl:该参数定义复制积压缓冲区中数据的最大存活时间。适当调整可以在一定程度上控制主从节点之间的延迟。

CONFIG SET repl-backlog-ttl 3600  # 适当调整 TTL 时间

2.10 repl-disable-tcp-nodelay:

默认情况下,Redis使用TCP_NODELAY选项来减少传输延迟。但在某些情况下,你可能希望禁用这个选项以减轻网络负担。

CONFIG SET repl-disable-tcp-nodelay yes

2.11 复制刷盘同步参数设置

repl-diskless-sync:在磁盘同步时,Redis默认会写入一个临时文件。通过启用磁盘同步,你可以选择避免写入磁盘。

CONFIG SET repl-diskless-sync yes

2.12 从节点写入延迟

涉及min-replicas-to-write和min-replicas-max-lag,这两个参数用于在高可用性(HA)设置中,定义最小数量的从节点确认写入操作以及最大的允许延迟。

CONFIG SET min-replicas-to-write 3
CONFIG SET min-replicas-max-lag 10

3.  建议

Redis 单个实例内存使用过大可能会导致系统性能下降,甚至影响整个系统的稳定性。以下是一些方式可以避免Redis单个实例内存使用过大:

  • 设置合理的过期时间:如果你的数据集中有很多过期的键,确保设置了合理的过期时间,以便Redis可以自动清理不再需要的键。使用 EXPIRE 命令或在 SET 命令中添加 EX 选项来设置过期时间。

  • 优化数据结构:选择适当的数据结构,以减小存储空间。例如,如果可以使用 HASH 代替 STRING,或者使用 ZSET 代替 SET,就可以有效地减小内存占用。

  • 使用合理的数据存储方式:使用 HASH 或 ZSET 等数据结构存储多个相关字段,而不是使用多个独立的 STRING 类型。这可以减少内存的开销。

  • 启用压缩功能:Redis 6.0 以后的版本支持对字符串进行压缩。启用压缩可以减小存储空间,特别是当存储的是文本数据时。

# 在redis.conf文件中启用压缩
activate-key-compression yes
  • 分片(Sharding):将数据分散到多个Redis实例中,以减小每个实例的内存使用。这种方式需要对应用程序进行修改以支持分片。

  • 使用内存淘汰策略:Redis 提供了多种内存淘汰策略,例如 volatile-lru、allkeys-lru、volatile-ttl 等。选择适合你业务场景的淘汰策略,确保及时清理不再需要的键。

  • 限制每个数据集的大小:设置 maxmemory 参数,限制Redis使用的内存总量。当内存达到这个限制时,Redis会根据所配置的淘汰策略自动删除一些键。

# 在redis.conf文件中设置最大内存限制


maxmemory 8gb
  • 做好监控和优化:定期监控Redis的内存使用情况,使用Redis自带的 INFO 命令或者监控工具。根据监控结果,及时采取优化措施。

51d15022fbc1b7ea2979c3e7b818aabf.png

往期精彩回顾

1.  MySQL高可用之MHA集群部署

2.  mysql8.0新增用户及加密规则修改的那些事

3.  比hive快10倍的大数据查询利器-- presto

4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

5.  PostgreSQL主从复制--物理复制

6.  MySQL传统点位复制在线转为GTID模式复制

7.  MySQL敏感数据加密及解密

8.  MySQL数据备份及还原(一)

9.  MySQL数据备份及还原(二)

33b9624e73f156af70dbf7270b17385d.png

扫码关注     

ed153886dc3ce958c448159a88aa096b.jpeg

81a09d315bf19cd363c66db8fb43fdd8.png

4071e0a60c0068cbfc63bf66afbeb303.png

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

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

相关文章

【机器学习】034_多层感知机Part.2_从零实现多层感知机

一、解决XOR问题 1. 回顾XOR问题: 如图,如何对XOR面进行分割以划分四个输入 对应的输出 呢? 思路:采用两个分类器分类,每次分出两个输入 ,再借助这两个分类从而分出 。 即采用同或运算,当两…

【腾讯云 HAI域探秘】高性能服务器引领AI革新浪潮:从AI绘画、知识问答到PyTorch图像分类、视频检测的全方位探索

目录 1 HAI(高性能应用服务)简介2 HAI的应用场景2.1 HAI在AI作画中的灵活性与效率2.2 深入探索LLM语言模型的应用与性能2.3 HAI支持的AI模型开发环境与工具 3 基于stable difussio的AI 绘画应用实践3.1 使用AI模型中的stable diffusion模型服务3.2 设置和…

ElasticSearch在Windows上的下载与安装

Elasticsearch是一个开源的分布式搜索和分析引擎,它可以帮助我们快速地搜索、分析和处理大量数据。Elasticsearch能够快速地处理结构化和非结构化数据,支持全文检索、地理位置搜索、自动补全、聚合分析等功能,能够承载各种类型的应用&#xf…

PostgreSQL数据库结合内网穿透实现公网远程连接

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统(RDBMS),下…

python的socket模块以及通信相关学习笔记

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯(最初设计是为了是使同一台计算机中的不同进程进行信息传递通信),最后拓展到可以使网络上两台计…

LangChain 5易速鲜花内部问答系统

展示了一个完整的问答系统的实现,使用了Flask来构建Web界面、langchain进行文档处理和检索,以及OpenAI的语言模型。代码的复杂性在于集成了多种高级技术和处理大型数据集和语言模型。 LangChain 实现给动物取名字,LangChain 2模块化prompt t…

8 Redis与Lua

LUA脚本语言是C开发的,类似存储过程,是为了实现完整的原子性操作,可以用来补充redis弱事务的缺点. 1、LUA脚本的好处 2、Lua脚本限流实战 支持分布式 import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis…

开源集群管理系统对比分析:Kubernetes 与 Apache Mesos

集群管理系统是关键的软件解决方案,可以在互连机器网络中有效分配和利用计算资源。毫无疑问,它们通过确保可扩展性、高可用性和有效的资源管理在现代计算中发挥着至关重要的作用,这使得它们对于运行复杂的应用程序、管理数据中心以及进一步增…

C语言中的指针(上)

目录 一、基本概念 1.变量的存储空间 2.定义指针 3.引用与解引用 二、指针的算术运算、类型以及通用指针 1.指针的算数运算 2.指针类型以及通用型指针 三、指向指针的指针(pointers to pointers) 四、函数传值以及传引用 1.局部变量 2.从存储地…

CleanMyMac X4.16免费版mac电脑一键清理电脑垃圾工具

但是,我最近发现随着使用时间的增加,一些奇奇怪怪的文件开始占据有限的磁盘空间,存储空间变得越来越小,系统占用空间越来越大,越来越多的无效文件开始影响我电脑的运行速度。 Mac的文件管理方式和Windows不太一样&…

竞赛 题目:基于深度学习的人脸表情识别 - 卷积神经网络 竞赛项目 代码

文章目录 0 简介1 项目说明2 数据集介绍:3 思路分析及代码实现3.1 数据可视化3.2 数据分离3.3 数据可视化3.4 在pytorch下创建数据集3.4.1 创建data-label对照表3.4.2 重写Dataset类3.4.3 数据集的使用 4 网络模型搭建4.1 训练模型4.2 模型的保存与加载 5 相关源码6…

Linux进程通信——IPC、管道、FIFO的引入

进程间的通信——IPC 进程间通信 (IPC,InterProcess Communication) 是指在不同进程之间传播或交换信息。 IPC的方式通常有管道 (包括无名管道和命名管道) 、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 …

怎么在echarts图上左右滑动切换数据区间

说在前面 不管前端还是后端,大家或多或少都了解使用过echarts图表吧,很多时候我们只是需要展示指定区间的数据,但有时我们希望在图表上能够轻松地切换数据的展示区间,以便更清晰地观察特定时间段或区域的变化。在本文中&#xff0…

[机缘参悟-119] :反者道之动与阴阳太极

目录 一、阴阳对立、二元对立的规律 1.1 二元对立 1.2 矛盾的对立与统一 二、阴阳互转、阴阳变化、变化无常 》无序变化和有序趋势的规律 三、阴阳合一、佛魔一体、善恶同源 四、看到积极的一面 五、反者道之动 5.1 概述 5.2 "否极泰来" 5.3 “乐极生悲”…

grafana面板介绍

grafana 快速使用 背景 随着公司业务的不断发展,紧接来的是业务种类的增加、服务器数量的增长、网络环境的越发复杂以及发布更加频繁,从而不可避免地带来了线上事故的增多,因此需要对服务器到应用的全方位监控,提前预警&#xf…

面试题c/c++ --STL 算法与数据结构

1.6 STL 模板 模板底层实现:编译器会对函数模板进行两次编译, 在声明的地方对模板代码本身进行编译, 在调用的地方对参数替换后的代码进行编译。 模板传参分析 模板重载 vector 是动态空间, 随着元素的加入, 它的内…

人工智能给我们的生活带来了巨大的影响?

1. 人工智能从哪些方面给我们带来了影响? 人工智能出现,极大地影响了人类的生活,下面是人工智能所影响的领域: 1. 日常生活 智能家居: AI驱动的设备,如智能扬声器、灯光、恒温器,正在改变我们与家居环境的…

.NET 8.0 AOT 教程 和使用 和 .NET ORM 操作

NET AOT编译是一种.NET运行时的编译方式,它与传统的JIT编译方式不同。在传统的JIT编译中,.NET应用程序的代码在运行时才会被编译成本地机器码,而在AOT编译中,代码在运行之前就被提前编译成本地机器码。这样可以在代码运行的时候不…

文件上传漏洞(CVE-2022-23043)

简介 CVE-2022-23043是一个与Zenario CMS 9.2文件上传漏洞相关的安全漏洞。该漏洞被定义为文件的不加限制上传,攻击者可以利用这个漏洞上传webshell以执行任意命令。利用这个漏洞的攻击者暂无特定情况。要利用此漏洞,攻击者首先需要访问Zenario CMS的管…

Java实现拼图小游戏

1、了解拼图游戏基本功能: 拼图游戏内容由若干小图像块组成的,通过鼠标点击图像块上下左右移动,完成图像的拼凑。 2、拼图游戏交互界面设计与开发: 通过创建窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 &#xff…