第40回 pipeworkでDockerコンテナの送信帯域幅制御を行う(構築編その3)古賀政純の「攻めのITのためのDocker塾」(2/2 ページ)

» 2017年04月07日 10時00分 公開
前のページへ 1|2       

送信帯域幅制御を行う前の確認

 pipeworkを使ったコンテナc4の送信帯域幅制御を行う前に、帯域幅制御を施していない状態の伝送速度を計測しておきます。クライアントから、wgetコマンドでtestfileを入手してみましょう。以下、クライアントのコマンドプロンプトを「client $」で表すとします。

client $ export http_proxy=""
client $ export https_proxy=""
client $ export no_proxy="172.16.1.94"
client $ wget http://172.16.1.94/testfile
...
100%[===================== ... ===================>] 104,857,600  303MB/s   in 0.3s
 
2017-03-08 18:14:14 (303 MB/s) - ‘testfile’ saved [104857600/104857600]
 
client $

 上記の結果から、帯域幅制御前における筆者の環境での伝送速度は、303Mバイト/秒であることが分かります。

コンテナc4の送信帯域幅制御を行う

 それでは、pipeworkを使って、コンテナc4の送信帯域幅制御を行います。設定をするには、コンテナc4が稼働しているホストOS上で、以下のように入力します。

# pipework tc c4 \
qdisc del dev eth0 root >& /dev/null
# pipework tc c4 \
qdisc add dev eth0 root handle 1: htb default 0
# pipework tc c4 \
class add dev eth0 parent 1: classid 1:0 htb rate 1Mbit ceil 1Mbit burst 1000

 上記の設定により、コンテナc4の送信に関する伝送速度が、1Mビット/秒に制限されます。クライアントから伝送速度を確認してみましょう。

client $ wget http://172.16.1.94/testfile
...
0%[===================== ... ===================>] 839,557  19.0KB/s eta 98m 25s

 伝送速度が、極端に低く抑えられていることが分かります。

 このままでは、ダウンロードが完了するまでに非常に時間がかかりますので、帯域を10倍の10Mビット/秒に増やしてみます。帯域を変更するには、以下のように、classの後に、replaceを指定します。

#  pipework tc c4 \
class replace dev eth0 parent 1: classid 1:0 htb rate 10Mbit ceil 10Mbit burst 1000

 クライアント側で実行しているwgetの様子を確認すると、伝送速度が向上しているはずです。

11% [=======>                                ] 11,711,141   121KB/s  eta 59m 32s

 さらに10倍の100Mビット/秒にしてみましょう。

#  pipework tc c4 \
class replace dev eth0 parent 1: classid 1:0 htb rate 100Mbit ceil 100Mbit burst 1000

 クライアント側で実行しているwgetの様子を確認します。

41% [==================>                     ] 43,397,229  1.02MB/s  eta 13m 40s

 以上が、pipeworkを使って、Dockerコンテナのアプリケーションを稼働させたまま、送信帯域幅を変更する手順でした。pipeworkが利用しているtcコマンドは、非常に多機能で複雑です。情報源を以下に記載しておきますので、ぜひ確認してみてください。また、tcコマンドを使った帯域制限の例については、筆者が書籍「CentOS 7実践ガイド」でも解説しています。DockerコンテナやCentOS 7環境におけるネットワーク帯域幅制御を検討する際の参考にしていただけると幸いです。

書籍

→・「CentOS 7実践ガイド」

以下では、tcコマンドに関連する日本語の技術情報が得られます。

→・Linux Advanced Routing & Traffic Control HOWTO

tcコマンドに指定するqdisc、class、handleなどのコンポーネントの解説が掲載されている以下もぜひ確認してみてください。

→・Traffic Control HOWTO


古賀政純(こがまさずみ)

日本ヒューレット・パッカード オープンソース・Linuxテクノロジーエバンジェリスト。兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国ヒューレット・パッカードからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本ヒューレット・パッカードにて、Hadoop、Spark、Docker、Linux、FreeBSDなどのサーバー基盤のプリセールスSE、文書執筆を担当。日本ヒューレット・パッカードが認定するオープンソース・Linux テクノロジーエバンジェリストとして、メディアでの連載記事執筆、講演活動なども行っている。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「OpenStack 実践ガイド」「Docker 実践ガイド」「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード。古賀氏の最新記事が読めるブログはこちら


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ