AlwaysOn 可用性组中的可用性副本连接已断开

适用于: SQL Server

介绍

  • 策略名称:可用性副本连接状态
  • 问题:断开可用性副本的连接
  • 类别:严重
  • Facet:可用性副本

说明

此策略检查可用性副本之间的连接状态。 当可用性副本的连接状态为 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 流量流。

防火墙存在网络或连接问题或者端口被阻止

使用以下命令测试从 Node1Node2 和从 Node2Node1 的两个方向的连接:

$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

帐户不是域用户,无法连接到 DC 和远程节点

若要测试服务帐户是否可以连接到远程节点,请执行以下步骤。 这些步骤假定未使用服务帐户登录。

  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