unoh.github.com

ベンチャー流サーバ構築のススメ(ネットワーク編)

Mon Jun 26 22:20:00 -0700 2006

尾藤正人です。

前回のエントリ ベンチャー流サーバ構築のススメ(ハードウェア編) では多くのコメント、トラックバック、ブックマークをしていただきました。ありがとうございます。僕自身多くのことで勉強になりましたし、新たな発見もありました。

技術は公開、共有して発展するものだと思っていますので、自分の無知をさらけ出すのを恐れずにいろいろ公開して、自分自身も成長していければと思っています。

今回はサーバ構築するときのトピックとして、どのようにネットワークを構築したかを書いてみます。

サーバ構築に限ったことではありませんが、重要なのは質を下げずにコストを下げることです。ネットワーク部分でお金がかかるのは回線ぐらいですから、ネットワーク周りで重要なのは人的コストを下げること、つまり管理コストを下げることです。

・回線は2回線以上用意する

2回線以上用意するのは高可用性を確保するためです。通常は全ての回線を使用するのですがいずれかの回線が切れたときに片肺飛行できるようにしておきます。

・DNSは各回線の内側に設置して回線が切れたときに自動的に切り替わるようにしておく

network
network posted from フォト蔵

DNSは各回線の内側に設置しておきます。例えば上図のような場合、回線A側のDNSは回線AのIPアドレスを返すようにして、回線B側のDNSは回線BのIPアドレスを返すようにします。こうするとどちらかの回線が切れたときは切れたほうの回線のDNSにアクセスできなくなるので、自動的に生きている方の回線に接続されるようになります。

ここで重要なのはTTLの値を短くしておくことです。こうしないと回線が切れたときにDNSキャッシュが残ってしまって切れてるほうの回線に接続してしまい、自動切換えがうまく機能しません。

この設定をやってるときに気づいたのですが、yahooやgoogleなどのDNSも同様にTTLを短くしているようです。高可用性を確保するために昔からよく使われていた手法なのでしょうか?

・グローバルにはプロキシサーバを設置

1回線で8IPをもらった場合は、ネットワークアドレス、ブロードキャストアドレス、ルータ/DNSで3IP使用しますので、残りの5IPをプロキシに使用できます。プロキシサーバはapache+mod_proxy_balancerでローカルのwebサーバに振り分けを行います。こうすることでローカルにいくつでもwebサーバを設置することができ、容易にスケールアウトすることができます。

・ローカルのIPアドレスはクラスBのIPアドレスを使用する

将来的にサーバが増えた場合に対応できるようにローカルIPアドレスには十分なIPアドレス空間を用意しておきます。クラスBですから論理上最大65534台のサーバを同一セグメント上に持つことができます。もちろん同一セグメント上にそれだけの数のサーバを置くことはないとは思いますが、アドレス空間が広いことに越したことはありません。

・各サーバには恒久的なホスト名(物理名)を連番でつける

各サーバには連番で無機質なホスト名をつけます。ウノウではこれを物理名と呼んでいます。物理名は恒久的な名前でサーバの識別にのみ使用します。変更することはありません。サーバが壊れた時には欠番が出ます。欠番を埋めるようなことはしません。ただ単純に順番に名前をつけていきます。物理名はイーサネットカードのように物理的なハードウェアに対して1対1で対応する名前になってます。

・各サーバには役割に応じたホスト名(論理名)をつける

各サーバに各役割に応じたホスト名を連番でつけます。ウノウではこれを論理名と呼んでいます。全てのサービスはそれぞれにつけられた論理名でアクセスし、物理名は使用しません。

1台のサーバが複数の論理名を持つことができます。例えば
サーバ1: サービスAのwebサーバ、サービスBのwebサーバ
サーバ2: サービスAのwebサーバ
サーバ3: サービスBのwebサーバ
のような構成にすることもできます。

サーバの構成を変更するときは論理名を付け替えるだけ。日々刻々と変化するサービスの負荷に柔軟に対応してサーバを効率よく使用するためには、構成を容易に変更して対応できる状態にしておくことが必要不可欠です。



前回のエントリで今回はソフトウェアの部分を書くと言ってましたが、よくよく考えるとその前にネットワーク部分の話があったので今回はそれを書きました。次回こそはソフトウェアの部分について書きたいと思います。