錯誤 (指定的金鑰不在字典) 中,而且在 Server 2019 的 Azure VM 上SQL Server FCI 安裝失敗

本文可協助您解決在 Microsoft Azure 虛擬機器 (VM) 上嘗試在 Windows Server 2019 中安裝 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 FeatureCpuType = Cpu64 FeaturePackageId = sql_engine_core_inst FeatureClusterState = CompleteFailoverCluster Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigNonRC and scenario ConfigNonRC. 指定的索引鍵不存在於字典中。 目前例外狀況的組態失敗類別是 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 spcb) at 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) at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction (Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute (String action) Id, 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.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) 于 Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute (ConfigActionScenario scenario, ConfigActionTiming timing,ConfigBaseAction 動作, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) 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 可以為FailoverClusters呼叫的新參數ManagementPointNetworkType。 您可以針對新的 參數使用下列選項。

Switch 參數 Usage
單身 人士 使用傳統的 DHCP 或靜態 IP 位址方法。
分散式 使用節點 IP 位址來使用分散式網路名稱。
自動 使用偵測來判斷適當的設定。 如果SQL Server在 Azure 中執行,則會使用Distributed。 如果SQL Server在內部部署執行,請使用Singleton (預設設定) 。

如果您使用 Windows 叢集管理員工具建立 Windows 叢集,此工具會將 switch 參數設定為 [自動]。 因為您正在處理 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 中沒有可用的資源,其類型為 isNetworkName。

解決方案

若要修正此問題,您可以刪除目前的叢集,然後使用具有下列參數的 PowerShell 命令再次建立它:

managementpointnetworktype singleton