特定のドメインに 2 つの IP があるとします (ラウンドロビン DNS)。IP
の 1 つが応答しなくなった場合、クライアントは他の IP に接続しようとしますか? それとも、ドメインとの通信を確立できないだけですか?
答え1
DNS ラウンドロビンは、ロード バランサーの適切な代替手段ではありません。DNS サーバーはダウンしているノードの IP を配布し続けるため、一部のユーザーはサービスにアクセスできますが、一部のユーザーはアクセスできません。
クライアントがDNSクエリを実行すると、DNSサーバーは全てその名前に関連付けられた IP アドレスのリストです。DNS サーバーがクエリごとにリストの順序をローテーションすることで、この魔法が実現します。ただし、機能する IP が見つかるまでリストを「調べる」機能を実装するのはアプリケーション次第です。一部のアプリケーションでは、この処理は実行されません。
奇妙なことに、Windows Telnetは、返されたIPのリンクリストをたどるほど賢いアプリケーションの1つです。たとえば、google.comにtelnetしようとすると、この動作を確認できます。長さついに失敗しました。これは、google.com に多数の IP アドレスがあり、telnet クライアントがそれらすべてを試行していたためです。
答え2
ロード バランサーを使用しても、単一障害点は残ります。ロード バランサーがオフラインになると、Web サイトがダウンします。
上記の回答とは反対に、ほとんどのHTTPクライアントはすでにする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 XP 上の Internet Explorer 7 (かなりの遅延の後)、
Windows XP 上の Firefox 4.0 (かなりの遅延の後)、
Android 2.3.3 上の Android ネイティブ ブラウザ
、iOS 4.3.3 上の iPhone ネイティブ ブラウザ
ラウンドロビンを使用すると、両方のサーバーからの応答時間を監視したり、もう一方のサーバーの応答速度が遅い場合に、より多くのトラフィックを一方のサーバーにルーティングしたりするなど、負荷分散サーバーのすべての機能が実行されるわけではありません。回復力に関しては、単一障害点がなくなるため、ラウンドロビン DNS の方がおそらくより優れたソリューションだと思います。
答え3
ラウンドロビン DNS は通常、アドレスを提供しているサーバーのステータスに関するフィードバックを提供しませんが、各アドレスに対して何らかのロード バランサー (ルーター ベースのトリックを含む) を用意すると役立つ場合があります。
障害が発生したときに DNS を更新するトリックがあります。障害が発生した場合、適切に短い TTL を持つラウンドロビン DNS は疑似ロード バランサーとして機能します。