zoukankan      html  css  js  c++  java
  • 记一次redis主从同步失败

    zabbix告警突然从某个时间点开始提示CPU使用高,网卡流量也一直居高不下。

    首先查看redis日志,发现告警时间点redis主节点被重启了,发生了主备切换,并且在日志中发现这么一段

    [3081] 06 Dec 02:33:28.090 # Client addr=****:35810 fd=122 name= age=88 idle=88 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=16299 oll=3041 omem=79211304 events=rw cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.
    [3081] 06 Dec 02:33:28.090 # Connection with slave *****:6379 lost.
    

    scheduled to be closed ASAP for overcoming of output buffer limits意思是:psync的命令超过了output-buffer-limits,master主动关闭了slave的连接。然后slave被断开了和master的连接,然后slave又重新找master请求同步,然后就陷入了恶性循环,slave找master做全同步的过程是一个很消耗cpu消耗io消耗带宽的过程,所以会一直持续的告警。

    output-buffer-limits这个参数的作用是:当客户端来获取数据的时候,数据会被保存在output-buffer中,等信息传输完后output-buffer中的数据会被清理掉,redis对output-buffer做了限制。

    这个时候问题根源已经找到,就是主备切换以后要同步的数据过大,超出了output-buffer-limits这个参数设置的值,所以数据同步一直失败。

    解决办法:

    在master节点执行redis-cli config set client-output-buffer-limit slave '2147483648 1073741824 300',放大这个限制,当然这个参数里面的3个数字需要根据自己的系统实际情况来定。

    redis-cli  config rewrite -这个命令是将变更的配置落地到配置文件的,即使redis再次重启,这个变更也不会失效。这部可执行可不执行。

    2147483648 -是一个硬性限制,当output-buffer的大小大于2147483648之后就会断开连接

    1073741824 300 -是一个软限制,当output-buffer的大小大于1073741824并且超过了300秒的时候就会断开连接

    注意:执行完这个命令机器的cpu和内存都会有一定的上涨。

  • 相关阅读:
    lsmod-查看内核模块信息
    centos 7 下通过 conda 安装 cuda pytorch
    python 中文编码
    matplotlib
    How to determine the correct number of epoch during neural network training? 如何确定Epoch
    nvidia-smi Failed to initialize NVML: Driver/library version mismatch
    MySQL MAX函数:查询指定列的最大值
    mysql之group_concat函数详解
    @Param注解的用法解析@Param注解的用法解析
    【MySQL函数】replace()函数
  • 原文地址:https://www.cnblogs.com/gangdou/p/7991754.html
Copyright © 2011-2022 走看看