負け組アーキテクトの憂鬱

メモしておきたいことや読書の記録を淡々と書く。

CBQ.initを使ってLinuxでお手軽QoS

ネットワーク帯域上で必要な帯域をあらかじめ確保したり、必要以上のトラフィックを制限することを引っくるめて一般にQoS(Quality of Service)などと言うが、LinuxでIPのトラフィックコントロール(帯域制御)をするには、iprouteとtcを使う。

しかしこの設定は柔軟ではあるものの、直感的ではなく分かりづらい。こういうモノが必要な場合の大半は、アドレス帯毎に制限したいとかポート毎に制限したいとか、比較的目的がはっきりしているため、出来ればザックリと簡単に設定したいものだ。

そこで、CBQ.initというtcのwrapperとして使いやすいscriptがある。CBQというのはClass-Based Queuingと言って、トラフィック(パケット)をクラスとして定義し、それぞれに帯域上限値を設定しておく事で、上限値を超えたパケットを破棄するという方式だ。単純なqueueの優先順位付けの帯域制限方式と異なり、いつまで経ってもパケットがスケジューリングされず、事実上の通信断になってしまう事態を防ぐ事が出来る。

このCBQ.initをCentOS4で試してみた(たぶんCentOS5でもredhatでも同じでしょう)。必要なモジュールは最小構成でも用意されていたので、単純にscriptを設置するだけで良い。

まずはscriptをダウンロードし、適当はdirectoryに置いておく。redhat系のchkconfig形式のscriptのため、/etc/init.d/に置くなりlinkするなりしておくと、サービスとして管理することができる。分かりやすくするため、/etc/init.d/cbqというファイル名で設置してみた。

# chkconfig --add cbq
# chkconfig --list | grep cbq
cbq             0:off   1:off   2:off   3:off   4:off   5:off   6:off

こんな感じで見えれば正常。

あとは、script中のコメントに従って設定ファイルを用意する。設定ファイルもredhat系のdistributionならばおなじみの形式だ。設定ファイルの置き場はデフォルトでは/etc/sysconfig/cbq/なので、特に問題無ければここにすると良い。当然CentOSの標準構成には無いので作っておく。

# mkdir /etc/sysconfig/cbq/

設定ファイルは帯域制御したいクラス毎に、このdirectoryにファイルを置く。ファイル名の命名規則は以下のとおり。

cbq-lt;clsidgt;.lt;namegt;
  • clsidは帯域制御のクラスIDで、他のクラス(要は他の設定ファイル名)と重複してはいけない。0002からFFFFまでの値を指定する。
  • nameは任意の文字列。分かりやすい名前にでもしておく。

たとえば/etc/sysconfig/cbq/cbq-5963.for_httpsなどというファイルを作る。内容の例はこんな感じ。

DEVICE=eth0,1000Mbit,100Mbit
RATE=5Mbit
WEIGHT=500kbit
RULE=:443,
  • DEVICEには対象とするinterface名と、対応する物理NICのリンク速度、ウェイト(通常はリンク速度の1/10)を指定する。
  • RATEにはこのクラスへの割り当て帯域を指定する。
  • WEIGHTはウェイトを指定する。通常はRATEの1/10。
  • RULEは、[[saddr[/prefix]][:port[/mask]],][daddr[/prefix]][:port[/mask]]この形式で指定する。カンマ区切りで前半がソースアドレスとポート、後半がディスティネーションだ。特に指定しない(anyを指定する)場合は省略可能。

これがもっとも基本的で単純な使い方だ。上記の例だと、1Gbpsのインターフェイスeth0を通るパケットに対し、ソースポートが443であれば何れのソースアドレスでも、何れのディスティネーションでも5Mbpsの帯域とする、と言う意味。Webサーバなどに設定して、httpsの下り帯域を制限しているわけだ。

単なるwrapperとはいえ、設定出来る内容は多岐にわたり、かなりきめ細かい設定も出来る。scriptのコメントがとてもよく纏まっているので、いろいろ試してみると良い(CBQ.initという名前だけど、CBQ以外の制御もできる)。

chkconfigでサービスに登録してあれば、動作させるには

# service cbq start

だけで良い。動作状況の確認は以下のコマンドでできる。

# service cbq stats(帯域制御の状況を表示する)
# service cbq list(制御対象のリストを表示する)
# tc -s class ls dev eth0(tcで見る場合にはこんな感じ watchコマンドの引数にすると便利)

動作に問題が無ければ、chkconfigコマンドでonにしておけば、毎回OSのboot時に設定される。chkconfigを使わない場合は、そのままscriptの実行し、引数にstart,stop,stats,list等を指定すれば同じ結果になる。

[読書]Apacheモジュール プログラミングガイド5

Apacheモジュール プログラミングガイド (Advanced Server‐side programmingシリーズ)Apacheモジュール プログラミングガイド (Advanced Server‐side programmingシリーズ)
著者:小山 浩之
販売元:技術評論社
発売日:2003-08-01
おすすめ度:5.0
クチコミを見る

Apacheモジュール作成のための入門書という位置付けだが、Apache httpdの設計思想やアーキテクチャを知る上で非常に有用な内容だ。

対象としているhttpdのバージョンが1.3と古いものの、2.0との差分が付録にまとまっているなど、親切な構成だ。

モジュール作成者で無くても、リクエスト処理ループの考え方などは、httpd.confの書き方の理解を深めることは間違いない。Apache httpdの挙動の理解や、他のモジュールのソースを読む手がかりにもなるだろう。

現在は手に入りづらいようだが、最新版に合わせた内容での改訂を期待したい。

[読書]sedパズルブック4

sedパズルブック
著者:片山 裕
販売元:インプレス
発売日:1993-03
おすすめ度:5.0
クチコミを見る

正規表現の基礎から、なんとフィボナッチ級数展開までsed一つでやってしまおうという、何故そこまでsedに拘るのかという珠玉の一冊。

1997年当時にアルバイトしていた下北沢の編集プロダクションに置いてあった。以来、自分でも買おうと出版社にまで問い合わせたが「重版の予定なし」と言われ続け、数年前にAmazonのマーケットプレイスでようやく購入した思い出深い一冊でもある。

問題編と解答編を交互に繰り返す構成で、パズルブックの名にふさわしく楽しみながらsedのコマンドを学ぶことができる。前半は常識的な問題であるものの、後半はもう解答を見るだけで笑っちゃうような、目から鱗が落ちる問題ばかりだ。

現在では非常に手に入りづらいが、見かけたら是非手に取ってほしい。

[読書]フューチャリスト宣言5

フューチャリスト宣言 (ちくま新書)フューチャリスト宣言 (ちくま新書)
著者:梅田 望夫
販売元:筑摩書房
発売日:2007-05-08
おすすめ度:4.0
クチコミを見る

明るい未来を予測することは、一つの意志だ。

現実を悲観する事は簡単だし、守りに入るのであれば、すべきことは単純だろう。

サブカル化した知を嘆く茂木さんと、日本のWebを残念と表現する梅田さんが、それでも「ネットの側に賭ける」という未来を選択することは、決意であり意志表明である。

今まで様々な理由でunderdog(負け犬)として生きてこざるを得なかった世界中の人々が、インターネットの力でエンパワーされて攻めてくる。世界中で情報格差が急激になくなりつつある。経済圏の垣根など簡単に超えるだろう。

残念ながら、能力のある新興国の技術者に、能力の無い日本人の技術者が打ち負かされる未来はすぐそこまで来ている。

そんな中で我々日本人の技術者は、どんな明るさのどんな未来を予測すれば良いのだろうか。情報格差を無くしたネットの力をを驚異として捉えるのではなく、最大限に利用する。経済格差など関係のない純粋な競争に勝ち残る知性を志向すべきだ。

「未来は明るい」と言う意志が必要なのだ。

[読書]サーバ/インフラを支える技術 -スケーラビリティ、ハイパフォーマンス、省力運用5

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
著者:安井 真伸
販売元:技術評論社
発売日:2008-08-07
おすすめ度:4.5
クチコミを見る

インフラ技術者必携。「まずは読んでこい」という一冊。

オープンソースメインで、商用ミドルウェアを使わずともここまで実装できるという好例でもある。

Googleを支える技術がかなり大規模システムを対象にしていた一方、こちらはある程度の規模さえあれば、明日からでも実践できるテクニックやノウハウが詰まっている。

なかでも、負荷に対する考え方については諳んじるまで読み込むべきだ。パフォーマンスチューニングの基礎的な考え方を学ぶ上でこれ以上の良書を知らない。先人の苦労が詰まった内容は、まさしく情報の高速道路と呼ぶに相応しいだろう。迷ったらまず手に取るべき一冊だ。

[読書]ビューティフルコード5

ビューティフルコードビューティフルコード
著者:Brian Kernighan
販売元:オライリージャパン
発売日:2008-04-23
おすすめ度:4.5
クチコミを見る

コードは美しくあらねばならぬ。形のないモノである情報に機能美が顕れる。卓越した知性と芸術性の共通点とは何だろう。

質とボリュームにおいては他に類を見ない。この一冊に詰め込まれた叡智を読み解くことがどれだけ幸せなことなのか、まだまだ時間はかかりそうだ。エンジニアとしての未熟さを思い知らされる。

[読書]Googleを支える技術 -巨大システムの内側の世界5

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)
著者:西田 圭介
販売元:技術評論社
発売日:2008-03-28
おすすめ度:4.5
クチコミを見る

ウェブ進化論と同様、これも「必ず読め」と言っている一冊。

ここに書かれていることは最先端の理想的な理論ではなく、既にGoogleで実用化された枯れた技術であることに衝撃を受けた。読んだ当時に少しだけ弱まっていた、技術への純粋な意欲を取り戻すきっかけになった一冊でもある。

Googleの技術論文をかいつまんで情報系の大学生でも読めるレベルで解説したとあるが、まさに理解しやすい解説で、詳細な技術への良い入り口だ。大容量のデータの扱いかた、分散処理の考えかた、普段このような大規模なシステムを触れる機会が少ないエンジニアこそ読むべき内容だ。

一方で、この内容の本が出版され世のエンジニア達の愛読書となっていることには恐怖すら感じる。お金さえ支払えばこの内容を頭に入れることは誰でも出来るのだ(そしてネットさえあれば無償でGoogleの論文にたどり着く)。ここで紹介されている内容を理解している位ではまだまだ甘い。世の中ではもっともっと先進的でとんでもない発想が実現され続けているのだ。

[読書]成りあがり How to be BIG―矢沢永吉激論集5

成りあがり How to be BIG―矢沢永吉激論集 (角川文庫)成りあがり How to be BIG―矢沢永吉激論集 (角川文庫)
著者:矢沢 永吉
販売元:角川書店
発売日:2004-04
おすすめ度:4.5
クチコミを見る

「矢沢永吉」とはもはや一人の個人の事ではなく、生き方のリファレンスモデルなんだろうとさえ思う。

彼自身があらゆる負の環境、感情にどうやってオトシマエをつけてきたのか、率直な言葉で表現される。

困ったことや辛いことに直面する度に「こんな時に矢沢ならどうするだろうか」と考えることが次の行動に繋がるのであれば、それで良いんじゃないか。この一冊がファンの間でバイブル化している理由もきっとそのあたりにあるのだろう。

自分自身にもっとも厳しく接するからこそ、自分自身への信頼が生まれる。弱い自分もすべて受け入れた上で、それでも甘えを許さない。そんな生き方、誰でも憧れる。誰だってそうありたい。

彼の凄さは、今でもそんな憧れの対象で居続けていることだ。