DNSベースのロードバランス
インターネットのDNS(Domain Name System)は、ドメイン名をIPアドレスに解決する仕組みです。ラウンドロビン型のDNSロードバランスは、特別なハードウェアやソフトウェアのコンポーネントを必要としないロードバランス方式として人気があります。DNSロードバランスを実装するには、DNSの基本とDNS解決のプロセスを十分に理解する必要があります。
例えば、ブラウザからwww.iberindia.com
というURLが要求されたとします。ブラウザはwww.iberindia.com
のサーバに到達する必要がありますが、その前にこのURL文字列をiberindia
サーバのIPアドレスに変換しなければなりません。DNSは、URL文字列のドメイン部分(ここではiberindia
)をIPアドレスに変換します。
ブラウザ側は、まず解決済みのアドレスが自分のキャッシュに入っていないかを確認します。最近www.iberindia.com
を開いたことがあれば、そのIPアドレスはブラウザのローカルDNSキャッシュに残っています。キャッシュにあれば、そのIPアドレスを使って接続を直接開きます。www.iberindia.com
を指すIPアドレスがキャッシュに複数ある場合は、サーバとのHTTP接続が成立するまで順番にIPアドレスを試していきます。
このシナリオは一般論として書いたものです。ブラウザによって動作が異なりますし、設定を変更すれば動作も変わります。ブラウザのDNSキャッシュは、ブラウザのHTTPコンテンツキャッシュとは別に存在します。ユーザーの管理が及ぶ範囲は、DNSキャッシュよりもHTTPコンテンツキャッシュの方が広いのが一般的です。
IPアドレスがキャッシュにないか、キャッシュ内のIPアドレスがどれも有効ではない場合は、あらためてIPアドレスを取得する必要があります。ブラウザは、名前をIPアドレスへと解決するためにオペレーティングシステムと通信します(オペレーティングシステムにもDNSキャッシュがあり、キャッシュ内のIPアドレスをブラウザに通知できることがあります)。
オペレーティングシステムにドメインのIPアドレスがキャッシュされていなければ、DNSサーバ(ドメインネームサーバ)に問い合わせが発行されます。図1はDNS解決のフローを示しています。ユーザーマシンにあるローカルリゾルバは、ルートDNSサーバに問い合わせを発行します。これに応じて、ルートサーバはアドレスが取得されるまで次々とサブDNSサーバと通信します。取得されたアドレスはブラウザに返されます。一致するIPアドレスが見つからない場合は、エラーコードが返されます。
DNSの仕組みを理解したという前提で、ラウンドロビン方式の説明に戻ります。ユーザーからのDNS要求に対するDNS応答を適切に扱うには、1組のサーバをラウンドロビン方式で操作します。例えば、1つのDNS要求に対して複数のIPアドレスを応答するのも、この方式の実装例です。クライアントがIPアドレスを要求すると、ブラウザはDNS応答の最初のIPを試します。このアドレスが無効であれば次のIPを試す、という流れで手続きは進みます。サーバIPに正常に接続するたびに、返されるIPの順序も変わります。従って、クライアントがIPを要求すると前回とは別のIPが返されることになり、実質的に負荷が複数のサーバに分散されます。
このテクニックは、WebサーバとFTPサーバの両方で負荷分散に効果があります。世界各国のユーザーからアクセスがあるようなサーバに地理的なロードバランスを提供する方法として、これはよく使われます。要求にタイムリーに応じるには、サーバの方も世界各地に分散して配置すると有効です。要求元のクライアントからなるべく近い場所にあるサーバで要求を扱うことは、明らかに理にかなっています。このようなロードバランスを設定するには、クライアントの地域や隣接する場所にあるサーバのIPリストをDNS要求で返されるIPリストの先頭に配置します。使用できるローカルサーバが複数ある場合は、要求ごとに順序を変えてDNSリストを入れ替える(負荷を均等にする)ことができます。
残念ながら、単純明快さを長所とするこの方式にも欠点があります。例えば、稼働状況の自動チェックを行わない場合、セットになっているローカルサーバがすべてダウンしたときも、DNS応答に含まれるその地域のIPリストにダウン中のサーバIPが残ってしまいます。また、ラウンドロビン方式のDNSロードバランスでは各ユーザーからの負荷の大小は考慮されず、単に要求が順番にサーバに割り振られるに過ぎません。このような問題を克服するには、サーバの可用性と負荷を調べる機能を実装します。ご想像のとおり、このような機能はあっという間に複雑化するため、大規模ポータルでは自前でサポートするよりもこの分野で実績のある商用プロバイダを頼るのがよいでしょう。
ロードバランスのソリューションを検討する際に着目すべきはパフォーマンス、信頼性、拡張性の3点であり、さらに各自の要求事項や予算に基づいて各ソリューションの長所・短所を判断してください。