[转帖]docker多主机网络方案

docker,主机,网络,方案 · 浏览次数 : 0

小编点评

**Docker多主机网络性能测试结果** **简介:** 本文测试了使用Docker多主机网络的性能。在过去的博文中,我测试过 Docker的网络 。本文里一系列的测试,想更多关注使用多主机的Docker网络。 **测试方案:** * 使用两台物理服务器,之间通过10GB网络连接。 * 两台服务器各有56个核的Intel CPU。 * 使用“direct”,“host”和“bridge”作为参考以及比对,来衡量overlay实现的额外消耗。 * 使用“overlay”网络,测试Calico网络插件的效果。 **测试结果:** * “Bridge”网络会增加额外消耗,大概12%,这与Linux bridge网络实现的额外消耗一致。 * “Overlay”网络受性能问题困扰,当CPU使用100%时,观察到了问题。 * “direct”和“bridge”配置里没有这样的问题。 * Calico插件在多主机容器场景下性能最佳,甚至比“bridge-bridge”网络更好。 **结论:** 使用Docker多主机网络可以实现高可用性,但是其性能仍有提升空间。建议使用Calico的Docker网络插件,以优化性能。 **其他:** * 原生的“Overlay”Docker网络可以用来做原型设计或者快速测试,但是目前其在高端硬件上的性能有问题。 * “Weave”网络结果非常糟糕,我看到了很多CPU分配给“weave”容器,因此我认为其实现有很严重的扩展性问题。

正文

  • http://t.zoukankan.com/bethal-p-6046816.html

     

    本文探讨Docker多主机网络的性能。

    在过去的博文里,我测试过 Docker的网络 。 MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的。

    本文里一系列的测试,想更多关注使用多主机的Docker网络。因为当我们搭建高可用(HA)环境(比如,使用Percona XtraDB Cluster)时,就会期望实例运行在不同的主机上。

    本文测试的另一个原因是Docker最近发布了1.12版本,支持Swarm Mode。Swarm Mode本身很有意思——在这个版本里,Docker决定在编排部署领域更深入,从而和Kubernetes以及Apache Mesos竞争。我认为Swarm Mode还很粗糙(毕竟是第一个版本),但是我确信Docker会在接下来的几个版本里继续优化这个特性。

    Swarm Mode还假定用户在不同的物理主机上运行服务,并且服务通过Docker的网络通信。我想了解在多主机上使用Docker网络时性能如何。

    网络性能对于像Percona XtraDB Cluster 和MySQL Group Replication(刚刚发布了另一个 Lab版本 )这样的集群来说尤为重要。

    在我的环境里,使用了两台物理服务器,之间通过10GB网络连接。这两台服务器各有56个核的Intel CPU。

    Sysbench环境:数据在内存里,仅仅使用主键查找。网络测试中网络往返很严重,但是能够更清楚得看到对性能的影响。

    如下是Docker网络的可选方案:

    - 没有Docker容器(在下面的结果里标记成“direct”)

    - Docker容器使用“host”网络(标记为“host”)

    - Docker容器使用“bridge”网络,这里服务端口通过端口转发来暴露(标记为“bridge”)

    - Docker容器使用“overlay”网络,客户端和服务器都在通过overlay网络连接的容器里启动(结果里标记为“overlay”)。对于“overlay”网络,可以使用第三方插件,使用不同的网络实现,最知名的是:

    - Calico network https://github.com/projectcalico/calico-containers

    - Weave network https://github.com/weaveworks/weave

    对于多主机网络搭建,只有“overlay”(以及插件实现)可用。我使用“direct”,“host”和“bridge”作为参考以及比对,来衡量overlay实现的额外消耗。

    我观察到的结果如下:

    观察

    • “Bridge”网络会增加额外消耗,大概12%,这和我之前的benchmark是一致的。但是我想知道这是Docker的额外消耗,还是Linux bridge网络实现的额外消耗。Docker应该使用的是我在《 在相同主机上使用Linux Network命名空间运行Percona XtraDB Cluster节点 》一文里讲述的搭建方式,我怀疑Linux网络命名空间和bridge也会带来额外消耗。需要更多的测试来验证这一点。
    • 原生的“Overlay”Docker网络受性能问题困扰。我用ksoftirq在一个CPU内核使用100%时观察到了问题,并且看到了类似的报告。似乎Docker“overlay”里的网络中断并没有适当分布到多个CPU里。“direct”和“bridge”配置里没有这样的问题。我认为这是Docker“overlay”网络的问题(期望这个问题最终能够解决)。
    • Weave网络结果非常糟糕。我看到了很多CPU分配给“weave”容器,因此我认为其实现有很严重的扩展性问题。
    • Calico插件在多主机容器场景下性能最佳,甚至比“bridge-bridge”网络更好。

    结论

    如果你需要使用Docker“overlay”网络——如果想要部署多主机环境,或者使用Docker Swarm Mode,这是必须的——我推荐考虑使用Calico的Docker网络插件。原生的Docker“overlay”网络可以用来做原型设计或者快速测试,但是目前其在高端硬件上的性能有问题。

与[转帖]docker多主机网络方案相似的内容:

[转帖]docker多主机网络方案

http://t.zoukankan.com/bethal-p-6046816.html 本文探讨Docker多主机网络的性能。 在过去的博文里,我测试过 Docker的网络 。 MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的。 本文里一系列的测试,想更多关注使用多主机的Docker

[转帖]如何使用Calico实现跨主机Docker网络通信

https://blog.csdn.net/sanhewuyang/article/details/122004156 写在前面 学习K8s,学到这里,整理记忆,本文用于理解K8s网络中Calico网路方案的原理优缺点内容包括:常见的容器跨主机通信方案简介Caliao实现Container跨主机通信

[转帖]Docker容器动态添加端口

方法1 修改iptables端口映射 docker的端口映射并不是在docker技术中实现的,而是通过宿主机的iptables来实现。通过控制网桥来做端口映射,类似路由器中设置路由端口映射。 比如我们有一个容器的80端口映射到主机的8080端口,先查看iptables到底设置了什么规则:登录后复制

[转帖]查找 docker 镜像的所有 tag

https://www.jianshu.com/p/f974ec9e7937 建议阅读方式 可前往语雀阅读,体验更好:查找 docker 镜像的所有 tag 环境说明 centos7 阿里云主机一台: docker 相关信息如下: 测试镜像 hello-world 的 tags 情况见官网:dock

[转帖]把SSH客户端放在网页上运行?这个开源项目教你部署实现

https://zhuanlan.zhihu.com/p/420301596 有时候为了管理服务器,又不想去下载各种各样的客户端,只是想在ipad、手机上操作一下,这款SSH开源客户端工具一定适合你,运行在网页端,只要有浏览器的设备就能访问使用。 环境准备 我们的主角依然是docker,采用最方便的

[转帖]docker容器跨主机网络overlay

https://www.cnblogs.com/machangwei-8/p/15757120.html 目录 拉取镜像,运行容器 浏览器上访问Consul 修改host1,host2的docker daemon配置文件 创建网络 验证 在overlay中运行容器 运行 查看一下这两个网卡 查看生成

[转帖]Docker容器跨主机通信overlay网络的解决方案

https://www.jb51.net/article/237838.htm 一、Docker主机间容器通信的解决方案 Docker网络驱动 Overlay: 基于VXLAN封装实现Docker原生Overlay网络 Macvlan: Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识一

[转帖]macvlan 网络模式实现跨主机 Docker 通信

https://www.jianshu.com/p/cc481870236b macvlan 网络模式概念 macvlan 本身是 linux 内核的模块,本质上是一种网卡虚拟化的技术,其功能是允许在同一个物理网卡上虚拟出多个网卡,通过不同的 MAC 地址在数据链路层进行网络数据的转发。 一块网卡上

[转帖]Flannel 环境搭建与分析

https://switch-router.gitee.io/blog/flanenl/ 介绍 Flannel是CoreOS团队针对Kubernates设计的跨主机容器网络解决方案, 它可以使集群中不同节点上运行的docker容器都具有全集群唯一的虚拟IP地址。 举个例子,在一个由3台主机节点组成系

[转帖]Flannel 环境搭建与分析

https://switch-router.gitee.io/blog/flanenl/ 介绍 Flannel是CoreOS团队针对Kubernates设计的跨主机容器网络解决方案, 它可以使集群中不同节点上运行的docker容器都具有全集群唯一的虚拟IP地址。 举个例子,在一个由3台主机节点组成系