Risolvere i problemi di integrazione di Active Directory di cluster Big Data di SQL Server
Si applica a: SQL Server 2019 (15.x)
Questo articolo illustra come risolvere i problemi di distribuzione di un cluster Big Data di SQL Server in modalità Active Directory.
Importante
Il componente aggiuntivo per i cluster Big Data di Microsoft SQL Server 2019 verrà ritirato. Il supporto per i cluster Big Data di SQL Server 2019 terminerà il 28 febbraio 2025. Tutti gli utenti esistenti di SQL Server 2019 con Software Assurance saranno completamente supportati nella piattaforma e fino a quel momento il software continuerà a ricevere aggiornamenti cumulativi di SQL Server. Per altre informazioni, vedere il post di blog relativo all'annuncio e Opzioni per i Big Data nella piattaforma Microsoft SQL Server.
Sintomo
È stata avviata la distribuzione di cluster Big Data di SQL Server con la modalità Active Directory. La distribuzione è bloccata e non procede.
L'esempio seguente illustra i risultati della distribuzione in una shell Bash.
The privacy statement can be viewed at:
https://go.microsoft.com/fwlink/?LinkId=853010
The license terms for SQL Server Big Data Cluster can be viewed at:
Enterprise: https://go.microsoft.com/fwlink/?linkid=2104292
Standard: https://go.microsoft.com/fwlink/?linkid=2104294
Developer: https://go.microsoft.com/fwlink/?linkid=2104079
Cluster deployment documentation can be viewed at:
https://aka.ms/bdc-deploy
NOTE: Cluster creation can take a significant amount of time depending on
configuration, network speed, and the number of nodes in the cluster.
Starting cluster deployment.
Cluster controller endpoint is available at bdc-control.contoso.com:30080, 193.168.5.14:30080.
Waiting for control plane to be ready after 5 minutes.
Waiting for control plane to be ready after 10 minutes.
Waiting for control plane to be ready after 15 minutes.
Waiting for control plane to be ready after 20 minutes.
Waiting for control plane to be ready after 25 minutes.
Controllare i pod distribuiti correnti.
kubectl get pods -n mssql-cluster
L'elenco seguente mostra solo i pod distribuiti che appartengono al controller. Non è in corso la creazione di pod di calcolo, di dati o di pool di archiviazione.
NAME READY STATUS RESTARTS AGE
appproxy-6q4rm 2/2 Running 0 32m
compute-0-0 3/3 Running 0 32m
control-n8jqh 3/3 Running 0 35m
controldb-0 2/2 Running 0 35m
controlwd-fgpj8 1/1 Running 0 34m
data-0-0 3/3 Running 0 32m
data-0-1 3/3 Running 0 32m
dns-fjp7n 2/2 Running 0 34m
gateway-0 2/2 Running 0 32m
logsdb-0 1/1 Running 0 34m
logsui-d26c5 1/1 Running 0 34m
master-0 3/4 Running 0 32m
master-1 3/4 Running 0 32m
master-2 3/4 Running 0 32m
metricsdb-0 1/1 Running 0 34m
metricsdc-c2kbh 1/1 Running 0 34m
metricsdc-lmqzx 1/1 Running 0 34m
metricsdc-r6499 1/1 Running 0 34m
metricsdc-tj99w 1/1 Running 0 34m
metricsui-dg8rz 1/1 Running 0 34m
mgmtproxy-dvzpc 2/2 Running 0 34m
nmnode-0-0 2/2 Running 0 32m
nmnode-0-1 2/2 Running 0 32m
operator-27gt9 1/1 Running 0 32m
sparkhead-0 4/4 Running 0 31m
sparkhead-1 4/4 Running 0 31m
storage-0-0 4/4 Running 0 31m
storage-0-1 4/4 Running 0 31m
storage-0-2 4/4 Running 0 31m
zookeeper-0 2/2 Running 0 32m
zookeeper-1 2/2 Running 0 32m
zookeeper-2 2/2 Running 0 32m
Controllare i log
Per identificare il motivo per cui la distribuzione viene terminata senza creare pod di calcolo, dati o archiviazione, controllare i log seguenti:
Verificare
controller.log
(<folderOfDebugCopyLog>\debuglogs-mssql-cluster-20200219-093941\mssql-cluster\control-<suffix>\controller\controller\<date>\controller.log). Cercare la voce seguente:WARN | StatefulSet master is not ready with 0 ready pods and 3 unready pods
Verificare
master-0
provisioner.log
(<folderOfDebugCopyLog>\\debuglogs-mssql-cluster-20200219-093941\mssql-cluster\master-0\mssql-server\provisioner\provisioner.log)ERROR | Failed to create sql login for domain user [<domain>.<top-level-domain>\<domain-group>] Traceback (most recent call last): File "/opt/provisioner/bin/scripts/provisioningpool.py", line 214, in executeNonQueries connection.execute_non_query(command) File "src/_mssql.pyx", line 1033, in _mssql.MSSQLConnection.execute_non_query File "src/_mssql.pyx", line 1061, in _mssql.MSSQLConnection.execute_non_query File "src/_mssql.pyx", line 1634, in _mssql.check_and_raise File "src/_mssql.pyx", line 1683, in _mssql.maybe_raise_MSSQLDatabaseException _mssql.MSSQLDatabaseException: (15401, b"Windows NT user or group '<domain>.<top-level-domain>\\<domain-group>' not found. Check the name again.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n") WARNING | [3/3] Provisioning exception occurred during provisioning step: ProvisioningMasterPool. WARNING | Failed to create sql login for domain user [<domain>.<top-level-domain>\<domain-group>] WARNING | Retrying.
Causa
Nell'esempio precedente la distribuzione non riesce a creare un account di accesso per l'utente di dominio perché l'ambito del gruppo di dominio è locale al dominio. Usare gruppi con ambito globale o universale. Per informazioni sui requisiti dell'ambito relativo al gruppo di Active Directory, vedere Distribuire cluster Big Data di SQL Server in modalità Active Directory.
Verificare
Verificare l'ambito del gruppo di dominio (<<domain-group>
>). Usare get-adgroup.
Se l'ambito del gruppo <domain-group>
è locale al dominio (DomainLocal
), la distribuzione non riesce.
Lo script di PowerShell seguente controlla l'ambito di due gruppi di Active Directory denominati bdcadmins
e bdcusers
. Sostituire i nomi con i nomi dei gruppi.
#Administrators and users Active Directory groups
$Cluster_admins_group='bdcadmins'
$Cluster_users_group='bdcusers'
#Performing Active Directory Group Checks...
#Active Directory admin group Check
$ClusterAdminGroupScope_Result = New-Object System.Collections.ArrayList
try {
$GroupScope = Get-ADgroup -Identity $Cluster_admins_group | Select-Object -ExpandProperty GroupScope
if ($GroupScope -eq 'DomainLocal') {
[void]$ClusterAdminGroupScope_Result.Add("Misconfiguration - $Cluster_admins_group Group scope is $GroupScope, this scope is not supported, Please change group scope to either Global or Universal")
}
else {
[void]$ClusterAdminGroupScope_Result.Add("OK - $Cluster_admins_group Group scope is $GroupScope")
}
}
catch {
[void]$ClusterAdminGroupScope_Result.Add("Error - " + $_.exception.message)
}
#Ad users group check
$ClusterUsersGroupScope_Result = New-Object System.Collections.ArrayList
$GroupScope = ''
try {
$GroupScope = Get-ADgroup -Identity $Cluster_users_group | Select-Object -ExpandProperty GroupScope
if ($GroupScope -eq 'DomainLocal') {
[void]$ClusterUsersGroupScope_Result.Add("Misconfiguration - $Cluster_users_group Group scope is $GroupScope, this scope is not supported, Please change group scope to either Global or Universal")
}
else
{ [void]$ClusterUsersGroupScope_Result.Add("OK - $Cluster_users_group Group scope is $GroupScope") }
}
catch {
[void]$ClusterUsersGroupScope_Result.Add("Error - " + $_.exception.message)
}
#Display the results
$ClusterUsersGroupScope_Result
Risoluzione
Per risolvere il problema, creare i gruppi di Active Directory con ambito universale o globale ed eseguire di nuovo la distribuzione.