WindowsでDNSのラウンドロビン機能を利用する:Tech TIPS
DNSサーバのラウンドロビン機能を利用すると、1つのホスト名に複数のIPアドレスを割り当て、それを順番に循環させながらクライアントに返すことができる。これにより、複数台のサーバを自動的に切り替えることができるので、負荷分散を実現できる。
対象OS:Windows 2000 Server / Windows Server 2003
解説
Webサーバやアプリケーション・サーバなどの負荷分散を実現するために、DNSサーバの「ラウンドロビン機能」を利用することがある。これは、同じサービスを提供する複数のサーバを用意しておき、それらへのアクセスを振り分けて分散させるために使われる機能である。その仕組みは非常に簡単で、1つのFQDN名(サーバ名)に対して、複数のIPアドレスを割り当てておき、DNSクライアントからの要求に応じて異なるIPアドレスを返す、というものである。
例えば、www.example.co.jpというWebサーバのFQDNに対して、10.20.1.1〜10.20.1.5というIPアドレスを持つ5台のWebサーバを用意する。通常は、サーバごとに異なるサーバ名(www1〜www5など)を付けるのだが、それでは、アクセスする際に5つのFQDN名を使い分けねばならず、面倒である。そこで1つのFQDN名で、この5台のサーバへアクセスするために使われるのが、DNSのラウンドロビン機能である。
www.example.co.jpというDNSのレコード(Aレコード)に対して、5つのIPアドレスを割り当てておくと、DNSのクライアントがアクセスするたびに、それらのIPアドレスが順番に返される(正確には、単一のIPアドレスではなく、IPアドレスのリストが返される)。アクセスするたびに異なるIPアドレスが返されるので、結果的に負荷分散が実現できる。返されるIPアドレスは、10.20.1.1→10.20.1.2→10.20.1.3→…→10.20.1.5などと順番に変わり、最後までいくと、また最初のIPアドレスへと循環する(このように、循環するリストやサービスなどを指してラウンドロビンという)。大規模な商用Webサイトでは、このような仕組みを使い、1つのFQDN名に対して複数のサーバ(主にWebサーバ)を割り当てて運用している。この様子は、例えば「nslookup www.microsoft.com」などを何度か実行してみれば分かる。
ただし、ここで返されるIPアドレスは、あくまでもDNSサーバに登録されている情報であり、実際にそのIPアドレスのサーバが稼働しているかどうかとは無関係である。返されたIPアドレスの先にあるサーバが、実際にそのときアクセスできるかどうかは、DNSサーバでは関知していないので、必要ならば別の冗長機能を導入したり(ダウンしたサーバを自動的に再起動したり、別のサーバに振り分ける仕組みや装置を導入する)、クライアント側の再試行機能(アクセスできない場合は、別のサーバIPアドレスへの接続を試行する)に“期待”したりする(アプリケーションによっては、アクセスできない場合は自動的に別IPアドレスへ再試行する機能を持っている)。
本TIPSでは、DNSサーバにおける、ラウンドロビン・レコードの設定と確認方法について解説する。クライアント側における、DNSラウンドロビンの確認方法についてはTIPS「DNSのラウンドロビン設定を確認する」を参照していただきたい。
操作方法
DNSサーバで、ラウンドロビン・レコードを定義する方法は非常に簡単である。ある1つの名前に対して、複数のレコードを定義するだけでよい。例えば次は、www(www.example.co.jp)という名前に対して、複数のホスト・レコード(Aレコード)を定義した場合の例である。
定義したレコード
www(www.example.co.jp)というホスト名に対して、5つのAレコードを定義している。
(1)定義するドメイン。
(2)割り当てる対象のホスト名。同じ名前のレコードが複数あることに注意。
(3)Aレコードを定義している。デフォルトではすべてのレコード種類についてラウンドロビンが利用できるが、Windows Server 2003ではDNSサーバのレジストリ・エントリDoNotRoundRobinTypesを設定すると、特定の種類のレコードについてラウンドロビンを無効にできる。詳細はDNSサーバのヘルプ・ファイルを参照のこと。ただし、実際にはAレコードとCNAMEレコード以外では利用しない方がよい(一般的にはそれら以外ではほとんど使われていないので、クライアントによっては動作しない可能性がある)。
(4)定義したIPアドレス。これらのIPアドレスが順番に返される。
このホスト・レコードの作り方は、通常の作成方法と同様であり、[操作]メニューの[新しいホスト]で該当するレコードを順番に作成すればよい。
レコードの定義
通常のAレコードの場合と同様にして、複数のレコードを定義すればよい。
(1)このホスト名は同じにして、複数のIPアドレスを定義する。
(2)このIPアドレス部分を変更しながら、レコードを追加する。定義するIPアドレスは、同一サブネット上だけでなく、別のサブネット上のIPアドレスでもよい。
(3)逆引きレコードを作成する場合は、これをオンにしておく。
●ラウンドロビン機能の有効/無効設定
DNSサーバのラウンドロビン機能は、デフォルトでは有効になっているが、設定によってはこれを無効にすることもできる。DNSサーバの管理ツールにおいて、サーバ名を右クリックしてポップアップ・メニューの[プロパティ]を実行すると、次のようなダイアログが表示される。[詳細]タブにある[サーバ オプション]でラウンドロビン機能の有効/無効を設定することができる。
ラウンドロビン設定の確認
DNSサーバのプロパティ・ダイアログで、ラウンドロビンの設定を確認できる。サーバ名を右クリックしてポップアップ・メニューの[プロパティ]を実行すると、このダイアログが表示される。
(1)[詳細]タブを選択する。
(2)これをオンにすると、ラウンドロビン機能が有効になる。デフォルトではオンになっているはずである
●ラウンドロビンの設定の確認
ラウンドロビン設定が正しく機能しているかどうかは、nslookupコマンドを使って確認することができる。nslookupで該当レコードを確認すれば、実行するたびに、レコードの順番が入れ替わっている(循環している)ことが分かるだろう(同じ名前のレコードのうち、どのIPアドレスが先になるかは、特に指定することはできない。このDNSサーバでは、IPアドレスの逆順になっている)。
C:\>nslookup
Default Server: localhost
Address: 127.0.0.1
> www.example.co.jp ……1回目の問い合わせ
Server: localhost
Address: 127.0.0.1
Name: www.example.co.jp
Addresses: 10.20.5.5, 10.20.5.4, 10.20.5.3, 10.20.5.2
10.20.5.1 ……1回目の問い合わせ結果
> www.example.co.jp ……2回目の問い合わせ
Server: localhost
Address: 127.0.0.1
Name: www.example.co.jp
Addresses: 10.20.5.4, 10.20.5.3, 10.20.5.2, 10.20.5.1
10.20.5.5 ……2回目の問い合わせ結果
> www.example.co.jp ……3回目の問い合わせ
Server: localhost
Address: 127.0.0.1
Name: www.example.co.jp
Addresses: 10.20.5.3, 10.20.5.2, 10.20.5.1, 10.20.5.5
10.20.5.4 ……3回目の問い合わせ結果
……(以下省略)……
このように、問い合わせるたびに、IPアドレスのリストが循環している。だがラウンドロビン機能を無効にしていると、問い合わせ結果のIPアドレスの順番は常に同じになる。
■この記事と関連性の高い別の記事
- DNSのラウンドロビン設定を確認する(TIPS)
- nslookupの基本的な使い方(イントラネット編)(TIPS)
- DNSの動的更新を無効にする(TIPS)
- ドメイン名に対してIPアドレスを割り当てる(TIPS)
- DNSサービスのルート・ヒントを変更する(TIPS)
- Windowsでリモートネットワークの名前解決をhosts/lmhostsで行う(TIPS)
- Windowsの名前解決のトラブルシューティング(DNSリゾルバーキャッシュ編)(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.