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」網絡能夠用來作原型設計或者快速測試,可是目前其在高端硬件上的性能有問題。

相關文章
相關標籤/搜索