Aレコードに複数のIPを持つプライベートDNS Azureが期待通りに動作しない

Aレコードに複数のIPを持つプライベートDNS Azureが期待通りに動作しない

ご協力いただければ幸いです。よろしくお願いします。

Azure 上に Azure プライベート DNS があり、2 つのリージョンの 4 つの Vnet に接続されています。1 つの A レコードに 2 つの IP を入力できると読みました (例: A レコード名 sql.midomain.local IP1 192.168.1.1 / 192.168.2.1)。

VM IP1 の電源がオフの場合、クライアントは IP2 に解決できると予想しましたが、そうはなりませんでした。「sql.domain.local」に対して ping を実行すると、この VM がオフであるにもかかわらず、常に IP1 に解決されます。

リージョン 1 のインスタンス SQL1 がオフの場合でも、クライアントはリージョン 2 の複製された VM に接続できるため、より高い回復力が必要なため、これが必要です。Azure の内部ロード バランサーはこれをサポートしていますが、外部ロード バランスを使用するために SQL にパブリック IP を配置したくありません。

どうすればそれに到達できるでしょうか?

PD: すべての Vnet が vnet ピアリングを介して相互にアクセスできることを知っておくことが重要です。どの vnet 内のどの VM にもアクセスできます。

答え1

1つのAレコードに2つのIPを入力できると読みました

いいえ、同じ名前で異なる値を持つ複数の A (または CNAME、TXT、MX) レコードを作成できます。

VM IP1 の電源がオフの場合、クライアントは IP2 に解決できると予想しましたが、そうはなりませんでした。"sql.domain.local" に ping を実行すると、この VM がオフであるにもかかわらず、常に IP1 に解決されます。

特定の名前に対して複数のアドレスが提示された場合、クライアントはすべき順番に試してみましょう。これはRFC 1794Ping は低レベルの診断ツールです。ここでの動作が意図的なものなのか、時代錯誤的なものなのか、あるいは単に欠陥があるのか​​を判断するには、かなりの調査が必要になります。

ブラウザの動作は大きく異なります。ラウンドロビンDNS(rrDNS)は、HTTP[s]サービスの高可用性をサポートするのに非常に効果的なツールです。しかし、それはブラウザが障害検出を実装しているためです。多くの他の TCP クライアントよりも短いタイムアウト (<1 秒)。ほとんどのオペレーティング システムのデフォルトの TCP 構成では、障害検出タイムアウトは 5 分以上です。また、これは TCP クライアントが適切に RFC に準拠していることを前提としています。私の経験では、Java (または Java 上で実行されるアプリケーション コード) は DNS 解決を期待どおりに処理しません。

外部クライアントに HA アクセスを提供するための高価な代替手段は、TCP マルチパスを使用することです。IME では、2 つの異なるプロバイダーを使用した場合、フェイルオーバーの検出/切り替えには少なくとも 3 分かかり、まったく実行されないこともありました。

rrDNS は外部クライアントに高可用性を提供するための優れたソリューションですが、特定のインフラストラクチャ内のノード間の接続に高可用性を提供する手段としては使用しません。

しかし、外部ロードバランスを使用するためにSQLにパブリックIPを割り当てたくありません

DBMSサーバーをパブリックアドレスに公開しないのは賢明です。他の手段で接続できないということではありません。実際、DBMSにトランザクションデータがある場合は、本当にデータベース ノード間の通信を確保できる必要があります。これが vnet ピアリング経由で利用可能であり、アプリケーションが固有の HA クライアント機能をサポートしていない場合は、haproxy または ProxySQL を検討してください。

一方、アプリケーションがアプリケーション サーバーと DBMS 間の遅延に多少影響を受けやすい場合があります (たとえば、単純な ORM を使用している場合)。その場合、場所 'A' のアプリケーション サーバーが場所 'B' の DBMS に接続できるようにするのは望ましくありません。この場合、分離されたスタックへの rrDNS によって部分的に問題を解決できますが、フェイルオーバー/フェイルバック中のセッション管理とデータ レプリケーションについても考慮する必要があります。

答え2

「sql.domain.local」に対して ping を実行すると、この VM がオフになっているにもかかわらず、常に IP1 に解決されます。

これは当然のことです。オペレーティング システムは、DNS サーバーによって指定された TTL 時間の間、解決された IP アドレスをキャッシュします。

DNS には、クライアントがそのサーバーに直接問い合わせるたびに回答をローテーションするラウンドロビン メカニズムがありますが、これはお客様のようなフェイルオーバー シナリオ向けに設計されたものではありません。お客様の環境についてはわかりませんが、一般的にはリバース プロキシを使用することをお勧めします。

関連情報