Udostępnij za pośrednictwem


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