这个坑值得记一笔。从库状态在连接和同步之间反复切换,主库带宽被打满,业务读取延迟跟着抖动。
原因不止一个,得分开看。复制缓冲区太小,从库稍微落后就被断开;从库内存不足,加载数据时被杀掉;网络不稳定导致复制连接频繁中断。
上来先看复制状态和偏移量
redis-cli info replication
调大复制缓冲区
redis-cli config set repl-backlog-size 64mb
然后确认从库内存是否足够
redis-cli -h 从库 info memory | head -5
剩下的就是核对主从之间的网络质量
ping -c 20 从库地址
当时还开着另一个排查窗口,两边日志对照着看才定位到。
同一份数据我导出了两份,一份留底,一份拿来试。
别只看报错消失,验证要多做一步。从库状态稳定为已连接,偏移量持续追上,不再反复触发全量传输。
提醒一点。缓冲区大小要能覆盖一次网络抖动的写入量;频繁全量同步往往不是网络问题,而是从库内存不够。这类问题最好一次改到位,反复小改反而容易把原因搅混。