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 problemet som uppstår när du ansluter till en SQL Server AlwaysOn-tillgänglighetsgruppslyssnare 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.
Obs!
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 .
Obs!
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.
Obs!
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 fall:
Lös den här situationen när dataprovidrar stöder parametern
MultiSubNetFailover
genom att lägga till parametern iMultiSubNetFailover
din anslutningssträng och ange 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 Windows PowerShell:Import-Module FailoverClusters Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
Obs!
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 sker. 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 en av lyssnarens offline-IP-adresser.
När en lyssnare skapas utses 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 anges detta till 1 och alla lyssnarens IP-adresser registreras i 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.
Obs!
Det problem 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 något 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 kommandot Windows PowerShell 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: