Condividi tramite


La replica di disponibilità è disconnessa in un gruppo di disponibilità Always On

Si applica a: SQL Server

Introduzione

  • Nome del criterio: Stato di connessione della replica di disponibilità
  • Problema: La replica di disponibilità è disconnessa.
  • Categoria: Critico
  • Facet: Replica di disponibilità

Descrizione

Tramite questi criteri è possibile controllare lo stato di connessione tra le repliche di disponibilità. I criteri sono in uno stato non integro quando lo stato di connessione della replica di disponibilità è DISCONNECTED. Altrimenti, sono in uno stato integro.

Possibili cause

La replica secondaria non è connessa alla replica primaria. Lo stato di connessione è DISCONNECTED. Questo problema può essere causato da uno dei motivi seguenti:

Possibili soluzioni

Verificare la configurazione dell'endpoint del mirroring di database per le istanze della replica primaria e secondaria e aggiornare la configurazione non corrispondente. Controllare anche se la porta è in conflitto, e in tal caso, cambiare il numero di porta.

Di seguito sono riportate le possibili soluzioni a questo problema:

La porta di connessione potrebbe essere in conflitto con un'altra applicazione

Eseguire i comandi seguenti per diagnosticare i problemi relativo alla porta:

$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'; "

Il comando precedente restituisce il numero di porta che è necessario usare nel comando seguente.

$port = "5022"
Get-NetTCPConnection -LocalPort $port
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess | Select-Object Name, ProductVersion, Path, Id

Il tipo o l'algoritmo di crittografia non corrispondono

Eseguire questo comando in entrambi i server e confrontare la crittografia per assicurarsi che sia uguale in entrambi.

$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"

L'endpoint di connessione è stato eliminato o non è stato avviato

Eseguire il comando seguente se l'endpoint di mirroring termina e viene avviato.

$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"

Eseguire il comando seguente se si sospetta che l'endpoint non risponda alle connessioni o non sia in esecuzione.

$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"

Avviso

L'esecuzione del comando con STATE = stopped arresterà l'endpoint e interromperà temporaneamente il flusso di traffico Always On.

Sono presenti problemi di rete/connettività o porte bloccate a livello di firewall

Usare i comandi seguenti per testare la connettività in entrambe le direzioni da Node1 a Node2 e Node2 a 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

L'account non è un utente di dominio e non può connettersi al DC e al node remoto

Per verificare se l'account del servizio può connettersi al nodo remoto, seguire questa procedura. I passaggi presuppongono che non si sia connessi con l'account del servizio.

  1. Selezionare Start>Windows PowerShell> fare clic con il pulsante destro del mouse sull'icona.

  2. Selezionare Altro>Esegui come altro utente>Usa un account diverso.

  3. Digitare il nome e la password dell'account del servizio.

  4. Dopo aver aperto Windows PowerShell, digitare il comando seguente per verificare di essersi registrati con l'account del servizio:

    whoami
    
  5. È quindi possibile testare la connessione al node remoto come nel seguente esempio.

    $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