AlwaysOn 可用性组中的可用性副本连接已断开
适用于: SQL Server
介绍
- 策略名称:可用性副本连接状态
- 问题:断开可用性副本的连接
- 类别:严重
- Facet:可用性副本
说明
此策略检查可用性副本之间的连接状态。 当可用性副本的连接状态为 DISCONNECTED
时,此策略处于不正常状态。 否则,该策略处于正常状态。
可能的原因
次要副本未连接到主要副本。 连接状态为 DISCONNECTED
。 出现此问题的原因可能是以下之一:
- 连接端口可能与另一个应用程序冲突。
- 加密类型或算法不匹配。
- 连接端点已删除或未启动。
- 防火墙存在网络/连接问题或端口被阻止。
- 服务/启动帐户不是域用户,无法连接到 DC、远程节点和端口(例如 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 = "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 和远程节点
若要测试服务帐户是否可以连接到远程节点,请执行以下步骤。 这些步骤假定未使用服务帐户登录。
选择“开始”>“Windows PowerShell”>右键单击图标。
选择“更多”>“以不同用户身份运行”>“使用不同的帐户”。
键入服务帐户名称和密码。
打开 Windows PowerShell 后,键入以下命令以验证是否使用服务帐户登录:
whoami
然后,可以测试到远程节点的连接,如以下示例所示。
$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