特定のドメインに2つのIPがあるとします(ラウンドロビンDNS)。
一方のIPが応答しなくなった場合、クライアントはもう一方のIPに接続しようとしますか?それとも、ドメインとの通信の確立に失敗するだけですか?
DNSラウンドロビンは、ロードバランサーの代わりにはなりません。 DNSサーバーはダウンしているノードのIPを引き続き提供するため、一部のユーザーはサービスにアクセスでき、一部のユーザーはサービスにアクセスできません。
クライアントがDNSクエリを行うと、DNSサーバーはその名前に関連付けられたIPアドレスのallを返します。魔法は、すべてのクエリに対してそのリストの順序をローテーションするDNSサーバーによって行われます。ただし、機能するIPが見つかるまでリストを「ウォーク」する機能を実装するかどうかは、アプリケーション次第です。そして、ほとんどのアプリケーションはそれを行いません。
奇妙なことに、Windows Telnetは、返されたIPのリンクリストをたどるのに十分スマートなアプリケーションの1つです。たとえば、google.comにtelnetしようとすると、この動作を自分で確認できます。最終的に失敗するまでlong時間がかかることがわかります。これは、google.comに多数のIPアドレスがあり、Telnetクライアントがすべてを試行していたためです。
ロードバランサーを使用しても、単一障害点が残ります。ロードバランサーがオフラインになると、ウェブサイトがダウンします。
上記の回答に反して、ほとんどのHTTPクライアントはすでに[〜#〜] do [〜#〜]までDNSクエリから返された各IPアドレスの試行をサポートしています有効な応答を返します。こちらをご覧ください:
http://blog.engelke.com/2011/06/07/web-resilience-with-round-robin-dns/
作者は以下のブラウザをテストしたところ、正常に動作することがわかりました。
Windows 7上のChrome 11
Windows 7上のFirefox 4.0
Windows 7上のInternet Explorer 8
Windows 7上のOpera 11
Windows 7上のSafari 5
Windows上のInternet Explorer 7 XP(顕著な遅延の後)
Windows上のFirefox 4.0 XP(顕著な遅延の後)
Android 2.3.3のAndroidネイティブブラウザ
iOS 4.3.3のiPhoneネイティブブラウザ
ラウンドロビンを使用しても、ロードバランシングサーバーのすべての機能が実行されるわけではありません。たとえば、両方のサーバーからの応答時間を監視し、もう一方が必要な速度で応答しない場合は、より多くのトラフィックを一方にルーティングできます。回復力については、単一障害点がなくなったので、ラウンドロビンDNSがおそらくより良いソリューションと言えます。
ラウンドロビンDNSは通常、アドレスを提供しているサーバーのステータスへのフィードバックを持ちませんが、それらのアドレスごとに何らかの種類のロードバランサー(ルーターベースのトリックを含む)がある場合に役立つことがあります。
物事が失敗したときにDNSを更新するトリックがあります。これが発生した場合、TTLが適切に短いラウンドロビンDNSが疑似ロードバランサーになる可能性があります。