Docker IO開銷評測
【編者的話】本文作者Vadim Tkachenko是Percona公司開發團隊負責人。他是固態存儲方面的專家,幫助了很多軟硬件提供商在MySQL市場上取得了成功。
這篇文章是系列文章中的一篇,對Docker中的IO開銷進行了評測。
本文又是關于用Docker鏡像使用Percona Server的文章。在我的前一篇文章“ Percona服務器Docker CPU/網絡開銷評測 ”里介紹了Docker中CPU和網絡的開銷,本文將繼續評測Docker中的操作是否會帶來IO開銷。
在跑了幾次測試以后,好像沒有出現IO開銷(劇透警告)。但是,我仍然認為很有必要理解Docker搭配數據卷(data volume)的幾種不同方式。Docker的設計初衷是提供短生命周期的容器,但是這樣對數據并不友好,畢竟我們不想丟掉數據。
所以,第一種模式是在Docker容器內創建數據。這是默認的方式:
docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=1 --name ps13 -p 3306:3306 -v /data/flash/my.cnf:/etc/my.cnf --net=host percona/percona-server:5.6.28
(我使用了 --net=host
參數來避免網絡開銷,相關的信息請參考 之前的文章 。)
第二種模式是使用外部數據卷,我們需要用 -v /data/flash/d1/:/var/lib/mysql
代替數據卷。完整的命令是:
docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=1 --name ps13 -p 3306:3306 -v /data/flash/d1/:/var/lib/mysql -v /data/flash/my.cnf:/etc/my.cnf --net=host percona/percona-server:5.6.28
最終,第三個模式是使用數據卷容器。在這個例子里,我創建了一個傀儡容器:
docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=1 --name ps13-data-volume -v /var/lib/mysql -v /data/flash/my.cnf:/etc/my.cnf --net=host percona/percona-server:5.6.28
在停止了 ps13-data-volume
容器之后,我們可以從 ps13-data-volume
的數據卷再啟動一個:
docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=1 --name ps14 --volumes-from ps13-data-volume -v /data/flash/my.cnf:/etc/my.cnf --net=host percona/percona-server:5.6.28
我從讀密集以及寫密集兩個維度對比了所有這些模式以及裸機模式下的IO負載,裸機模式是直接mount到sysbench的。作為參考,sysbench的命令是:
./sysbench --test=tests/db/oltp.lua --oltp_tables_count=16 --oltp_table_size=10000000 --num-threads=16 --mysql-host=127.0.0.1 --mysql-user=root --oltp-read-only=off --max-time=1800 --max-requests=0 --report-interval=10 run
我不打算展示最終的數值以及圖表,因為不管是在Docker中的任何模式,還是裸機IO模式, 結果都是一樣的 。因此,我可以很自信地說在上文中描述的任何一種Docker數據卷模式中都 沒有IO開銷 。
在下一個實驗中,我打算評測在多主機網絡環境下Docker容器是否有額外開銷。
原文鏈接: Measuring Docker IO overhead (翻譯:Lambert Sun)
====================================================================
譯者介紹
Lambert Sun,趨勢科技DevOps Lead,敏捷開發實踐者。
來自: http://dockone.io/article/1105