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

nth*_*ign 5 networking docker docker-swarm

网络流量

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

vm71 (10.0.0.131)

vm71                 => 10.0.0.130            39.3Mb  47.5Mb  49.3Mb
                     <=                        802Kb  1.03Mb  1.07Mb
Run Code Online (Sandbox Code Playgroud)

vm70 (10.0.0.130)

vm70                 => 10.0.0.131             798Kb  1.00Mb  1.00Mb
                     <=                       40.9Mb  44.8Mb  44.8Mb
Run Code Online (Sandbox Code Playgroud)

vm75 (10.0.0.135)

vm75                 => 10.0.0.131            9.50Kb  10.1Kb  9.51Kb
                     <=                       7.83Kb  8.08Kb  7.56Kb
Run Code Online (Sandbox Code Playgroud)

如上所示,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
Run Code Online (Sandbox Code Playgroud)

请注意,这是 tcp6 流量。

我们被难住了。为什么我们会看到这些管理节点之间的流量如此之大?如果我们降级然后提升管理器节点,流量会清理一段时间。但是,它最终会再次增加。这可能是什么原因造成的?

Dan*_*hns 0

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