ロードバランシングにこれが必要です。たとえば、2つのAzureストレージアカウント(たとえば、a
とb
)があり、それらのblobアドレスはa.blob.core.windows.net
およびb.blob.core.windows.net
。どちらも同じデータを保存します。ここで、単一の外部名を提供する必要があります(たとえば、example.com
)これは、両方のストレージアカウントを指し、ラウンドロビンで動作する必要があります。これは、DNSに次のように2つのCNAMEエントリを作成し、ラウンドロビングでそれらの1つに解決する場合に達成できます。
example.com
CNAME a.blob.core.windows.net
example.com
CNAME b.blob.core.windows.net
しかし、Windows DNSサーバーで1つの名前に対して2つのCNAMEレコードを作成できません。
それでそれは可能ですか?
同じ完全修飾ドメイン名の複数のCNAMEレコードは、DNSの仕様に違反しています。 BINDの一部のバージョンではこれを行うことができ(multiple-cnames yes
オプションを指定した場合のみ)、その間で負荷分散をラウンドロビンしますが、技術的には合法ではありません。
CNAMEと同じ名前のリソースレコード(RR)があるはずはありません。nitを選択するには、複数の同一のCNAMEが含まれます。 Quoth RFC 1034、セクション3.6.2:
CNAME RRがノードに存在する場合、他のデータは存在しません。これにより、正規名とそのエイリアスのデータが異なることがなくなります。このルールは、キャッシュされたCNAMEが他のRRタイプについて権限のあるサーバーに確認することなく使用できることも保証します。
RFCの手紙であなたがしていることを処理する方法は、単一のCNAMEが負荷分散された "A"レコードを参照することです。
それはいけません。 CNAMEは、あるレコードを別のレコードの別の名前にします。レコードが2つの名前のCNAMESを持つ可能性がある場合、それはどちらの名前でも別の名前ではなく、まったく新しいものの名前になるため、CNAMEエントリは不適切になります。
あなたの外側の問題を解決するための良い方法はおそらくあります。たとえば、複数のAレコードを持つことができます。