Реплика доступности не соединена с группой доступности Always On

Применимо к:SQL Server

Введение

  • Имя политики Состояние соединения реплики доступности
  • Проблема Реплика доступности отключена.
  • КатегорияКритически важное
  • Аспект Реплика доступности

Описание

Эта политика проверяет состояние соединения между репликами доступности. Эта политика находится в нерабочем состоянии, если подключение к реплике доступности имеет состояние DISCONNECTED. В остальном политика находится в рабочем состоянии.

Возможные причины

Вторичная реплика не подключена к первичной реплике. Состояние соединения — DISCONNECTED. Возможны следующие причины этой проблемы.

  • Порт подключения может конфликтовать с другим приложением.

  • Несоответствие типа или алгоритма шифрования.

  • Конечная точка подключения была удалена или не была запущена.

  • В брандмауэре блокируются проблемы с сетью, подключением или портами.

  • Учетная запись службы или запуска не является пользователем домена и не может подключиться к контроллеру домена, к удаленному узлу и порту (например, 5022)

Возможные решения

Проверьте конфигурацию конечной точки зеркального отображения базы данных для экземпляров первичной и вторичной реплики и обновите конфигурацию с несоответствием. Кроме того, проверьте наличие конфликта портов и при его обнаружении измените номер порта.

Ниже перечислены возможные решения этой проблемы:

  • Порт подключения может конфликтовать с другим приложением.

    Выполните следующие команды для диагностики проблемы с портом:

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

    Приведенная выше команда вернет номер порта, который необходимо использовать в приведенной ниже команде.

    $port = "5022"
    Get-NetTCPConnection -LocalPort $port
    Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
    
  • Несоответствие типа или алгоритма шифрования.

    Выполните алгоритм на обоих серверах, сравните шифрование и убедитесь, что оба варианта одинаковы:

    $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"
    
  • Конечная точка подключения была удалена или не была запущена.

    Выполните следующую команду, если конечная точка зеркального отображения завершает работу и запускается.

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

    Выполните приведенную ниже команду, если вы подозреваете, что конечная точка не отвечает на попытки подключения или не запущена.

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

    Предупреждение

    Выполнение команды с STATE = stopped останавливает работу конечной точки и временно прерывает поток трафика Always On.

  • В брандмауэре блокируются проблемы с сетью, подключением или портами

    Используйте следующие команды, чтобы проверить подключение в обоих направлениях от Node1 к Node2 и от Node2 к Node1:

    $computer = $env:computername
    $port = "5022"                 # replace with the port from your database_mirroring_endpoints.
    Test-NetConnection -ComputerName $computer -Port $port 
    
  • Учетная запись службы или запуска не является пользователем домена и не может подключиться к контроллеру домена, к удаленному узлу и порту (например, 5022)

    Чтобы проверить, может ли учетная запись службы подключиться к удаленному узлу, выполните следующие действия. Эти действия предполагают, что вы не выполняли вход в систему с помощью учетной записи службы:

    1. Нажмите кнопку Пуск>Windows PowerShell> и щелкните правой кнопкой мыши значок.

    2. Выберите Больше>Запуск от имени другого пользователя>Использовать другую учетную запись.

    3. Введите имя учетной записи службы и пароль.

    4. После открытия Windows PowerShell введите следующую команду, чтобы убедиться, что вы выполнили вход с помощью учетной записи службы:

      whoami
      
    5. Затем можно проверить подключение к удаленному узлу. Пример:

      $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
      

См. также раздел