您当前的位置:首页 > 电脑百科 > 数据库 > Redis

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

时间:2023-11-23 12:52:14  来源:微信公众号  作者:数据库干货铺

一、措施

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

  • 使用初始同步:在添加从节点之前,可以先使用初始同步功能将主节点的数据复制到从节点。这样,在将从节点添加到主节点之前,从节点已经具有与主节点相同的数据集。通过这种方式,可以避免在添加从节点时对主节点进行复制,减少对主节点的阻塞。
  • 使用复制积压缓冲区:Redis提供了复制积压缓冲区(repl-backlog)的配置选项。通过适当调整该选项的大小,可以在添加从节点时允许主节点保存一定数量的复制命令,而不会阻塞主节点。复制积压缓冲区可以在一定程度上缓解主节点与从节点之间的网络延迟和传输速率不匹配的问题。
  • 配置合理的复制延迟:可以通过调整从节点的复制延迟(replica-replica-lag)来减轻主节点的压力。将复制延迟设置为适当的值,可以使从节点稍微滞后于主节点,从而减少对主节点的复制负载。
  • 增加主节点的资源:如果主节点的负载较重,而添加从节点会进一步加重主节点的负担,可以考虑增加主节点的资源,如增加内存、CPU等。这样可以提高主节点的处理能力,使其能够更好地处理复制请求和其他客户端请求。
  • 控制并发复制连接数:可以通过限制从节点的并发复制连接数,以控制对主节点的并发复制请求。通过适当设置最大连接数,可以确保主节点不会过载。
  • 调整其他复制相关参数: 通过加大复制相关参数的值,可以使得在大数据量复制过程中不会因为时间过长或数据在缓冲区中被刷掉导致初始化失败。

二、具体操作

1、配置复制积压缓冲区

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

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

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

或 通过config set 命令进行设置。

config set repl-backlog-size 10mb

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

2、配置复制延迟

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

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

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

3、增加主节点资源

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

4、控制并发复制连接数

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

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

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

5、从节点的磁盘写入延迟

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

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

6、从节点的最大内存限制

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

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

7、从节连接超时时间设置

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

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

8、从节点检活时间修改

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

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

9、复制积压缓冲区存活时间

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

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

10、repl-disable-tcp-nodelay:

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

CONFIG SET repl-disable-tcp-nodelay yes

11、复制刷盘同步参数设置

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

CONFIG SET repl-diskless-sync yes

12、从节点写入延迟

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

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

三、建议

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 命令或者监控工具。根据监控结果,及时采取优化措施。


Tags:Redis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证
Redis 官方于21日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause...【详细内容】
2024-03-27  Search: Redis  点击:(11)  评论:(0)  加入收藏
Redis“叛逃”开源,得罪了几乎所有人
内存数据库供应商Redis近日在开源界砸下了一块“巨石”。Redis即将转向双许可模式,并实施更为严格的许可条款。官方对此次变更的公告直截了当:从Redis 7.4版本开始,Redis将在Re...【详细内容】
2024-03-25  Search: Redis  点击:(9)  评论:(0)  加入收藏
如何使用 Redis 实现消息队列
Redis不仅是一个强大的内存数据存储系统,它还可以用作一个高效的消息队列。消息队列是应用程序间或应用程序内部进行异步通信的一种方式,它允许数据生产者将消息放入队列中,然...【详细内容】
2024-03-22  Search: Redis  点击:(17)  评论:(0)  加入收藏
Redis不再 “开源”
Redis 官方今日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开...【详细内容】
2024-03-21  Search: Redis  点击:(8)  评论:(0)  加入收藏
在Redis中如何实现分布式锁的防死锁机制?
在Redis中实现分布式锁是一个常见的需求,可以通过使用Redlock算法来防止死锁。Redlock算法是一种基于多个独立Redis实例的分布式锁实现方案,它通过协调多个Redis实例之间的锁...【详细内容】
2024-02-20  Search: Redis  点击:(47)  评论:(0)  加入收藏
手动撸一个 Redis 分布式锁
大家好呀,我是楼仔。今天第一天开工,收拾心情,又要开始好好学习,好好工作了。对于使用 Java 的小伙伴,其实我们完全不用手动撸一个分布式锁,直接使用 Redisson 就行。但是因为这些...【详细内容】
2024-02-19  Search: Redis  点击:(39)  评论:(0)  加入收藏
工作中Redis有哪些好用的运维工具
工作中使用 Redis 时,如果大家公司没有专业运维,可能开发人员就会面临这些运维的工作,包括 Redis 的运行状态监控,数据迁移,主从集群、切片集群的部署和运维等等。本文我就从这三...【详细内容】
2024-02-06  Search: Redis  点击:(55)  评论:(0)  加入收藏
深入Go底层原理,重写Redis中间件实战
Go语言以其简洁、高效和并发性能而闻名,深入了解其底层原理可以帮助我们更好地利用其优势。在本文中,我们将探讨如何深入Go底层原理,以及如何利用这些知识重新实现一个简单的Re...【详细内容】
2024-01-25  Search: Redis  点击:(66)  评论:(0)  加入收藏
批量执行Redis命令的四种方式!
前言在我们的印象中Redis命令好像都是一个个单条进行执行的,如果有人问你如何批量执行Redis命令,你能回答的上吗,或者说能答出几种方式呢?最容易想到的是Redis的一些批量命令,例...【详细内容】
2024-01-17  Search: Redis  点击:(57)  评论:(0)  加入收藏
Redis 实现多规则限流的思考与实践
市面上很多介绍redis如何实现限流的,但是大部分都有一个缺点,就是只能实现单一的限流,比如1分钟访问1次或者60分钟访问10次这种,但是如果想一个接口两种规则都需要满足呢,我们的...【详细内容】
2024-01-03  Search: Redis  点击:(109)  评论:(0)  加入收藏
▌简易百科推荐
Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证
Redis 官方于21日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause...【详细内容】
2024-03-27  dbaplus社群    Tags:Redis   点击:(11)  评论:(0)  加入收藏
Redis“叛逃”开源,得罪了几乎所有人
内存数据库供应商Redis近日在开源界砸下了一块“巨石”。Redis即将转向双许可模式,并实施更为严格的许可条款。官方对此次变更的公告直截了当:从Redis 7.4版本开始,Redis将在Re...【详细内容】
2024-03-25    51CTO  Tags:Redis   点击:(9)  评论:(0)  加入收藏
如何使用 Redis 实现消息队列
Redis不仅是一个强大的内存数据存储系统,它还可以用作一个高效的消息队列。消息队列是应用程序间或应用程序内部进行异步通信的一种方式,它允许数据生产者将消息放入队列中,然...【详细内容】
2024-03-22  后端Q  微信公众号  Tags:Redis   点击:(17)  评论:(0)  加入收藏
Redis不再 “开源”
Redis 官方今日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开...【详细内容】
2024-03-21  OSC开源社区    Tags:Redis   点击:(8)  评论:(0)  加入收藏
在Redis中如何实现分布式锁的防死锁机制?
在Redis中实现分布式锁是一个常见的需求,可以通过使用Redlock算法来防止死锁。Redlock算法是一种基于多个独立Redis实例的分布式锁实现方案,它通过协调多个Redis实例之间的锁...【详细内容】
2024-02-20  编程技术汇    Tags:Redis   点击:(47)  评论:(0)  加入收藏
手动撸一个 Redis 分布式锁
大家好呀,我是楼仔。今天第一天开工,收拾心情,又要开始好好学习,好好工作了。对于使用 Java 的小伙伴,其实我们完全不用手动撸一个分布式锁,直接使用 Redisson 就行。但是因为这些...【详细内容】
2024-02-19  楼仔  微信公众号  Tags:Redis   点击:(39)  评论:(0)  加入收藏
工作中Redis有哪些好用的运维工具
工作中使用 Redis 时,如果大家公司没有专业运维,可能开发人员就会面临这些运维的工作,包括 Redis 的运行状态监控,数据迁移,主从集群、切片集群的部署和运维等等。本文我就从这三...【详细内容】
2024-02-06  waynaqua    Tags:Redis   点击:(55)  评论:(0)  加入收藏
批量执行Redis命令的四种方式!
前言在我们的印象中Redis命令好像都是一个个单条进行执行的,如果有人问你如何批量执行Redis命令,你能回答的上吗,或者说能答出几种方式呢?最容易想到的是Redis的一些批量命令,例...【详细内容】
2024-01-17  小许code  微信公众号  Tags:Redis命令   点击:(57)  评论:(0)  加入收藏
Redis 实现多规则限流的思考与实践
市面上很多介绍redis如何实现限流的,但是大部分都有一个缺点,就是只能实现单一的限流,比如1分钟访问1次或者60分钟访问10次这种,但是如果想一个接口两种规则都需要满足呢,我们的...【详细内容】
2024-01-03  架构精进之路  微信公众号  Tags:Redis   点击:(109)  评论:(0)  加入收藏
一站式Redis解决方案
Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊条件查询,在面对一些需...【详细内容】
2024-01-01  大雷家吃饭    Tags:Redis   点击:(66)  评论:(0)  加入收藏
站内最新
站内热门
站内头条