Replika dostępności jest rozłączona w grupie dostępności zawsze włączonych usług
Dotyczy: SQL Server
Wprowadzenie
- Nazwa zasad: Stan połączenia repliki dostępności
- Problem: Replika dostępności jest rozłączona
- Kategoria: Krytyczne
- Aspekt: replika dostępności
Opis
Te zasady sprawdzają stan połączenia między replikami dostępności. Zasady są w złej kondycji, gdy stan połączenia repliki dostępności to DISCONNECTED
. Zasady są w przeciwnym razie w dobrej kondycji.
Możliwe przyczyny
Replika pomocnicza nie jest połączona z repliką podstawową. Stan połączenia to DISCONNECTED
. Ten problem może być spowodowany jedną z następujących przyczyn:
- Port połączenia może być w konflikcie z inną aplikacją.
- Typ lub algorytm szyfrowania jest niezgodny.
- Punkt końcowy połączenia został usunięty lub nie został uruchomiony.
- Występują problemy z siecią/łącznością lub porty są blokowane w zaporze.
- Konto usługi/uruchamiania nie jest użytkownikiem domeny i nie może nawiązać połączenia z kontrolerem domeny oraz z węzłem zdalnym i portem (na przykład 5022).
Możliwe rozwiązania
Sprawdź konfigurację punktu końcowego dublowania bazy danych dla wystąpień repliki podstawowej i pomocniczej oraz zaktualizuj niezgodną konfigurację. Sprawdź również, czy port jest w konflikcie, a jeśli tak, zmień numer portu.
Poniżej przedstawiono możliwe rozwiązania tego problemu:
Port połączenia może być w konflikcie z inną aplikacją
Uruchom następujące polecenia, aby zdiagnozować problemy z portem:
$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'; "
Poprzednie polecenie zwraca numer portu, którego należy użyć w poniższym poleceniu.
$port = "5022"
Get-NetTCPConnection -LocalPort $port
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess | Select-Object Name, ProductVersion, Path, Id
Typ lub algorytm szyfrowania jest niezgodny
Uruchom to polecenie na obu serwerach i porównaj szyfrowanie i upewnij się, że oba są takie same.
$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"
Punkt końcowy połączenia został usunięty lub nie został uruchomiony
Uruchom następujące polecenie, jeśli punkt końcowy dublowania zakończy działanie i zostanie uruchomiony.
$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"
Uruchom następujące polecenie, jeśli podejrzewasz, że punkt końcowy nie odpowiada na połączenia lub nie jest uruchomiony.
$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"
Ostrzeżenie
Uruchomienie polecenia z STATE = stopped
poleceniem spowoduje zatrzymanie punktu końcowego i tymczasowe przerwanie przepływu ruchu Zawsze włączone.
Problemy z siecią lub łącznością lub porty są blokowane w zaporze
Użyj następujących poleceń, aby przetestować łączność w obu kierunkach od Node1
do i Node2
Node2
do Node1
:
$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
Konto nie jest użytkownikiem domeny i nie może nawiązać połączenia z kontrolerem domeny oraz z węzłem zdalnym
Aby sprawdzić, czy konto usługi może nawiązać połączenie z węzłem zdalnym, wykonaj następujące kroki. W krokach założono, że nie zalogowano się przy użyciu konta usługi.
Wybierz pozycję Uruchom program>Windows PowerShell> prawym przyciskiem myszy ikonę.
Wybierz pozycję Więcej>uruchom jako inny użytkownik>Użyj innego konta.
Wpisz nazwę konta usługi i hasło.
Po uruchomieniu programu Windows PowerShell wpisz następujące polecenie, aby sprawdzić, czy zalogowaliśmy się przy użyciu konta usługi:
whoami
Następnie możesz przetestować połączenie z węzłem zdalnym, jak w poniższym przykładzie.
$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