在相同的 Active Directory 網域內部署多個SQL Server 巨量資料叢集

適用于:SQL Server 2019 (15.x)

本文說明 SQL Server 2019累積更新 5 (CU5) 的更新,可設定多個 SQL Server 2019 巨量資料叢集。 現在可以部署各種巨量資料叢集,並與相同的Active Directory 網域整合。

重要事項

Microsoft SQL Server 2019 巨量資料叢集附加元件將會淘汰。 SQL Server 2019 巨量資料叢集的支援將于 2025 年 2 月 28 日結束。 如需詳細資訊,請參閱Microsoft SQL Server 平臺上的巨量資料選項

在 SQL Server 2019 CU5 之前,兩個問題導致無法在 AD 網域中部署多個巨量資料叢集。

  • 服務主體名稱和 DNS 網域的命名衝突
  • 網域帳戶主體名稱

什麼是物件名稱衝突?

服務主體名稱 (SPN) 與 DNS 網域發生命名衝突

部署時提供的功能變數名稱會作為 Active Directory (AD) DNS 網域。 這表示 Pod 可以使用這個 DNS 網域,在內部網路中彼此連線。 使用者也會使用此 DNS 網域連線到巨量資料叢集端點。 因此,針對巨量資料叢集內服務建立的任何 服務主體名稱 (SPN) ,都有與此 AD DNS 網域限定的 Kubernetes Pod、服務或端點名稱。 如果使用者在網域中部署第二個叢集,則產生的 SPN 具有相同的 FQDN,因為 Pod 名稱和 DNS 功能變數名稱在叢集之間沒有差異。 請考慮 AD DNS 網域為 contoso.local 的情況。 針對 pod master-0 中主要集區SQL Server產生的其中一個 SPN 是 MSSQLSvc/master-0.contoso.local:1433 。 在使用者嘗試部署的第二個叢集中,的 master-0 Pod 名稱相同。 使用者提供相同的 AD DNS 網域 (contoso.local) 產生相同的 SPN 字串。 Active Directory 禁止建立衝突的 SPN,導致第二個叢集的部署失敗。

網域帳戶主體名稱

在部署具有 Active Directory 網域的巨量資料叢集期間,會針對在巨量資料叢集內執行的服務產生多個帳戶主體。 這些基本上都是 AD 使用者帳戶。 SQL Server 2019 CU5 之前,這些帳戶的名稱在叢集之間並不是唯一的。 此資訊清單會嘗試為兩個不同的叢集中巨量資料叢集中的特定服務建立相同的使用者帳戶名稱。 部署的第二個叢集在 AD 中遇到衝突,且無法建立帳戶。

如何解決名稱衝突

解決 SPN 和 DNS 網域問題的步驟 - SQL Server 2019 CU5

SPN 在叢集中必須是唯一的。 在部署階段傳入的 DNS 功能變數名稱也必須不同。 您可以在部署組態檔中使用新引進的設定來指定不同的 DNS 名稱: subdomain 。 若兩個叢集之間的子網域不同,而且內部通訊可能會透過這個子網域進行,則 SPN 將會包含達到所需唯一性的子網域。

注意

透過子網域設定所傳遞的值不是新的 AD 網域,而是內部使用的 DNS 網域。

讓我們回到SQL Server SPN 的主要集區案例。 如果子域是 bdc ,則討論過的 SPN 會變更為 MSSQLSvc/master-0.bdc.contoso.local:1433

巨量資料叢集名稱或命名空間名稱是用來計運算元域設定的值。 您可以選擇性地在 Active Directory 組態規格中自訂新引進的子域參數值。當使用者想要覆寫子功能變數名稱稱時,可以使用 Active Directory 組態規格中的新子域參數來執行此動作。

如何確保帳戶名稱唯一性

若要更新帳戶名稱,並保證唯一性使用帳戶前置詞。 帳戶前置詞是任何兩個叢集之間唯一的帳戶名稱區段。 帳戶名稱的其餘區段可以是常數。 新的帳戶名稱格式如下所示: <prefix>-<name>-<podId>

注意

Active Directory 要求帳戶名稱限制為 20 個字元。 巨量資料叢集需要使用 8 個字元來區分 Pod 和 StatefulSet。 這會保留帳戶前置詞的 12 個字元。

您可以選擇自訂您的帳戶名稱。 使用 Active Directory 組態規格中的 accountPrefix 參數。SQL Server 2019 CU5 在組態規格中引入了 accountPrefix。根據預設,子網域名稱可作為帳戶首碼使用。 如果子功能變數名稱稱超過 12 個字元,則會使用子功能變數名稱稱的初始 12 個字元子字串作為帳戶前置詞。

子域僅適用于 DNS。 因此,新的 LDAP 使用者帳戶名稱是 bdc-ldap@contoso.local。 帳戶名稱不是 bdc-ldap@bdc.contoso.local

語意

以下是在 SQL Server 2019 CU5 中新增的參數,用於在網域中設定多個叢集:

subdomain

  • 選擇性欄位
  • 資料類型:字串
  • 定義:要用於此巨量資料叢集的唯一 DNS 子域。 部署在 Active Directory 網域中的每個叢集,此值都應該不同。
  • 預設值:若未提供,將會使用叢集名稱作為預設值
  • 最大長度:每個標籤為 63 個字元 (標籤中的每個字串以點分隔)。
  • 備註:端點 DNS 名稱應該使用 FQDN 中的子網域。

accountPrefix

  • 選擇性欄位
  • 資料類型:字串
  • 定義:巨量資料叢集將產生之 AD 帳戶的唯一前置詞。 部署在 Active Directory 網域中的每個叢集,此值都應該不同。
  • 預設值:若未提供,將會使用子網域名稱作為預設值。 若未提供子網域,將會使用叢集名稱作為子網域名稱,因此叢集名稱也會繼承為 accountPrefix。 若有提供子網域,而且是多部分名稱 (包含一或多個點),則使用者必須提供 accountPrefix。
  • 最大長度:12 個字元

AD 網域和 DNS 伺服器調整

AD 網域或網域控制站中不需要變更,以配合針對相同 Active Directory 網域部署多個巨量資料叢集。 DNS 子域會在 DNS 伺服器註冊外部端點 DNS 名稱時自動建立。

部署組態檔的變更

控制平面組態control.json中的activeDirectory區段有兩個新的選擇性參數: subdomainaccountPrefix 。 叢集名稱會用於每個參數。 如果您想要覆寫預設行為,請提供這些設定的新值。 叢集名稱與命名空間名稱相同。

您可以選擇使用任何端點 DNS 名稱,只要完整。 它也無法與部署在相同網域的任何其他巨量資料叢集衝突。 您可以使用子域參數的值來確保不同叢集的 DNS 名稱。 請考慮閘道端點。 您可以使用端點的名稱 gateway ,並在 DNS 伺服器中自動註冊它。 若要在巨量資料叢集部署中執行這項操作,請使用 gateway.bdc1.contoso.local 作為 DNS 名稱。 若 bdc1 是子網域,且 contoso.local 是 AD DNS 網域名稱, 則其他可接受的值為:gateway-bdc1.contoso.local,或僅為 gateway.contoso.local

一些 Active Directory 安全性設定範例

以下是 Active Directory 安全性設定的範例,以防您想要覆寫子域和 accountPrefix。

    "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 名稱是唯一且完整的名稱,您就可以使用任何 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" 

後續步驟

針對 SQL Server 巨量資料叢集 Active Directory 整合進行疑難排解