DNSラウンドロビンとは、DNSサーバの設定で1つのドメイン名に対して複数の
IPアドレスを回答させるため、複数のAレコードを作成しておくことです。
これによって、対象となるサーバの負荷を分散させることが出来ます。
※DNSラウンドロビンの他に単一のAレコードやCNAMEレコードで自宅サーバの
IPアドレスやドメイン名を返答する設定などは以下のページに記載しました。
自宅サーバとレンタルサーバとで、DNSラウンドロビンを行いました。
まず、エックスサーバのDNS編集にて「www.hikaku-server.com」に対して
Aレコードを2つ作成しました。1つ目はエックスサーバのレンタルサーバ、
2つ目は自宅サーバのIPアドレスです。
※「優先度」はMXレコードの場合のみ有効になる機能です。
nslookupで確認すると、正しく2つのIPアドレスが返答されました。
※「権限のない回答」というのは、そのゾーン情報を持っている権威サーバが回答した
のでは無く、それ以外のキャッシュサーバが回答したよ、という意味です。
その後、DNSラウンドロビンを行っている「www.hikaku-server.com」へ
WEBブラウザから複数セッションで何度かアクセスしましたが、自宅サーバの
方にアクセスが来ることは有りませんでした。要因はゾーンファイルのTTLの値
かと思います。
試しでBINDを構築し、ゾーンファイルの1行目に$TTL 1(レコードの生存時間は1秒)
とし、パソコン(リゾルバ)のコマンドプロンプトでipconfig /flushdnsでDNSキャッシュを
クリア後に「ping hikaku-server.com」を複数回実行すると、2つのIPアドレスへ
アクセスしに行きました。
nslookupで直接権威サーバへアクセスすると、ラウンドロビンされることが確認できました。
※試しに、殆ど実施する機会の無い逆引き(PTRレコード)の複数記載をやってみました
が同じようにラウンドロビンでされました。
DNSキャッシュに1.1.1.1から載った場合。
※DNSサーバ内のゾーンファイルのTTLは35秒にしています。
DNSキャッシュに27.120.*.*から載った場合
また「DNSサーバは自分のアドレスに近いアドレスを優先的に選択する」と記載
しているRFCもあるそうです。
※Youtubeのサーバ群などは、このRFC通りのDNSラウンドロビンでも均等に
負荷分散できるようにIPアドレスの上位プレフィックスを同じ値で揃えているそうです。
DNSラウンドロビン自体には通信継続の保証性(セッション維持の仕組みなど)
と関連付けられる機能は無く、「障害を検知し、そのサーバのIPアドレスは
回答しない」などの機能も無いため、個人用途で利用するメリットは薄いかと
思います。複数のWEBサーバでのホームページデータの同期も面倒ですし。
個人運営の場合、障害対策として考えるとしても必要性は薄く、
個人のサーバでの対策は自分のPCとレンタルサーバ会社でのデータバックアップ
くらい迄で良いかと思っています。
もしも障害発生時のバックアップサーバとして自宅サーバを使用する場合は
DNSラウンドロビンでは無く、障害後にAレコードを変更し自宅サーバに向ける、
くらいで良いかと思います。しかしながら、障害の際にはコントロールパネルへも
ログイン出来ない(=DNSサーバでのレコード編集も出来ない)可能性も有りますね。
企業で有ればDNSラウンドロビンやWEBサーバの手前に負荷分散装置や
リバースプロキシを入れるなどの冗長化、障害対策も検討しても良いかも
しれませんね。DNSラウンドロビンの場合は迅速な障害検知の仕組みも
セットで導入したいですね。