Error (la clave dada no estaba presente en el diccionario) y SQL Server instalación de FCI en una máquina virtual de Azure en Server 2019

Este artículo le ayuda a resolver el problema que se produce al intentar instalar una instancia clúster de conmutación por error (FCI) de Microsoft SQL Server en Windows Server 2019 en una máquina virtual (VM) de Microsoft Azure.

Se aplica a:   SQL Server vm : Windows, Windows Server 2019
Número KB original:   4525647

Síntomas

Cuando intenta instalar una instancia agrupada en clústeres de conmutación por error (FCI) de Microsoft SQL Server en Windows Server 2019 en una máquina virtual (VM) de Microsoft Azure, se produce un error en la instalación y recibe el siguiente mensaje de error:

La clave dada no estaba presente en el diccionario.

En esta situación, puede ver la siguiente información adicional en el Details.txt de registro de la carpeta SQL Server instalación:

Datos de acción: 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 clave dada no estaba presente en el diccionario. La categoría de error de configuración de la excepción actual es ConfigurationFailure Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigNonRC and scenario ConfigNonRC. System.Collections.Generic.KeyNotFoundException: la clave especificada no estaba presente en el diccionario. en System.ThrowHelper.ThrowKeyNotFoundException() en 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) en Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, Tiempo ConfigActionTiming, acción ConfigBaseAction, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) en Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) en Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream) La siguiente es una pila de excepciones que enumera las excepciones en orden más externo a más interno Las excepciones internas se están sangríando Tipo de excepción: System.Collections.Generic.KeyNotFoundException Message: The given key was not present in the dictionary. HResult : 0x80131577 datos: SQL. Setup.FailureCategory = ConfigurationFailure WatsonConfigActionData = INSTALL@CONFIGNONRC @SQL_ENGINE_CORE_INST WatsonExceptionFeatureIdsActionData = System.String[] Stack: en System.ThrowHelper.ThrowKeyNotFoundException() en 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, Spcb de PublicConfigurationBase) en Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) en Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) en Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream)

Causa

En Windows Server 2019 se introduce un nuevo modificador, ManagementPointNetworkType, al que pueden llamar los cmdlets de PowerShell para FailoverClusters. Puede usar las siguientes opciones para el nuevo modificador.

Parámetro Switch Uso
Singleton Usa el método tradicional de DHCP o dirección IP estática.
Distribuido Use un nombre de red distribuida mediante direcciones IP de nodo.
Automática Usa la detección para determinar la configuración adecuada. Si SQL Server se está ejecutando en Azure, usa Distributed. Si SQL Server se ejecuta localmente, usa Singleton (configuración predeterminada).

Si crea el clúster de Windows mediante la herramienta Administrador de clústeres de Windows, la herramienta establece el parámetro de modificador en Automático. Dado que está trabajando en una máquina virtual de Azure, el conmutador usa un nombre de red distribuida en su lugar.

Para comprobarlo, ejecute el siguiente comando de PowerShell:

C:\windows\system32> Get-clusterresource

El resultado que devuelve este comando es similar al siguiente:

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) función comprueba el nombre del recurso cuyo tipo esNetworkName. Esto es para comprobar que el nombre del servidor virtual que escribió ya existe.

Sin embargo, no se admite SQL Server fci en un clúster de Windows que solo tenga un nombre de red distribuida. El mensaje de error que se menciona en la sección Síntomas indica que no hay ningún recurso disponible en Windows Server 2019 cuyo tipo seaNetworkName.

Solución

Para solucionar este problema, puede eliminar el clúster actual y, a continuación, crearlo de nuevo con un comando de PowerShell que tenga el siguiente parámetro:

managementpointnetworktype singleton