Delen via


Time-out treedt op wanneer u verbinding maakt met een AlwaysOn-listener in een omgeving met meerdere subnetten

Dit artikel helpt u bij het oplossen van het probleem dat optreedt wanneer u verbinding maakt met een SQL Server AlwaysOn-beschikbaarheidsgroeplistener in een omgeving met meerdere subnetten.

Oorspronkelijke productversie: 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
Origineel KB-nummer: 2792139

Symptomen

Nadat u de listener van de beschikbaarheidsgroep hebt geconfigureerd voor een AlwaysOn-beschikbaarheidsgroep in Microsoft SQL Server 2012, kunt u de listener mogelijk niet pingen of er geen verbinding mee maken vanuit een toepassing.

Wanneer u bijvoorbeeld verbinding probeert te maken met een listener van SQL Server met behulp SQLCMDvan , treedt er een time-out op voor de verbinding. Bovendien ontvangt u een foutbericht dat er ongeveer als volgt uitziet:

Sqlcmd: Fout: Microsoft SQL Native Client: Time-out voor aanmelding is verlopen.

Opmerking

Deze symptomen komen meestal af en toe voor of zijn gerelateerd aan failover van de resource van de beschikbaarheidsgroep.

In de volgende schermopname ziet u een voorbeeld van wat er gebeurt wanneer u de listener probeert te pingen voor de beschikbaarheid van aglisten. De schermopname toont ook een geslaagde verbinding met SQL Server met behulp van de SQLCMD opdracht wanneer u de failoverparameter voor meerdere subnetten opneemt-M.

Schermopname van het opdrachtpromptvenster wanneer u de listener pingt voor de beschikbaarheid van aglisten.

Opmerking

U kunt de SQLCMD opdracht samen met de -M parameter gebruiken zoals weergegeven in de schermopname om verbinding te maken met de listener.

Oorzaak

Dit probleem treedt op omdat uw toepassing gebruikmaakt van een verouderde gegevensprovider die de nieuwe MultiSubnetFailover parameter niet ondersteunt of niet is geconfigureerd voor het gebruik van deze parameter.

Deze parameter wordt ondersteund in nieuwere versies van het SQLClient-stuurprogramma dat is opgenomen in de .NET Framework 4 en met latere versies van de .NET Framework, en wordt teruggezet naar de .NET Framework 3.5.

Opmerking

De PING opdracht is een eenvoudig hulpprogramma voor connectiviteitstests dat de nieuwe parameter niet ondersteunt.

Oplossing

U kunt een van de volgende oplossingen gebruiken die van toepassing zijn op uw zaak:

  • Als u deze situatie wilt oplossen wanneer de gegevensproviders de MultiSubNetFailover parameter ondersteunen, voegt u de MultiSubNetFailover parameter toe aan uw verbindingsreeks en stelt u deze in op true.

  • Als u deze situatie wilt oplossen wanneer uw verouderde clients de MultiSubnetFailover eigenschap niet kunnen gebruiken, kunt u de waarde van RegisterAllProvidersIP de listener wijzigen in 0. Voer hiervoor de volgende opdracht uit vanuit de Windows PowerShell opdrachtregelinterface:

    Import-Module FailoverClusters
    Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
    

    Schermopname van de uitvoer van een voorbeeld van de opdracht in Windows PowerShell.

Opmerking

Nadat u de RegisterAllProvidersIP waarde hebt ingesteld op 0, moet het huidige online-IP-adres niet meer zijn geregistreerd bij de DNS-server en moet het offline-IP-adres worden geregistreerd bij de DNS-server wanneer er een failover optreedt. Dit kan leiden tot een verbindingsvertraging voor de volgende failover.

Meer informatie

Wanneer u verbinding probeert te maken met een listener die is gedefinieerd op meer dan één subnet, kan de bewerking mislukken als het clientstuurprogramma verbinding probeert te maken met behulp van een van de offline IP-adressen van de listener.

Wanneer een listener wordt gemaakt, wordt een IP-adres aangewezen voor elk uniek subnet waarin een replica van een beschikbaarheidsgroep wordt gehost. Als er bijvoorbeeld een listener wordt gemaakt voor een beschikbaarheidsgroep met replica's die bestaan in twee subnetten, worden er twee IP-adressen gedefinieerd in de listener. Eén adres wordt gebruikt door een toepassing die verbinding kan maken met een exemplaar van SQL Server in subnet 1 en het andere adres wordt gebruikt wanneer een toepassing verbinding maakt met een exemplaar van SQL Server in subnet 2.

Achter de schermen maakt de listener een clienttoegangspuntresource voor windows-clusters. Een van de eigenschappen is RegisterAllProvidersIP. Wanneer een listener wordt gemaakt, wordt deze ingesteld op 1 en worden alle IP-adressen van de listener geregistreerd in de DNS-server. Deze configuratie biedt kortere tijd voor het opnieuw verbinden van clients.

Omdat de DNS-record alle IP-adressen bevat, moet een client die verbinding probeert te maken met de listener weten hoe deze situatie moet worden afgehandeld. Met de MultiSubnetFailover parameter kan het clientstuurprogramma parallelle verbindingen met alle IP-adressen van de listener proberen. Zonder de MultiSubnetFailover parameter probeert het clientstuurprogramma sequentieel verbinding te maken met alle IP-adressen voor de listener. Sequentiële verbindingen kunnen een lange aanmeldingstijd of time-outs voor aanmelding veroorzaken.

Opmerking

Het probleem dat in dit artikel wordt genoemd, is ook van invloed op SharePoint-omgevingen die zijn geconfigureerd voor het gebruik van de secundaire alleen-lezen replica van een AlwaysOn-beschikbaarheidsgroep. U kunt dit probleem oplossen door een van de volgende acties uit te voeren die van toepassing zijn op uw versie van SharePoint:

Verwijzingen