同じ Active Directory ドメイン内に複数の SQL Server ビッグ データ クラスターをデプロイする
適用対象: SQL Server 2019 (15.x)
この記事では、複数の SQL Server 2019 ビッグ データ クラスターの構成を可能にする、SQL Server 2019 の累積的な更新プログラム 5 (CU5) の更新内容について説明します。 さまざまなビッグ データ クラスターを同じ Active Directory ドメインにデプロイして統合できるようになりました。
重要
Microsoft SQL Server 2019 ビッグ データ クラスターのアドオンは廃止されます。 SQL Server 2019 ビッグ データ クラスターのサポートは、2025 年 2 月 28 日に終了します。 ソフトウェア アシュアランス付きの SQL Server 2019 を使用する既存の全ユーザーはプラットフォームで完全にサポートされ、ソフトウェアはその時点まで SQL Server の累積更新プログラムによって引き続きメンテナンスされます。 詳細については、お知らせのブログ記事と「Microsoft SQL Server プラットフォームのビッグ データ オプション」を参照してください。
SQL Server 2019 CU5 より前は、2 つの問題のために、AD ドメインに複数のビッグ データ クラスターをデプロイできませんでした。
- サービス プリンシパル名と DNS ドメインの名前の競合
- ドメイン アカウント プリンシパル名
オブジェクト名の競合とは
サービス プリンシパル名 (SPN) と DNS ドメインの名前の競合
デプロイ時に指定されたドメイン名は Active Directory (AD) DNS ドメインとして使用されます。 これは、この DNS ドメインを使用して、内部ネットワーク内で "ポッド" を相互に接続できることを意味します。 また、ユーザーはこの DNS ドメインを使用して、ビッグ データ クラスターのエンドポイントに接続します。 その結果、ビッグ データ クラスター内のサービスに対して作成された "サービス プリンシパル名 (SPN)" の場合、Kubernetes ポッド、サービス、またはエンドポイントの名前がこの AD DNS ドメインで修飾されます。 ユーザーがドメインに 2 番目のクラスターをデプロイする場合、生成される SPN の FQDN は同じになります。これは、クラスター間でポッド名と DNS ドメイン名が同じであるためです。 AD DNS ドメインが contoso.local
である場合を考えてみます。 ポッド master-0
のマスター プールの SQL Server 用に生成される SPN の 1 つは、MSSQLSvc/master-0.contoso.local:1433
です。 ユーザーがデプロイを試みる 2 番目のクラスターでは、master-0
のポッド名は同じです。 ユーザーが同じ AD DNS ドメイン (contoso.local
) を提供すると、SPN 文字列が同じになります。 2 番目のクラスターのデプロイの失敗につながる、競合する SPN の作成は、Active Directory によって禁止されます。
ドメイン アカウント プリンシパル名
Active Directory ドメインを使用するビッグ データ クラスターのデプロイ時に、ビッグ データ クラスター内で実行されているサービスに対して複数のアカウント プリンシパルが生成されます。 これらは基本的には AD ユーザー アカウントです。 SQL Server 2019 CU5 より前は、これらのアカウントの名前はクラスター間で一意ではありませんでした。 これは、2 つの異なるクラスター内のビッグ データ クラスターの特定のサービスに対して、同じユーザー アカウント名を作成しようとする場合に発生します。 デプロイされる 2 番目のクラスターでは、AD で競合が発生し、アカウントを作成できません。
名前の競合を解決する方法
SPN と DNS ドメインの問題を解決する手順 - SQL Server 2019 CU5
SPN はクラスター内で一意である必要があります。 デプロイ時に渡される DNS ドメイン名も、異なる必要があります。 デプロイ構成ファイルで新しく導入された設定 (subdomain
) を使用して、異なる DNS 名を指定することができます。 2 つのクラスターでサブドメインが異なり、このサブドメインを介して内部通信が行われる可能性がある場合、必要な一意性を実現するサブドメインが SPN に含まれます。
注意
サブドメイン設定を介して渡される値は、新しい AD ドメインではなく、内部で使用される DNS ドメインです。
マスター プールの SQL Server SPN のケースに戻りましょう。 サブドメインが bdc
である場合、前述の SPN が MSSQLSvc/master-0.bdc.contoso.local:1433
に変わります。
ビッグ データ クラスター名または名前空間名は、サブドメイン設定の値を計算するために使用されます。 必要に応じて、Active Directory 構成仕様で新しく導入されたサブドメイン パラメーターの値をカスタマイズできます。ユーザーがサブドメイン名をオーバーライドする場合は、Active Directory 構成仕様の新しいサブドメイン パラメーターを使用して、それを行うことができます。
アカウント名の一意性を確保する方法
アカウント名を更新し、一意性を保証するには、アカウント プレフィックスを使用します。 アカウント プレフィックスは、任意の 2 つのクラスター間で一意であるアカウント名のセグメントです。 アカウント名の残りのセグメントは、一定にすることができます。 新しいアカウント名の形式は、<prefix>-<name>-<podId>
のようになります。
Note
Active Directory では、アカウント名を 20 文字までに制限する必要があります。 ビッグ データ クラスターでは、ポッドと StatefulSet を区別するために、8 文字を使用する必要があります。 これにより、アカウント プレフィックス用に 12 文字が残されます。
アカウント名をカスタマイズすることもできます。 Active Directory 構成仕様では accountPrefix
パラメーターを使用します。SQL Server 2019 CU5 では、構成仕様に accountPrefix
が導入されています。既定では、サブドメイン名はアカウント プレフィックスとして使用されます。 サブドメイン名が 12 文字より長い場合、サブドメイン名の最初の 12 文字の substring がアカウント プレフィックスとして使用されます。
サブドメインは DNS にのみ適用されます。 そのため、新しい LDAP ユーザー アカウント名は bdc-ldap@contoso.local
となります。 アカウント名は bdc-ldap@bdc.contoso.local
ではありません。
Semantics
SQL Server 2019 CU5 で追加された、1 つのドメイン内に複数のクラスターを構成するためのパラメーターを次に示します。
subdomain
- 省略可能なフィールド
- データ型: 文字列
- 定義: このビッグ データ クラスターに使用する一意の DNS サブドメイン。 この値は、Active Directory ドメインにデプロイされるクラスターごとに異なる必要があります。
- 既定値:指定されていない場合、既定値としてクラスター名が使用されます
- 最大長: 1 ラベルあたり 63 文字 (各文字列がドットで区切られたラベル)。
- 解説:エンドポイントの DNS 名の場合、FQDN でサブドメインを使用する必要があります。
accountPrefix
- 省略可能なフィールド
- データ型: 文字列
- 定義: ビッグ データ クラスターから生成される AD アカウント用の一意のプレフィックス。 この値は、Active Directory ドメインにデプロイされるクラスターごとに異なる必要があります。
- 既定値:指定されていない場合は、既定値としてサブドメイン名が使用されます。 サブドメインが指定されていない場合、クラスター名がサブドメイン名として使用されるため、クラスター名は accountPrefix としても継承されます。 サブドメインが指定されており、(1 つまたは複数のドットが含まれる) マルチパート名である場合、ユーザーは accountPrefix を指定する必要があります。
- 最大長: 12 文字
AD ドメインと DNS サーバーの調整
同じ Active Directory ドメインに対する複数のビッグ データ クラスターのデプロイに対応するために、AD ドメインまたはドメイン コントローラーを変更する必要はありません。 DNS サブドメインは、外部エンドポイントの DNS 名を登録するときに、DNS サーバーに自動的に作成されます。
デプロイ構成ファイルの変更点
コントロール プレーン構成 control.json の activeDirectory セクションには、subdomain
と accountPrefix
という 2 つの新しい省略可能なパラメーターがあります。 クラスター名は、これらの各パラメーターに使用されます。 既定の動作をオーバーライドする場合は、これらの設定に新しい値を指定します。 クラスター名は名前空間名と同じです。
完全修飾である限り、任意のエンドポイント DNS 名を使用できます。 また、同じドメインにデプロイされている他のビッグ データ クラスターと競合しないことも必要です。 サブドメイン パラメーターの値を使用して、クラスター間で確実に DNS 名が異なるようにすることができます。 ゲートウェイ エンドポイントについて考えてみましょう。 エンドポイントに gateway
という名前を使用して、DNS サーバーに自動的に登録できます。 ビッグ データ クラスターのデプロイの一部としてこれを行うには、DNS 名として gateway.bdc1.contoso.local
を使用します。 bdc1
がサブドメインで、contoso.local
が AD DNS ドメイン名である場合があります。 使用できるその他の値は、gateway-bdc1.contoso.local
または単に gateway.contoso.local
です。
Active Directory のセキュリティ構成の例
サブドメインと accountPrefix をオーバーライドする場合の、Active Directory のセキュリティ構成の例を以下に示します。
"security": {
"activeDirectory": {
"ouDistinguishedName":"OU=contosoou,DC=contoso,DC=local",
"dnsIpAddresses": [ "10.10.10.10" ],
"domainControllerFullyQualifiedDns": [ "contoso-win2016-dc.contoso.local" ],
"domainDnsName":"contoso.local",
"subdomain": "bdc",
"accountPrefix": "myprefix",
"clusterAdmins": [ "contosoadmins" ],
"clusterUsers": [ "contosousers1", "contosousers2" ]
}
}
以下は、コントロール プレーン エンドポイントのエンドポイント仕様の例です。 DNS 名が一意であり、完全に修飾されている限り、それらに任意の値を使用できます。
"endpoints": [
{
"serviceType": "NodePort",
"port": 30080,
"name": "Controller",
"dnsName": "control-bdc1.contoso.local"
},
{
"serviceType": "NodePort",
"port": 30777,
"name": "ServiceProxy",
"dnsName": "monitor-bdc1.contoso.local"
}
]
疑問がある場合
異なるクラスターに個別の組織単位を作成する必要はありますか?
必須ではありませんが、お勧めします。 個別のクラスターに個別の OU を指定すると、生成されるユーザー アカウントを管理するのに役立ちます。
SQL Server 2019 で CU5 より前の動作に戻すにはどうすればよいですか?
新しく導入された subdomain
パラメーターに対応できないシナリオもあります。 たとえば、CU5 より前のリリースをデプロイする必要があり、Azure Data CLI (azdata
) がアップグレード済みである場合です。 これは非常にまれですが、CU5 より前の動作に戻す必要がある場合は、control.json
の Active Directory セクションで useSubdomain
パラメーターを false
に設定できます。
次の例では、このシナリオで useSubdomain
を false
に設定します。
azdata bdc config replace -c custom-prod-kubeadm/control.json -j "$.security.activeDirectory.useSubdomain=false"