Błąd (dany klucz nie był obecny w słowniku) i instalacja SQL Server fci kończy się niepowodzeniem na maszynie wirtualnej platformy Azure na serwerze 2019
Ten artykuł ułatwia rozwiązanie problemu występującego podczas próby zainstalowania wystąpienia klastra trybu failover firmy Microsoft SQL Server w systemie Windows Server 2019 na maszynie wirtualnej platformy Microsoft Azure.
Dotyczy: SQL Server na maszynie wirtualnej — Windows, Windows Server 2019
Oryginalny numer KB: 4525647
Symptomy
Podczas próby zainstalowania wystąpienia klastra trybu failover firmy Microsoft SQL Server w systemie Windows Server 2019 na maszynie wirtualnej platformy Microsoft Azure instalacja kończy się niepowodzeniem i zostanie wyświetlony następujący komunikat o błędzie:
Dany klucz nie był obecny w słowniku.
W tej sytuacji w pliku dziennika Details.txt w folderze konfiguracji SQL Server można wyświetlić następujące dodatkowe informacje:
Dane akcji: Funkcja = SQL_Engine_Core_Inst_sql_engine_core_inst_Cpu64 Scenariusz = czas instalacji = 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 .SQL_Engine_Core_Inst FeatureCpuType = Cpu64 FeaturePackageId = sql_engine_core_inst FeatureClusterState = CompleteFailoverCluster Configuration action akcji akcji nie powiodło się dla SQL_Engine_Core_Inst funkcji podczas configNonRC chronometrażu i scenariusza ConfigNonRC. Dany klucz nie był obecny w słowniku. Kategoria niepowodzenia konfiguracji bieżącego wyjątku to ConfigurationFailure Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigNonRC and scenario ConfigNonRC (Konfiguracja konfiguracji konfiguracji nie powiodła się w przypadku SQL_Engine_Core_Inst funkcji podczas konfigurowania czasu ConfigNonRC i scenariusza ConfigNonRC). System.Collections.Generic.KeyNotFoundException: Dany klucz nie był obecny w słowniku. 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, Dictionary2 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) w witrynie Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream) Poniżej przedstawiono stos wyjątków z listą wyjątków od najbardziej zewnętrznej do najbardziej wewnętrznej kolejności Wyjątki wewnętrzne są wcięte Typ wyjątku: System.Collections.Generic.KeyNotFoundException Komunikat: Dany klucz nie był obecny w słowniku. HResult: dane 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 spcb) at 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, 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)
Przyczyna
Nowy przełącznik ManagementPointNetworkType, który może być wywoływany przez polecenia cmdlet programu PowerShell dla klasy FailoverClusters , został wprowadzony w systemie Windows Server 2019. W przypadku nowego przełącznika można użyć następujących opcji.
Parametr przełącznika | Zastosowanie |
---|---|
Singleton | Używa tradycyjnej metody DHCP lub statycznego adresu IP. |
Rozproszonych | Użyj nazwy sieci rozproszonej przy użyciu adresów IP węzła. |
Automatyczne | Używa wykrywania, aby określić odpowiednie ustawienie. Jeśli SQL Server działa na platformie Azure, używa usługi Distributed. Jeśli SQL Server działa lokalnie, używa ustawienia Singleton (ustawienie domyślne). |
Jeśli klaster systemu Windows zostanie utworzony przy użyciu narzędzia Menedżera klastra systemu Windows, narzędzie ustawi parametr przełącznika na Wartość automatyczna. Ponieważ pracujesz na maszynie wirtualnej platformy Azure, przełącznik używa zamiast tego nazwy sieci rozproszonej.
Możesz to sprawdzić, uruchamiając następujące polecenie programu PowerShell:
C:\windows\system32> Get-clusterresource
Dane wyjściowe zwracane przez to polecenie są podobne do następujących:
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
Funkcja CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig)
sprawdza nazwę zasobu, którego typ toNetworkName. Ma to na celu sprawdzenie, czy wprowadzona nazwa serwera wirtualnego już istnieje.
Jednak instalowanie SQL Server interfejsu FCI w klastrze systemu Windows, który ma tylko nazwę sieci rozproszonej, nie jest obsługiwane. Komunikat o błędzie wymieniony w sekcji Objawy wskazuje, że w systemie Windows Server 2019 nie ma dostępnego zasobu, którego typ toNetworkName.
Rozwiązanie
Aby rozwiązać ten problem, możesz usunąć bieżący klaster, a następnie utworzyć go ponownie za pomocą polecenia programu PowerShell, które ma następujący parametr:
managementpointnetworktype singleton