温馨提示×

centos overlay为何丢包

小樊
42
2026-10-23 18:52:28
栏目: 智能运维

在 CentOS 上 overlay(通常是 Docker overlay 网络或 overlayfs)出现“丢包”,原因和排查方向取决于你说的 overlay 是哪一层。下面按常见场景分别说明。


一、Docker Overlay 网络丢包(最常见)

Docker 的 overlay 网络用于跨主机容器通信(基于 VXLAN)。

常见丢包原因

1. 防火墙 / iptables 拦截

Overlay 依赖:

  • UDP 4789(VXLAN)
  • TCP 2377(集群管理)
  • TCP/UDP 7946(serf)

问题:

  • firewalld 未放行
  • 自定义 iptables 规则 DROP

检查:

firewall-cmd --list-all
iptables -S | grep 4789

解决:

firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --reload

2. MTU 不匹配(非常常见)

VXLAN 封装会 增加 50 字节。

如果宿主机 MTU 是 1500,容器 overlay 网络 MTU 没调小,就会:

  • 大包被丢弃
  • TCP 重传、ping 正常但业务卡

检查:

ip link show docker_gwbridge
ip addr show <overlay_if>

解决(Docker daemon.json):

{
  "mtu": 1450
}

重启 docker:

systemctl restart docker

3. 网络抖动 / 跨机房延迟

Overlay 本质是多跳网络:

  • 丢包率 > 1% 就会明显影响
  • 云环境尤其明显(如不同可用区)

验证:

ping -s 1400 <peer_host>
mtr <peer_host>

4. 内核 / Docker 版本 Bug

CentOS 7 + 老内核常见问题:

  • overlay 转发异常
  • conntrack 表满

检查:

uname -a
docker version
dmesg | grep -i drop

建议:

  • CentOS 7 → 升级到 3.10.0-1160+
  • 或迁移到 CentOS Stream / Rocky / Alma

5. conntrack 表满

dmesg | grep conntrack

现象:

  • 新连接失败
  • 老连接正常

解决:

sysctl -w net.netfilter.nf_conntrack_max=1048576

二、OverlayFS 文件系统“丢包”(误称)

如果你说的是 overlayfs(容器镜像层),它不会“丢网络包”,但可能有:

1. 文件“消失”

  • 上层写,下层读
  • 删除只做 whiteout

不是丢包,是 COW 行为


2. inode / 磁盘满

df -i
df -h /var/lib/docker

三、快速排查清单(建议按顺序)

# 1. 看丢包
ip -s link

# 2. 看 docker 网络
docker network inspect <overlay_net>

# 3. 看内核
dmesg | tail -n 50

# 4. 看防火墙
iptables -S

# 5. 看 MTU
ip addr | grep mtu

四、如果你能补充信息,我可以精准定位

请告诉我:

  1. CentOS 版本(7 / 8 / Stream)
  2. Docker 版本
  3. overlay 是 网络 还是 文件系统
  4. 丢包表现(ping?HTTP?TCP?)
  5. 单主机还是跨主机

我可以直接给你 对应配置文件和命令。

0 踩