アプリケーションの負荷分散に DNS ポリシーを使用する

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016

このトピックでは、アプリケーションの負荷分散を実行するように DNS ポリシーを構成する方法について説明します。

以前のバージョンの Windows Server DNS では、ラウンドロビン応答を使用した負荷分散のみが提供されていましたが、Windows Server 2016 の DNS を使用すると、アプリケーションの負荷分散のために DNS ポリシーを構成できます。

アプリケーションの複数のインスタンスを展開した場合は、DNS ポリシーを使用して、異なるアプリケーション インスタンス間でトラフィックの負荷を分散し、アプリケーションのトラフィック負荷を動的に割り当てることができます。

アプリケーションの負荷分散の例

次に、アプリケーションの負荷分散に DNS ポリシーを使用する方法の例を示します。

この例では、架空の会社である Contoso ギフト サービスを使用します。これは、オンライン贈答サービスを提供し、contosogiftservices.com という名前の Web サイトを持っています。

Web サイト contosogiftservices.com は、それぞれが異なる IP アドレスを持つ複数のデータセンターでホストされています。

Contoso ギフト サービスの主要市場である北米では、Web サイトはイリノイ州シカゴ、テキサス州ダラス、ワシントン州シアトルという 3 つのデータセンターでホストされています。

シアトルの Web サーバーは最適なハードウェア構成を備えており、他の 2 つのサイトの 2 倍の負荷を処理できます。 Contoso ギフト サービスは、次のようにアプリケーション トラフィックを送信します。

  • シアトルの Web サーバーにはリソースが多いため、アプリケーションの半分のクライアントがこのサーバーに送られます
  • テキサス州ダラスのデータセンターには、アプリケーションのクライアントの 4 分の 1 が送られます。
  • イリノイ州シカゴのデータセンターには、アプリケーションのクライアントの 4 分の 1 が送られます。

次の図は、このシナリオを示しています。

DNS Application Load Balancing with DNS Policy

アプリケーションの負荷分散のしくみ

このシナリオ例を使用して、アプリケーションの負荷分散の DNS ポリシーを使用して DNS サーバーを構成した後に、DNS サーバーは、シアトルの Web サーバー アドレスで 50%、ダラスの Web サーバー アドレスで 25%、シカゴの Web サーバー アドレスで 25% という確率で応答します。

したがって、DNS サーバーが 4 クエリを受信するごとに、シアトルは 2 つの応答、ダラスとシカゴはそれぞれ 1 つの応答を返します。

DNS ポリシーを使用した負荷分散で発生する可能性がある 1 つの問題は、DNS クライアントとリゾルバー/LDNS による DNS レコードのキャッシュです。これは、クライアントまたはリゾルバーがクエリを DNS サーバーに送信しないため、負荷分散に干渉する可能性があります。

負荷分散させる必要がある DNS レコードに低い Time-to-Live (TTL) の値を使用することにより、この動作の影響を軽減できます。

アプリケーションの負荷分散を構成する方法

次のセクションでは、アプリケーションの負荷分散に DNS ポリシーを構成する方法について説明します。

ゾーンのスコープを作成します。

最初に、contosogiftservices.com がホストされるデータセンターのゾーンのスコープを作成する必要があります。

ゾーンのスコープは、ゾーンの一意のインスタンスです。 DNS ゾーンには複数のゾーン スコープが存在する可能性があります。各ゾーン スコープには、独自の DNS レコード セットが含まれています。 同じレコードが複数のスコープに存在する可能性があり、IP アドレスは同じ場合も違う場合もあります。

注意

既定では、ゾーンのスコープは、DNS ゾーンに存在します。 このゾーンのスコープでは、ゾーンと同じ名前と、従来の DNS の機能がこのスコープで動作します。

次の Windows PowerShell コマンドを使用すると、ゾーンのスコープを作成します。

Add-DnsServerZoneScope -ZoneName "contosogiftservices.com" -Name "SeattleZoneScope"
Add-DnsServerZoneScope -ZoneName "contosogiftservices.com" -Name "DallasZoneScope"
Add-DnsServerZoneScope -ZoneName "contosogiftservices.com" -Name "ChicagoZoneScope"

詳細については、次を参照してください 追加 DnsServerZoneScope。

レコードをゾーンのスコープに追加します。

ゾーンのスコープに Web サーバーのホストを表すレコードを追加する必要があります。

SeattleZoneScope では、シアトルのデータセンターにある、IP アドレスが 192.0.0.1 のレコードwww.contosogiftservices.com を追加できます。

ChicagoZoneScope では、シカゴのデータセンターにある、IP アドレス 182.0.0.1 の同じレコード (www.contosogiftservices.com) を追加できます。

同様に、DallasZoneScope では、シカゴのデータセンターにある、IP アドレス 162.0.0.1 のレコード (www.contosogiftservices.com) を追加できます。

次の Windows PowerShell コマンドを使用して、レコードをゾーンのスコープに追加することができます。

Add-DnsServerResourceRecord -ZoneName "contosogiftservices.com" -A -Name "www" -IPv4Address "192.0.0.1" -ZoneScope "SeattleZoneScope"
Add-DnsServerResourceRecord -ZoneName "contosogiftservices.com" -A -Name "www" -IPv4Address "182.0.0.1" -ZoneScope "ChicagoZoneScope"
Add-DnsServerResourceRecord -ZoneName "contosogiftservices.com" -A -Name "www" -IPv4Address "162.0.0.1" -ZoneScope "DallasZoneScope"

詳細については、次を参照してください。 追加 DnsServerResourceRecordします。

DNS のポリシーを作成します。

パーティション (ゾーンのスコープ) を作成し、レコードを追加したら、これらのスコープで受信したクエリを分散させる DNS ポリシーを作成する必要があります。これにより、contosogiftservices.com へのクエリの 50% がシアトルのデータセンターの Web サーバーの IP アドレスで応答され、残りはシカゴとダラスのデータセンターで均等に配分されるようになります。

次の Windows PowerShell コマンドを使用して、これら 3 つのデータセンター間でアプリケーション トラフィックを分散させる DNS ポリシーを作成できます。

注意

次の例のコマンドでは、式 (ZoneScope "SeattleZoneScope,2; ChicagoZoneScope,1; DallasZoneScope,1") は、パラメーターの組み合わせ <ZoneScope><weight> 含む配列を使用して DNS サーバーを構成します。

Add-DnsServerQueryResolutionPolicy -Name "AmericaPolicy" -Action ALLOW -ZoneScope "SeattleZoneScope,2;ChicagoZoneScope,1;DallasZoneScope,1" -ZoneName "contosogiftservices.com"

詳細については、次を参照してください。 追加 DnsServerQueryResolutionPolicyします。

これで、3 つの異なるデータセンターの Web サーバー間でアプリケーションの負荷分散を実現する DNS ポリシーが作成されました。

何千もの DNS のポリシーに合わせて作成できます、トラフィック管理の要件、DNS サーバーを再起動しなくても - 受信したクエリで、すべての新しいポリシーが動的 - 適用されます。