Erreur (la clé donnée n’était pas présente dans le dictionnaire) et SQL Server’installation de L’instance de cluster de basculement é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 (FCI) Microsoft SQL Server 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 microsoft SQL Server cluster de basculement (FCI) dans Windows Server 2019 sur une machine virtuelle Microsoft Azure, l’installation échoue et le message d’erreur suivant s’affiche :

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 du dossier d’installation SQL Server :

Données de l’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 L’action de configuration n’a pas pu être effectuée pour les SQL_Engine_Core_Inst de fonctionnalité lors du minutage de ConfigNonRC et du scénario 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 Échec de la configuration 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 ActionData 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, PublicConfigurationBase spcb) sur Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction 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) Voici une pile d’exceptions répertoriant les exceptions dans l’ordre le plus à l’intérieur Les exceptions sont mises en retrait Type d’exception : System.Collections.Generic.KeyNotFoundException Message : La clé donnée n’était pas 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, ConfigBaseActionAction 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) à l’adresse 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.

Commutateur de paramètre Utilisation
Singleton Utilise la méthode traditionnelle de DHCP ou d’adresse IP statique.
Distribué 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 s’exécute 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 de commutateur sur Automatique. Étant donné que vous travaillez sur une machine virtuelle Azure, le commutateur utilise un nom de réseau distribué à la place.

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

C:\windows\system32> Get-clusterresource

La sortie retournée par cette commande se présente comme 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. Cela permet de vérifier que le nom du serveur virtuel que vous avez entré existe déjà.

Toutefois, l’installation de l’instance de cluster de basculement 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