Поделиться через


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

Область применения: SQL Server

Введение

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

Description

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

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

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

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

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

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

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

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

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

Проблемы с сетью или подключением или порты заблокированы в брандмауэре

Используйте следующие команды, чтобы проверить подключение в обоих направлениях от и Node2 Node1до Node1 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

Учетная запись не является пользователем домена и не может подключиться к контроллеру домена, а также к удаленному узлу

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

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

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

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

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

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

    $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