docker多主机网络方案

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

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

本文里一系列的测试,想更多关注使用多主机的Docker网络。由于当咱们搭建高可用(HA)环境(好比,使用Percona XtraDB Cluster)时,就会指望实例运行在不一样的主机上。linux

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

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

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

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

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

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

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

- 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”网络能够用来作原型设计或者快速测试,可是目前其在高端硬件上的性能有问题。

相关文章
相关标签/搜索