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.Dictionary
2.get_Item(TKey key) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionary
2 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, Dictionary
2 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, Dictionary
2 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, Dictionary
2 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