web-dev-qa-db-ja.com

私のBINDゾーンは本当に冗長性と負荷分散を提供しますか?

(たとえば)次のIPアドレスがあります。

1.1.1.1
2.2.2.2

それぞれが同じWebサイトをホストしますが、サーバーは異なります。 Webユーザーがリクエストごとに異なるIPアドレスにアクセスするようにすることで、非常に単純な負荷分散を実行したいと考えています。私たちのアプリケーションはこれを完全にサポートしているので、認証などの技術的な問題はありません。

私はこれが機能していると思いますが、よくわかりません。 nslookupを使用してゾーンを照会すると、IPはラウンドロビン方式で交互になります。これはすばらしいことです。

Addresses:  1.1.1.1
      2.2.2.2

.。

Addresses:  2.2.2.2
      1.1.1.1

Httpサーバーが1番目のIPで利用できない場合、Webブラウザーは2番目のIPを使用するだけであり、これもかなりクールです。

ただし、ブラウザがIP(Chromeなど)を取得すると、それを維持するため、これをテストするのは非常に難しいようです。多分これは良いことですか?それで、私がこれをどのように説明したかに基づいて、それは冗長性を備えたロードバランサーとして機能するように聞こえますか?

2
Nick Bolton

DNSの「負荷分散」は、単一のクライアントへの負荷を分散することを意味するのではなく、異なるクライアント間で負荷を分散することを意味します(クライアントAが最初のIPを取得し、クライアントBが2番目のIPを取得し、クライアントCが最初のIPを取得するなど)。

同じブラウザセッション内の2つの異なるマシンに同じ名前を解決すると、特にセッションCookieなどを使用している場合に、望ましくない動作が発生する可能性があります。

5
lrosa

これはDNSラウンドロビンと呼ばれ、「貧乏人の負荷分散」とも呼ばれます。実装は簡単ですが、ヘルスチェックを提供せず、サーバーの負荷を考慮せず、主要なインストールでは地理的な場所を考慮しないため、大きな欠点があります。

たとえば、ブラウザ/ OSがIPのいずれかでスタックし、そのIPの背後にあるサーバーがクラッシュした場合でも、リクエストはそのサーバーに送信されます。

ウィキペディアのページから、主な欠点は次のとおりです。

ラウンドロビンDNSには実装は簡単ですが、DNS階層自体のレコードのキャッシュや、クライアント側のアドレスのキャッシュと再利用など、問題のある欠点があります。これらの組み合わせは管理が難しい場合があります。ラウンドロビンDNSは、サービスの可用性だけに依存するべきではありません。リスト内のアドレスの1つにあるサービスに障害が発生した場合、DNSは引き続きそのアドレスを配布し、クライアントは引き続き動作不能なサービスに到達しようとします。また、ネームサーバーが照会されるたびにアドレスレコードの順序が変わるだけなので、それ自体では負荷分散に最適な選択ではない場合があります。ユーザーのIPアドレスとその地理的位置、トランザクション時間、サーバーの負荷、ネットワークの輻輳などを一致させることは考慮されていません。ラウンドロビンDNS負荷分散は、同等の容量のサーバーへの多数の均一に分散された接続を持つサービスに最適です。それ以外の場合は、負荷分散を行います。

DNSラウンドロビンの詳細 ここ

これをWebアプリケーションで検討している場合は、 HAProxy を確認することをお勧めします。これにより、安価でありながら実際の冗長性を実装できます。

お役に立てれば!

3
Marco Ramos