1つのドメイン名に複数の対応するIPアドレスがある可能性はありますか?


89

たとえば、に接続するときはwww.example.com、最初にに接続しようとし192.0.2.1ます。そして、最初の試行が失敗した場合は、試行し192.0.2.222ます。

出来ますか?1つのドメイン名に複数のバックアップIPアドレスを登録できますか?


このように正確に機能するわけではありません(ラウンドロビンを使用)。ホストに複数回クエリを実行すると、ホストに障害が発生したときだけでなく、クエリを実行するたびに異なるIPが返されます。
karatedog 2012

@karatedog、最初のIPに接続できない場合、ソケット接続は次のIPに接続しようとすると想定していました
Akash Kava

4
@AkashKava:単一の接続には複数の内部ステップがあります。簡略化:アプリケーションはDNSを照会し、IPアドレスを取得します。次に、そのIPアドレスに接続します。その接続が失敗した場合、これを行うように明示的にコーディングされている場合にのみ、アプリケーションは最初のステップに戻ってDNSを再度照会することはありません。また、DNSサーバーに複数回クエリを実行しても、必ずしも異なるIPアドレスが得られるとは限りません。つまり、ストックDNSを負荷分散の目的で使用することはできません。
karatedog 2015

この手法を使用して、複数のロードバランサーをスケーリングできますか?
VikasVerma20年

回答:


65

これはラウンドロビンDNSです。これは、負荷分散のための非常に単純なソリューションです。通常、DNSサーバーは、着信DNS要求ごとにDNSレコードをローテーション/シャッフルします。残念ながら、これはフェイルオーバーの実際の解決策ではありません。サーバーの1つに障害が発生した場合でも、一部の訪問者はこの障害が発生したサーバーに誘導されます。


3
それは回復時間に関するあなたの期待に依存します。提供されたサービスが数秒または数分間ダウンする可能性がある場合は、それに応じてDNSを更新できます(たとえば、障害が発生したシステムのIPを取り出す)。これが受け入れられない場合、DNSは役に立ちません。また、ロードバランサーと高可用性ネットワーク構造を使用する必要があります。
イェンスブラッドラー2014

クライアントがリストからIPを選択する方法を知っていますか?ランダムな選択ですか、それともクライアントはリストの最初のものを選択する必要がありますか?最初のケースでは、ラウンド/ロビンはあまり役に立ちません。
トビア2018

レコードをシャッフルまたはローテーションするのはDNSサーバーの仕事です。ほとんどのクライアントは最初のレコードのみを使用します。たとえば、Bind9は、このタイプのレコードセットに異なる順序を適用するように構成できます。bind.isc.org/ doc
Jens Bradler 2018

この手法を使用して、複数のロードバランサーをスケーリングできますか?
VikasVerma20年

48

あなたはそれを行うことができます。それは大物もやっていることです。

最初のクエリ:

» host google.com 
google.com has address 74.125.232.230
google.com has address 74.125.232.231
google.com has address 74.125.232.232
google.com has address 74.125.232.233
google.com has address 74.125.232.238
google.com has address 74.125.232.224
google.com has address 74.125.232.225
google.com has address 74.125.232.226
google.com has address 74.125.232.227
google.com has address 74.125.232.228
google.com has address 74.125.232.229

次のクエリ:

» host google.com
google.com has address 74.125.232.224
google.com has address 74.125.232.225
google.com has address 74.125.232.226
google.com has address 74.125.232.227
google.com has address 74.125.232.228
google.com has address 74.125.232.229
google.com has address 74.125.232.230
google.com has address 74.125.232.231
google.com has address 74.125.232.232
google.com has address 74.125.232.233
google.com has address 74.125.232.238

ご覧のとおり、IPのリストは回転しましたが、2つのIP間の相対的な順序は同じままでした。

更新:DNSラウンドロビンがフェイルオーバーにどのように便利でないかについて自慢するコメントがいくつかあるので、ここに要約があります:DNSはフェイルオーバー用ではありません。したがって、フェイルオーバーには明らかに適していません。フェイルオーバーのソリューションとして設計されたことはありません。


1
このラウンドロビンを機能させるには、何かを有効にする必要がありますか、それともすべてのDNSサーバーによって自動的に実行されますか?LinuxとMSDNSが1つずつあります。
Akash Kava 2012年

3
フェイルオーバーをカバーしていないのに、なぜグーグルはこれを行うのでしょうか?
ジョセフパーシー2016年

12
@JosephPersie:DNSはフェイルオーバーに使用されないため。同じドメイン名に複数のIPを与えることにより、着信要求はそれらのIPアドレスをリッスンするサーバー間で単純に分割されます。バックエンドのヘルスチェックを行わない、第1レベルの負荷分散と考えてください。何千ものサーバーがない場合は、これは必要ありません:-)
karatedog

ロードバランサーがダウンしていて、リクエストが同じバランサーに転送されるとどうなりますか?
JitendraVispute19年

1
@JitendraVispute:DNSは、返すIPアドレスの背後にあるサービスを認識していません。つまり、DNSサーバーから返されたIPアドレスの背後に壊れたサーバーまたは壊れたサービスがある場合、そのIPへの要求は失敗します。
karatedog

2

はい、これは可能ですが、イェンスが言ったように便利ではありません。Alteonのような次世代ロードバランサーを使用します。これはDSSP(Distributed site state Protocol)と呼ばれる独自のプロトコルを使用し、定期的なサイトチェックを実行して、サービスがローカルまたはグローバルの両方、つまり異なる地理的領域で利用可能であることを確認します。ただし、マスターDNSで、そのIPまたはサービスの権威ネームサーバーとして構成することにより、URLまたはサービスをデバイスに委任する必要があります。これを行うことにより、デバイスはDNSクエリに応答し、ラウンドロビンによるサービスがあるIP、またはいくつかのメトリックから選択した方法に従って輻輳していないIPを解決します。


1
これは何よりも宣伝のように聞こえます。ロードバランサーは、DNSの世界では優れたパフォーマンスを発揮しません(仕様に関して)。正確に言うと、「マスターDNSでURLまたはサービスを委任する」場合、ネームサーバー/ DNSにURLまたはサービスの概念はありません。委任する場合、ゾーン(ドメイン)を他のネームサーバーに委任します。「そのIPまたはサービスの権威ネームサーバーとして」したがって、ネームサーバーは、IPアドレスやサービスではなく、ゾーン/ドメインに対して権限があります。
Patrick Mevzek 2018

その作業点から、それらは機能します。GEO-LOCATIONなどの高度な機能を組み合わせて、またはとりわけメトリックの応答性が高いサーバーの場合。
Ezra A.Mosomi 2018

1
そして、それらは同時に多くの問題を引き起こします。特効薬はありません。すべてに機能と欠点があります。どのネームサーバーでも、クライアントに基づいて異なるIPでジオロケーションと応答を行うことができ、そのためのロードバランサーは必要ありません。役立つ標準もあります:EDNSクライアントサブネット。
Patrick Mevzek 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.