Redis 复制延迟的常见原因有哪些?
Redis 复制延迟的常见原因有哪些?
回答重点
Redis 的复制延迟是指从节点同步主节点数据时可能出现时间延迟。在读写分离场景,这个延迟会导致明明写入了数据,但是去从节点查的时候没查到。
可能原因如下:
1)网络原因
可能是带宽不足,或者网络抖动导致同步的延迟。
不过一般内网情况下不会产生这个问题。
2)主节点负载过高
主节点接收到大量的写操作,在处理客户端请求的同时,还需向从节点发送复制数据。如果主节点负载较高时,来不及处理从服务的复制请求,就会导致复制延迟。
大量写操作无法避免。但是我们可优化下写入的结构,精简数据,降低单条数据的大小。
3)复制缓存区溢出
复制缓存区暂存当前主节点接收到的写命令,待传输给从节点。如果从节点处理过慢,写入的命令又过多,则会导致复制缓冲区溢出,此时从节点就需要重新执行全量复制,导致延迟。
可通过 client-output-buffer-limit 间接控制缓冲区大小(详细看扩展知识内的主从复制原理)。
4)主节点持久化,无法及时响应复制请求
生成 RDB 快照或 AOF 文件重写都会占用大量的 CPU 和 I/O 资源,可能会影响复制的速度。
避免在高峰期触发持久化动作。
5)从节点配置太差
因为从节点需要接收、处理和存储主节点发送的数据。如果从节点性能较低,处理数据的速度会慢,从而导致延迟。
此时需要升配。
扩展知识
Comments