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à è DISCONNESSO. Altrimenti, sono in uno stato integro.

Possibili cause

La replica secondaria non è connessa alla replica primaria. Lo stato è DISCONNESSO. Il problema può essere causato da uno dei motivi seguenti:

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

  • Il tipo o l'algoritmo di crittografia non è corrispondente.

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

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

  • L'account di avvio/servizio non è un utente di dominio e non riesce a connettersi al controller di dominio e al nodo e alla porta remota (ad esempio, la 5022)

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 il problema 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 restituirà 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 è corrispondente.

    Eseguire questa operazione 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 = $env:computername
    $port = "5022"                 # replace with the port from your database_mirroring_endpoints.
    Test-NetConnection -ComputerName $computer -Port $port 
    
  • L'account di avvio/servizio non è un utente di dominio e non riesce a connettersi al controller di dominio e al nodo e alla porta remota (ad esempio, la 5022)

    Per verificare se l'account del servizio può connettersi al nodo remoto, seguire questa procedura. La procedura presuppone 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 aver eseguito l'accesso con l'account del servizio:

      whoami
      
    5. È quindi possibile testare la connessione al nodo remoto. Ad esempio:

      $computer = "remote_node" # Replace with Naode name as per your environment.
      $port = "5022"            # Replace with the port from your database_mirroring_endpoints.        
      Test-NetConnection -ComputerName $computer -Port 5022
      

Vedi anche