admin管理员组

文章数量:1642337

问题背景

使用lsyncd rsyncssh模式进行数据同步,目录大小约为25G,lsyncd版本2.2.2,rsync版本3.1.2,源端、目标端网络带宽大小均为1G,lsyncd配置如下:

# 需配置源端到目标端的SSH免密登录
# /etc/lsyncd.conf
settings {
  logfile = "/data/lsyncd/lsyncd.log",
  statusFile = "/data/lsyncd/lsyncd.status",
  pidfile = "/data/lsyncd/lsyncd.pid",
  inotifyMode = "CloseWrite or Modify",
}

sync {
  default.rsyncssh,
  source="/data/source",
  host="1.1.1.1",
  targetdir="/data/target",
  rsync = {
    archive = true,
    compress = false,
    whole_file = false
  },
  ssh = {
    port = 2323
  }
}

启动同步命令:

lsyncd -log Exec /etc/lsyncd.conf

问题现象

同步初始化时总是中断,一般在传输4G左右暂停,重启lsyncd后传输一段时间再次中断。日志报错:

packet_write_wait: Connection to 1.1.1.1 port 2323: Broken pipe
rsync: [sender] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [sender=3.1.2]
Mon Aug 15 16:09:42 2022 Error: Temporary or permanent failure on startup of "/data/source". Terminating since "insist" is not set.

问题原因

同步开始时进行正常,说明配置正确。中途"Broken pipe",检查源端与目标端之间的防火墙等安全设备配置,发现配置有DDOS防护,DDOS相关告警也佐证了传输中断的原因为数据同步因流量过大被判定为DDOS攻击,因此被拦截。

解决办法

方法一:关闭DDOS防护

方法二:对rsync进行限速,增加bwlimit参数,例如限速5MB/s,配置如下:

settings {
  logfile = "/data/lsyncd/lsyncd.log",
  statusFile = "/data/lsyncd/lsyncd.status",
  pidfile = "/data/lsyncd/lsyncd.pid",
  inotifyMode = "CloseWrite or Modify",
}

sync {
  default.rsyncssh,
  source="/data/source",
  host="1.1.1.1",
  targetdir="/data/target",
  rsync = {
    archive = true,
    compress = false,
    whole_file = false,
    _extra = {"--bwlimit=5000"}
  },
  ssh = {
    port = 2323
  }
}

另外,如果不希望lsyncd在初始化失败后退出,可以在启动时增加参数-insist,这样如果初始化失败,lsyncd会继续不断尝试同步直至恢复正常,生产环境建议添加该参数启动:

lsyncd -insist -log Exec /etc/lsyncd.conf

本文标签: writesenderrsyncErrorpipe