Docker Swarm 管理器之间的高网络 I/O

Docker Swarm 管理器之间的高网络 I/O

网络流量

iftop我们运行包含 3 个管理器节点和 16 个工作节点的 Docker Swarm。三个管理器节点中的两个节点之间的网络 I/O 非常高。为了说明这一点,以下是三个管理器节点的输出:

vm71 (10.0.0.131)

vm71                 => 10.0.0.130            39.3Mb  47.5Mb  49.3Mb
                     <=                        802Kb  1.03Mb  1.07Mb

vm70 (10.0.0.130)

vm70                 => 10.0.0.131             798Kb  1.00Mb  1.00Mb
                     <=                       40.9Mb  44.8Mb  44.8Mb

vm75 (10.0.0.135)

vm75                 => 10.0.0.131            9.50Kb  10.1Kb  9.51Kb
                     <=                       7.83Kb  8.08Kb  7.56Kb

如上所示,vm70 和 vm71 之间的流量大约是 vm75 与其他两个管理器之间流量的 4,000 倍。我们已设置规则,在任何 swarm 管理器上均不运行容器。通过docker stats在每个管理器上运行,我们确认了这一点。

按流程联网

下一个显而易见的问题是哪些进程正在生成此网络 I/O。 的输出netstat -tup如下。 我只显示了与相关端口相关的行iftop

tcp6       0     46 vm71:2377               10.0.0.130:39316        ESTABLISHED 791/dockerd

请注意,这是 tcp6 流量。

我们很困惑。为什么这些管理器节点之间会出现如此多的流量?如果我们降级然后提升管理器节点,流量会在一段时间内消失。但是,流量最终会再次增加。这可能是什么原因造成的?

答案1

我建议使用 tcpdump 捕获网络请求,您需要一个监控工具/脚本来观察何时执行它。常见的罪魁祸首是内存突然增加相关性,如果主管理器的内存使用量突然大幅增加,这是可以解释的。从您的输出来看,这似乎只是在负载平衡时击中管理器 2 并转移到领导者的请求。

相关内容