[DNSラウンドロビンについて]
DNSラウンドロビンはサーバの負荷分散の手法の1つです。
具体的にはある1つのドメインに複数のサーバ(IPアドレスと言った方が良いかもしれません)を
割り当てます。そしてホスト名とIPアドレスの対応関係を利用して負荷分散を行ないます。
これはDNSサーバのしくみが判る人だとイメージが掴みやすいと思います。
例えば3台のサーバ(A:206.223.999.997, B:206.223.999.998, C:206.223.999.999)に
hoge.maido3.comというドメインをTTL=300で割り当てているとします。
この hoge.maido3.com をDNSコンテンツサーバを指定して、digコマンドで調べると
以下の様になります。
hoge.maido3.com 300 IN A 206.223.999.997
hoge.maido3.com 300 IN A 206.223.999.998
hoge.maido3.com 300 IN A 206.223.999.999
|
この結果 hoge.maido3.com にアクセスすると、1番目にAサーバが、2番目にBサーバが、
3番目にCサーバが割り当てられています。
この状態ですと1番目のAサーバが呼び出される事になります。
では、続けてdigコマンドを打つとどうなるでしょう?
実はこうなります。
hoge.maido3.com 300 IN A 206.223.999.998
hoge.maido3.com 300 IN A 206.223.999.999
hoge.maido3.com 300 IN A 206.223.999.997
|
1番目に呼び出されるサーバがAからBに変わりました。
これがDNSラウンドロビンの特徴です。
1つのドメインに複数のIPアドレスが登録されていた場合、DNSサーバは登録されている
内容を問い合わせがあるたびに順番に答えます。
ちょうどdigコマンドで問い合わせをした時に、1回目はAサーバ(IPの末尾が997)を答え、
2回目にはBサーバ(IPの末尾が998)を答える事になります。
このDNSの応答によって結果的にサーバへのアクセスが分散される事になります。
もっと負荷を分散したいと思った場合は、コンテンツ内容も含めて「同じ」サーバを
用意して、そのサーバをDNSのラウンドロビンのレコードに追加します。
逆に故障等によってアクセスできなくなったサーバが発生した場合は、ラウンドロビンの
レコードから削除すれば故障したサーバ以外のサーバにアクセスが振り分けられます。
便利な様に見えますが、ラウンドロビンにも欠点があります。
それは、アクセスが切り替わるまでに一定時間かかる事です。
前述の例で仮にCサーバが故障したので、A・Bサーバだけでラウンドロビンする様に
変更したとします。その場合、新しい情報がDNSキャッシュサーバに完全に浸透するのに
約1時間かかります。
(これはTTL=300のドメインについて実地で観察した結果です。)
TTL=300だから5分で切り替わるのではないか、と思われるかもしれませんが、
しかし、全世界のキャッシュサーバが同タイミングで一斉に切り替わる訳では
ありません。キャッシュサーバ内のデータの寿命(これはTTLで指定されています)は
各サーバとも違っています
(なぜなら一番最初にキャッシュされたタイミングが各サーバともまちまちだから、です。)
また(どういう仕組みで動いているのかよく判りませんが)キャッシュサーバの一部には
TTLの値を無視してサーバ側で設定されている時間だけキャッシュデータを保持する
ものも存在します。
なので、実際に該当のサーバへのアクセスが完全に無くなるのはTTL以上の時間が
かかります。
DNSラウンドロビンを実施する際には上記の様なDNSの浸透を早くする為にTTLを
短めに設定する事が一般的です。
(しかしながらTTLを限りなく短く設定する事は、一方でDNSサーバの負荷を
上げてしまう弊害が発生します。300(5分)以下に設定するのはお勧めしません。)
最後にBIG-serverのサイトでも紹介ページがありますので、こちらもご覧下さい。
|