docker多主机网络方案
本文探討Docker多主機(jī)網(wǎng)絡(luò)的性能。
在過去的博文里,我測(cè)試過?Docker的網(wǎng)絡(luò)?。?MySQL服務(wù)器團(tuán)隊(duì)?提供了他們自己的結(jié)果,和我的觀察是一致的。
本文里一系列的測(cè)試,想更多關(guān)注使用多主機(jī)的Docker網(wǎng)絡(luò)。因?yàn)楫?dāng)我們搭建高可用(HA)環(huán)境(比如,使用Percona XtraDB Cluster)時(shí),就會(huì)期望實(shí)例運(yùn)行在不同的主機(jī)上。
本文測(cè)試的另一個(gè)原因是Docker最近發(fā)布了1.12版本,支持Swarm Mode。Swarm Mode本身很有意思——在這個(gè)版本里,Docker決定在編排部署領(lǐng)域更深入,從而和Kubernetes以及Apache Mesos競(jìng)爭(zhēng)。我認(rèn)為Swarm Mode還很粗糙(畢竟是第一個(gè)版本),但是我確信Docker會(huì)在接下來的幾個(gè)版本里繼續(xù)優(yōu)化這個(gè)特性。
Swarm Mode還假定用戶在不同的物理主機(jī)上運(yùn)行服務(wù),并且服務(wù)通過Docker的網(wǎng)絡(luò)通信。我想了解在多主機(jī)上使用Docker網(wǎng)絡(luò)時(shí)性能如何。
網(wǎng)絡(luò)性能對(duì)于像Percona XtraDB Cluster 和MySQL Group Replication(剛剛發(fā)布了另一個(gè)?Lab版本?)這樣的集群來說尤為重要。
在我的環(huán)境里,使用了兩臺(tái)物理服務(wù)器,之間通過10GB網(wǎng)絡(luò)連接。這兩臺(tái)服務(wù)器各有56個(gè)核的Intel CPU。
Sysbench環(huán)境:數(shù)據(jù)在內(nèi)存里,僅僅使用主鍵查找。網(wǎng)絡(luò)測(cè)試中網(wǎng)絡(luò)往返很嚴(yán)重,但是能夠更清楚得看到對(duì)性能的影響。
如下是Docker網(wǎng)絡(luò)的可選方案:
- 沒有Docker容器(在下面的結(jié)果里標(biāo)記成“direct”)
- Docker容器使用“host”網(wǎng)絡(luò)(標(biāo)記為“host”)
- Docker容器使用“bridge”網(wǎng)絡(luò),這里服務(wù)端口通過端口轉(zhuǎn)發(fā)來暴露(標(biāo)記為“bridge”)
- Docker容器使用“overlay”網(wǎng)絡(luò),客戶端和服務(wù)器都在通過overlay網(wǎng)絡(luò)連接的容器里啟動(dòng)(結(jié)果里標(biāo)記為“overlay”)。對(duì)于“overlay”網(wǎng)絡(luò),可以使用第三方插件,使用不同的網(wǎng)絡(luò)實(shí)現(xiàn),最知名的是:
- Calico network?https://github.com/projectcalico/calico-containers
- Weave network?https://github.com/weaveworks/weave
對(duì)于多主機(jī)網(wǎng)絡(luò)搭建,只有“overlay”(以及插件實(shí)現(xiàn))可用。我使用“direct”,“host”和“bridge”作為參考以及比對(duì),來衡量overlay實(shí)現(xiàn)的額外消耗。
我觀察到的結(jié)果如下:
觀察
- “Bridge”網(wǎng)絡(luò)會(huì)增加額外消耗,大概12%,這和我之前的benchmark是一致的。但是我想知道這是Docker的額外消耗,還是Linux bridge網(wǎng)絡(luò)實(shí)現(xiàn)的額外消耗。Docker應(yīng)該使用的是我在《?在相同主機(jī)上使用Linux Network命名空間運(yùn)行Percona XtraDB Cluster節(jié)點(diǎn)?》一文里講述的搭建方式,我懷疑Linux網(wǎng)絡(luò)命名空間和bridge也會(huì)帶來額外消耗。需要更多的測(cè)試來驗(yàn)證這一點(diǎn)。
- 原生的“Overlay”Docker網(wǎng)絡(luò)受性能問題困擾。我用ksoftirq在一個(gè)CPU內(nèi)核使用100%時(shí)觀察到了問題,并且看到了類似的報(bào)告。似乎Docker“overlay”里的網(wǎng)絡(luò)中斷并沒有適當(dāng)分布到多個(gè)CPU里。“direct”和“bridge”配置里沒有這樣的問題。我認(rèn)為這是Docker“overlay”網(wǎng)絡(luò)的問題(期望這個(gè)問題最終能夠解決)。
- Weave網(wǎng)絡(luò)結(jié)果非常糟糕。我看到了很多CPU分配給“weave”容器,因此我認(rèn)為其實(shí)現(xiàn)有很嚴(yán)重的擴(kuò)展性問題。
- Calico插件在多主機(jī)容器場(chǎng)景下性能最佳,甚至比“bridge-bridge”網(wǎng)絡(luò)更好。
結(jié)論
如果你需要使用Docker“overlay”網(wǎng)絡(luò)——如果想要部署多主機(jī)環(huán)境,或者使用Docker Swarm Mode,這是必須的——我推薦考慮使用Calico的Docker網(wǎng)絡(luò)插件。原生的Docker“overlay”網(wǎng)絡(luò)可以用來做原型設(shè)計(jì)或者快速測(cè)試,但是目前其在高端硬件上的性能有問題。
轉(zhuǎn)載于:https://www.cnblogs.com/bethal/p/6046816.html
總結(jié)
以上是生活随笔為你收集整理的docker多主机网络方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS OC部分 NSString
- 下一篇: 线性方程组 I