Partager via


Erreur (la clé donnée n’a pas été présente dans le dictionnaire) et l’installation de l’instance de cluster de basculement SQL Server échoue sur une machine virtuelle Azure dans Server 2019

Cet article vous aide à résoudre le problème qui se produit lorsque vous essayez d’installer une instance de cluster de basculement Microsoft SQL Server (FCI) dans Windows Server 2019 sur une machine virtuelle Microsoft Azure.

S’applique à : SQL Server dans la machine virtuelle - Windows, Windows Server 2019
Numéro de la base de connaissances d’origine : 4525647

Symptômes

Lorsque vous essayez d’installer une instance cluster de basculement Microsoft SQL Server (FCI) dans Windows Server 2019 sur une machine virtuelle Microsoft Azure, l’installation échoue et vous recevez le message d’erreur suivant :

La clé donnée n’était pas présente dans le dictionnaire.

Dans ce cas, vous pouvez voir les informations supplémentaires suivantes dans le fichier journal Details.txt dans le dossier d’installation de SQL Server :

Données d’action : Feature = SQL_Engine_Core_Inst_sql_engine_core_inst_Cpu64 Scenario = Install Timing = ConfigNonRC ConfigObjectType = Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject FeatureName = SQL_Engine_Core_Inst FeatureCpuType = Cpu64 FeaturePackageId = sql_engine_core_inst FeatureClusterState = CompleteFailoverCluster Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigNonRC and scenario ConfigNonRC. La clé donnée n’était pas présente dans le dictionnaire. La catégorie d’échec de configuration de l’exception actuelle est l’action ConfigurationFailure qui a échoué pour la fonctionnalité SQL_Engine_Core_Inst lors du minutage de ConfigNonRC et du scénario ConfigNonRC. System.Collections.Generic.KeyNotFoundException : la clé donnée n’était pas présente dans le dictionnaire. sur System.ThrowHelper.ThrowKeyNotFoundException() sur System.Collections.Generic.Dictionary2.get_Item(TKey key) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionary2 actionData, PublicConfigurationBase spcb) sur Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(Scénario ConfigActionScenario, Minutage ConfigActionTiming, Action ConfigBaseAction, Dictionnaire2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary2 actionData, PublicConfigurationBase spcbCurrent) sur Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) sur Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream) Voici une pile d’exceptions répertoriant les exceptions les plus extérieures aux exceptions internes les plus internes étant en cours de mise en retrait du type d’exception : System.Collections.Generic.KeyNotFoundException Message : La clé donnée n’a pas été présente dans le dictionnaire. HResult : 0x80131577 Données : SQL. Setup.FailureCategory = ConfigurationFailure WatsonConfigActionData = INSTALL@CONFIGNONRC@SQL_ENGINE_CORE_INST WatsonExceptionFeatureIdsActionData = System.String[] Stack : at System.ThrowHelper.ThrowKeyNotFoundException() at System.Collections.Generic.Dictionary2.get_Item(TKey key) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionary2 actionData, PublicConfigurationBase spcb) at Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigActionTiming timing, ConfigBaseActionTiming action, Dictionary2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary2 actionData, PublicConfigurationBase spcbCurrent) sur Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) sur Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream)

Cause

Un nouveau commutateur, ManagementPointNetworkType, qui peut être appelé par les applets de commande PowerShell pour FailoverClusters est introduit dans Windows Server 2019. Vous pouvez utiliser les options suivantes pour le nouveau commutateur.

Changer de paramètre Utilisation
Singleton Utilise la méthode traditionnelle d’adresse IP DHCP ou statique.
Distributed Utilisez un nom de réseau distribué à l’aide d’adresses IP de nœud.
Automatique Utilise la détection pour déterminer le paramètre approprié. Si SQL Server est en cours d’exécution dans Azure, utilise Distributed. Si SQL Server s’exécute localement, utilise Singleton (paramètre par défaut).

Si vous créez le cluster Windows à l’aide de l’outil Gestionnaire de cluster Windows, l’outil définit le paramètre switch sur Automatique. Étant donné que vous travaillez sur une machine virtuelle Azure, le commutateur utilise plutôt un nom de réseau distribué.

Vous pouvez le vérifier en exécutant la commande PowerShell suivante :

C:\windows\system32> Get-clusterresource

La sortie retournée par cette commande ressemble à ce qui suit :

Name                 State          OwnerGroup                ResourceType
Cloud Witness                       Online Cluster Group      Cloud Witness
Cluster Name                        Online Cluster Group      Distributed Network Name
Cluster Pool 1                      Online 45d8f3c2-e8df-4a01-87b8-f3c383801f3f
                                                              Storage Pool
Cluster Virtual Disk
   (ClusterPerformanceHistory)      Online Cluster Group      Physical Disk
Health                              Online Cluster Group      Health Service
SDDC Management                     Online Cluster Group      SDDC Management
Storage QoS Resource                Online Cluster Group      Storage QoS Policy Manager

La CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig) fonction vérifie le nom de la ressource dont le type estNetworkName. Il s’agit de vérifier que le nom du serveur virtuel que vous avez entré existe déjà.

Toutefois, l’installation de l’instance de cluster FCI SQL Server sur un cluster Windows qui n’a qu’un nom de réseau distribué n’est pas prise en charge. Le message d’erreur mentionné dans la section Symptômes indique qu’aucune ressource n’est disponible dans Windows Server 2019 dont le type estNetworkName.

Résolution

Pour résoudre ce problème, vous pouvez supprimer le cluster actuel, puis le recréer à l’aide d’une commande PowerShell qui a le paramètre suivant :

managementpointnetworktype singleton