本文可帮助解决在 windows Server 2019 中尝试在 Microsoft Azure 虚拟机(VM)上安装 Microsoft SQL Server 故障转移群集实例(FCI)时发生的问题。
适用于: VM 中的 SQL Server - Windows、Windows Server 2019
原始 KB 数: 4525647
现象
尝试在 Microsoft Azure 虚拟机 (VM)上安装 Windows Server 2019 中的 Microsoft SQL Server 故障转移群集实例(FCI),安装将失败,并收到以下错误消息:
给定键在字典中不存在。
在这种情况下,可以在 SQL Server 安装文件夹中Details.txt日志文件中看到以下附加信息:
操作数据:功能 = SQL_Engine_Core_Inst_sql_engine_core_inst_Cpu64 方案 = 安装计时 = ConfigNonRC ConfigObjectType = Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject FeatureName = SQL_Engine_Core_Inst Microsoft FeatureCpuType = Cpu64 FeaturePackageId = sql_engine_core_inst FeatureClusterState = CompleteFailoverCluster Configuration 操作在计时 ConfigNonRC 和方案 ConfigNonRC 期间功能SQL_Engine_Core_Inst失败。 给定键在字典中不存在。 当前异常的配置失败类别是 ConfigurationFailure 配置操作在计时 ConfigNonRC 和方案 ConfigNonRC 期间功能SQL_Engine_Core_Inst失败。 System.Collections.Generic.KeyNotFoundException:给定的密钥不在字典中。 at System.ThrowHelper.ThrowKeyNotFoundException() at 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 s Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario 方案, ConfigActionTiming 计时, ConfigBaseAction 操作, Dictionary2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary
2 actionData, PublicConfigurationBasesCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId)at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream) 下面是一个异常堆栈,其中列出了最外层到最内层异常的异常类型正在缩进异常类型:System.Collections.Generic.KeyNotFoundException Message:字典中不存在给定键。 HResult :0x80131577数据: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 s Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario 方案,ConfigActionTiming 计时,ConfigBaseActionaction, Dictionary2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary
2 actionData, PublicConfigurationBase sーCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream)
原因
Windows Server 2019 中引入了 PowerShell cmdlet 可以调用的新开关 ManagementPointNetworkType。 可以将以下选项用于新开关。
Switch 参数 | 使用情况 |
---|---|
单例 | 使用传统的 DHCP 或静态 IP 地址方法。 |
分布式 | 使用节点 IP 地址使用分布式网络名称。 |
自动 | 使用检测来确定适当的设置。 如果 SQL Server 在 Azure 中运行,请使用 Distributed。 如果 SQL Server 在本地运行,请使用 Singleton (默认设置)。 |
如果使用 Windows 群集管理器工具创建 Windows 群集,该工具会将 switch 参数设置为 Automatic。 由于你正在使用 Azure VM,因此该交换机改用分布式网络名称。
可以运行以下 PowerShell 命令来验证此情况:
C:\windows\system32> Get-clusterresource
此命令返回的输出如下所示:
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
该 CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig)
函数检查其类型为NetworkName 的资源名称。 这是为了验证输入的虚拟服务器名称是否已存在。
但是,不支持在只有分布式网络名称的 Windows 群集上安装 SQL Server FCI。 “症状”部分中提到的错误消息指示 Windows Server 2019 中没有可用的资源,其类型为NetworkName。
解决方法
若要解决此问题,可以删除当前群集,然后使用具有以下参数的 PowerShell 命令再次创建它:
managementpointnetworktype singleton