docker swarm 的 overlay 网络性能问题

2019-12-17 13:18:46 +08:00
 luger1990

团队内没有用 k8s,此主题之讨论 docker swarm。

目前是用 docker swarm 的 docker network create 创建一组 overlay 网络,然后用 docker service create 创建服务集群,并加入到上面提供的网络,nginx 也一样加入到上面的网络。nginx 的配置如下:

location / {                                                
    resolver 127.0.0.11 ipv6=off;                  
    proxy_pass      http://docker_service_name:8080;                                               
}

通过 docker swarm 实现负载均衡和动态扩容。但是这里就有个问题,对于个别接口从日志看后端处理时间也就 20ms,但是 nginx 那一层日志看有 1.003S。请问有什么办法能优化吗?

7537 次点击
所在节点    Docker
4 条回复
monsterxx03
2019-12-17 13:44:04 +08:00
swarm 的 overlay 网络很慢, 1s 有点夸张了, create 的语句发出来看看, 有没有加 --opt encrypted? 这个很慢的.

再排除 dns 的问题, proxy_pass 直接填 ip 试试.

nginx 日志打详细点,看时间花在哪里了: https://www.nginx.com/blog/using-nginx-logging-for-application-performance-monitoring/
luger1990
2019-12-17 14:36:11 +08:00
@monsterxx03 用你的方法输出日志试了试,看来主要是`upstream_connect_time` 这个时间比较长。并不是所有的都要 1S 是部分 但是也挺多的
luger1990
2020-04-15 11:10:22 +08:00
解决问题了,具体可以参考 https://stackoverflow.com/questions/59392603/overlay-network-performance-issues-with-docker-swarm#59392603

```
sudo nsenter --net=/var/run/docker/netns/{your_load_balancer} sysctl -w net.ipv4.vs.conn_reuse_mode=0
sudo nsenter --net=/var/run/docker/netns/{your_load_balancer} sysctl -w net.ipv4.vs.expire_nodest_conn=1
```

```
version: "3.7"
services:
core:
image: nginx
sysctls:
- net.ipv4.vs.conn_reuse_mode=0
- net.ipv4.vs.expire_nodest_conn=1
```
luger1990
2020-04-15 11:11:06 +08:00
建议如果有足够的人力还是用 k8s,没必要尝试 swarm

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629782

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX