De beschikbaarheidsreplica is ontkoppeld AlwaysOn-beschikbaarheidsgroep
Van toepassing op: SQL Server
Introductie
- Beleidsnaam: Verbindingsstatus van beschikbaarheidsreplica
- Probleem: de verbinding met beschikbaarheidsreplica is verbroken
- Categorie: Kritiek
- Facet: Beschikbaarheidsreplica
Beschrijving
Dit beleid controleert de verbindingsstatus tussen beschikbaarheidsreplica's. Het beleid heeft een slechte status wanneer de verbindingsstatus van de beschikbaarheidsreplica zich bevindt DISCONNECTED
. Het beleid heeft anders een goede status.
Mogelijke oorzaken
De secundaire replica is niet verbonden met de primaire replica. De verbonden status is DISCONNECTED
. Dit probleem kan worden veroorzaakt om een van de volgende redenen:
- De verbindingspoort kan conflicteren met een andere toepassing.
- Het versleutelingstype of algoritme komt niet overeen.
- Het verbindingseindpunt is verwijderd of niet gestart.
- Er zijn netwerk-/connectiviteitsproblemen of poorten worden geblokkeerd bij de firewall.
- Service-/opstartaccount is geen domeingebruiker en kan geen verbinding maken met de domeincontroller en met het externe knooppunt en de poort (bijvoorbeeld 5022).
Mogelijke oplossingen
Controleer de configuratie van het eindpunt voor databasespiegeling voor de exemplaren van de primaire en secundaire replica en werk de niet-overeenkomende configuratie bij. Controleer ook of de poort conflicteert en zo ja, wijzig het poortnummer.
Hier volgen mogelijke oplossingen voor dit probleem:
De verbindingspoort kan conflicteren met een andere toepassing
Voer de volgende opdrachten uit om poortproblemen vast te stellen:
$server_name = "server_instance" #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT type_desc, port FROM sys.tcp_endpoints WHERE type_desc = 'DATABASE_MIRRORING'; "
Met de vorige opdracht wordt het poortnummer geretourneerd dat u in de volgende opdracht moet gebruiken.
$port = "5022"
Get-NetTCPConnection -LocalPort $port
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess | Select-Object Name, ProductVersion, Path, Id
Het versleutelingstype of algoritme komt niet overeen
Voer deze opdracht uit op beide servers en vergelijk de versleuteling en zorg ervoor dat beide hetzelfde zijn.
$server_name = "server_instance" #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc FROM sys.database_mirroring_endpoints"
Het verbindingseindpunt is verwijderd of niet gestart
Voer de volgende opdracht uit als het eindpunt voor spiegeling wordt afgesloten en wordt gestart.
$server_name = "server_instance" #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc FROM sys.database_mirroring_endpoints"
Voer de volgende opdracht uit als u vermoedt dat het eindpunt niet reageert op verbindingen of niet wordt uitgevoerd.
$server_name = "server_instance" #use your SQL Server instance here
$server_name = "hadr_endpoint" #replace with your endpoint name
sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = stopped"
sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = started"
Waarschuwing
Als u de opdracht uitvoert, STATE = stopped
wordt uw eindpunt gestopt en wordt de AlwaysOn-verkeersstroom tijdelijk onderbroken.
Problemen met het netwerk of de verbinding, of poorten worden geblokkeerd bij de firewall
Gebruik de volgende opdrachten om de connectiviteit in beide richtingen van Node1
en naarNode1
:Node2
Node2
$computer = "remote_node" # replace with node name in your environment
$port = "5022" # replace with the port from your database_mirroring_endpoints
Test-NetConnection -ComputerName $computer -Port $port
Account is geen domeingebruiker en kan geen verbinding maken met de domeincontroller en met het externe knooppunt
Volg deze stappen om te testen of het serviceaccount verbinding kan maken met het externe knooppunt. Bij de stappen wordt ervan uitgegaan dat u niet bent aangemeld met het serviceaccount.
Selecteer Start>Windows PowerShell> met de rechtermuisknop op het pictogram.
Selecteer Meer>uitvoeren als verschillende gebruiker>Een ander account gebruiken.
Typ de naam en het wachtwoord van het serviceaccount.
Nadat Windows PowerShell is geopend, typt u de volgende opdracht om te controleren of u bent aangemeld met het serviceaccount:
whoami
Vervolgens kunt u de verbinding met het externe knooppunt testen, zoals in het volgende voorbeeld.
$computer = "remote_node" # replace with node name in your environment $port = "5022" # replace with the port from your database_mirroring_endpoints Test-NetConnection -ComputerName $computer -Port $port