Tidsgränsen uppnås när du ansluter till en AlwaysOn-lyssnare i en miljö med flera undernät
Den här artikeln hjälper dig att lösa det problem som uppstår när du ansluter till en SQL Server AlwaysOn-tillgänglighetsgrupplyssnare i en miljö med flera undernät.
Ursprunglig produktversion: SQL Server 2012 Developer, SQL Server 2012 Enterprise, SQL Server 2012 Express, SQL Server 2012 Standard, SQL Server 2012 Web, SQL Server 2012 Enterprise Core
Ursprungligt KB-nummer: 2792139
Symptom
När du har konfigurerat tillgänglighetsgruppens lyssnare för en AlwaysOn-tillgänglighetsgrupp i Microsoft SQL Server 2012 kanske du inte kan pinga lyssnaren eller ansluta till den från ett program.
När du till exempel försöker ansluta till en lyssnare av SQL Server med hjälp SQLCMD
av överskrider anslutningen tidsgränsen. Dessutom får du ett felmeddelande som liknar följande:
Sqlcmd: Fel: Microsoft SQL Native Client: Tidsgränsen för inloggning har upphört att gälla.
Kommentar
Dessa symtom är vanligtvis tillfälliga eller relaterade till redundansväxling av tillgänglighetsgruppresursen.
Följande skärmbild visar ett exempel på vad som händer när du försöker pinga lyssnaren för tillgängligheten för aglisten
. Skärmbilden visar också en lyckad anslutning till SQL Server med hjälp SQLCMD
av kommandot när du inkluderar redundansparametern -M
för flera undernät .
Kommentar
Du kan använda SQLCMD
kommandot tillsammans med parametern -M
enligt skärmbilden för att ansluta till lyssnaren.
Orsak
Det här problemet beror på att ditt program antingen använder en äldre dataprovider som inte stöder den nya MultiSubnetFailover
parametern eller inte har konfigurerats för att använda den här parametern.
Den här parametern stöds i nyare versioner av SQLClient-drivrutinen som ingår i .NET Framework 4 och med senare versioner av .NET Framework och är tillbaka portad till .NET Framework 3.5.
Kommentar
Kommandot PING
är ett enkelt verktyg för anslutningstestning som inte stöder den nya parametern.
Åtgärd
Du kan använda någon av följande lösningar som gäller för ditt ärende:
För att lösa den här situationen när dataprovidrar stöder parametern
MultiSubNetFailover
lägger du till parametern iMultiSubNetFailover
din anslutningssträng och anger den till true.För att lösa den här situationen när dina äldre klienter inte kan använda
MultiSubnetFailover
egenskapen kan du ändra lyssnarensRegisterAllProvidersIP
värde till 0. Det gör du genom att köra följande kommando från kommandoradsgränssnittet i Windows PowerShell:Import-Module FailoverClusters Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
Kommentar
När du har angett RegisterAllProvidersIP
värdet till 0 måste den aktuella online-IP-adressen avregistreras från DNS-servern och offline-IP-adressen måste registreras på DNS-servern när en redundansväxling inträffar. Detta kan orsaka en anslutningsfördröjning för nästa redundansväxling.
Mer information
När du försöker ansluta till en lyssnare som har definierats i mer än ett undernät kan åtgärden misslyckas om klientdrivrutinen försöker ansluta med hjälp av någon av lyssnarens offline-IP-adresser.
När en lyssnare skapas tilldelas en IP-adress för varje unikt undernät som en tillgänglighetsgruppreplik finns i. Om till exempel en lyssnare skapas för en tillgänglighetsgrupp som har repliker som finns i två undernät definieras två IP-adresser i lyssnaren. En adress används av ett program som kan ansluta till en instans av SQL Server i undernät 1, och den andra adressen används när ett program ansluter till en instans av SQL Server i undernät 2.
I bakgrunden skapar lyssnaren en Resurs för Klientåtkomstpunkt för Windows-kluster. En av dess egenskaper är RegisterAllProvidersIP
. När en lyssnare skapas är detta inställt på 1 och alla lyssnarens IP-adresser registreras på DNS-servern. Den här konfigurationen ger kortare återanslutningstid för klienter.
Eftersom DNS-posten innehåller alla IP-adresser måste en klient som försöker ansluta till lyssnaren veta hur den här situationen ska hanteras. Parametern MultiSubnetFailover
gör det möjligt för klientdrivrutinen att prova anslutningar parallellt med alla lyssnarens IP-adresser. Utan parametern MultiSubnetFailover
försöker klientdrivrutinen ansluta sekventiellt till alla IP-adresser för lyssnaren. Sekventiella anslutningar kan orsaka långa tidsgränser för inloggning eller inloggning.
Kommentar
Problemet som nämns i den här artikeln påverkar även SharePoint-miljöer som är konfigurerade att använda en AlwaysOn-tillgänglighetsgrupps sekundära skrivskyddade replik. Lös problemet genom att utföra den av följande åtgärder som gäller för din version av SharePoint:
För SharePoint 2007: Detta klassificeras som ett äldre program. Därför kan inte SharePoint 2007 konfigureras att använda parametern
MultiSubnetFailover
. I stället måste du använda Windows PowerShell-kommandot som beskrivs i avsnittet Lösning .För SharePoint 2010: Kumulativa uppdateringspaket är nu tillgängliga som lägger till stöd för parametern
MultiSubnetFailover
. Mer information om uppdateringspaketen finns i följande artikel: