解决 AlwaysOn 可用性组配置问题 (SQL Server)
本主题提供的信息有助于排查为Always On可用性组配置服务器实例时的典型问题。 典型的配置问题包括Always On可用性组已禁用、帐户配置错误、数据库镜像终结点不存在、终结点不可访问 (SQL Server错误 1418) 、不存在网络访问以及联接数据库命令失败 (SQL Server错误 35250) 。
注意
确保满足Always On可用性组先决条件。 有关详细信息,请参阅 AlwaysOn 可用性组的先决条件、限制和建议 (SQL Server) 。
本主题内容:
部分 | 说明 |
---|---|
未启用 AlwaysOn 可用性组 | 如果未为Always On可用性组启用 SQL Server 实例,则该实例不支持创建可用性组,并且无法托管任何可用性副本。 |
帐户 | 介绍了正确配置运行 SQL Server 所用的帐户的相关要求。 |
端点 | 介绍如何诊断与服务器实例的数据库镜像端点有关的问题。 |
系统名称 | 概述了在端点 URL 中指定服务器实例的系统名称的备选方法。 |
网络访问 | 记录了承载可用性副本的每个服务器实例必须能够通过 TCP 访问其他各个服务器实例的端口的要求。 |
端点访问(SQL Server 错误 1418) | 包含有关此 SQL Server 错误消息的信息。 |
联接数据库失败(SQL Server 错误 35250) | 介绍由于与主副本的连接处于非活动状态而导致未能将辅助数据库联接到可用性组的可能原因和解决方法。 |
只读路由未正确工作 | |
相关任务 | 包含 SQL Server 2014 联机丛书中面向任务的主题列表,这些主题与可用性组配置故障排除特别相关。 |
相关内容 | 包含 SQL Server 联机丛书以外的相关资源的列表。 |
未启用 AlwaysOn 可用性组
必须在 SQL Server 2014 的每个实例上启用Always On可用性组功能。 有关详细信息,请参阅启用和禁用 AlwaysOn 可用性组 (SQL Server)。
帐户
必须正确配置运行 SQL Server 所用的帐户。
帐户是否具有正确的权限?
如果伙伴使用相同的域用户帐户运行,则正确的用户登录名将自动存在于全部两个 master 数据库中。 这样可简化数据库的安全配置并建议这样做。
如果两个服务器实例使用不同的帐户运行,则必须在远程服务器实例上的 master 数据库中创建每个登录帐户,并且必须向该登录帐户授予 CONNECT 权限,以便连接到该服务器实例的数据库镜像端点。 有关详细信息,请参阅为数据库镜像或 AlwaysOn 可用性组设置登录帐户 (SQL Server) 。
如果SQL Server作为内置帐户(例如本地系统、本地服务、网络服务或非域帐户)运行,则必须使用证书进行终结点身份验证。 如果您的服务帐户使用的是同一个域中的域帐户,则您可以选择为所有副本位置上的每个服务帐户授予 CONNECT 访问权限,或者您可以使用证书。 有关详细信息,请参阅使用数据库镜像终结点证书 (Transact-SQL)。
终结点
必须正确配置端点。
确保要托管可用性副本(每个副本位置)的各个 SQL Server 实例都具有数据库镜像终结点。 若要确定给定服务器实例上是否存在数据库镜像终结点,请使用 sys.database_mirroring_endpoints 目录视图。 有关详细信息,请参阅 为 Windows 身份验证创建数据库镜像终结点 (Transact-SQL) 或 允许数据库镜像终结点使用证书进行出站连接 (Transact-SQL) 。
检查端口号是否正确。
若要标识当前与服务器实例的数据库镜像端点关联的端口,请使用以下 Transact-SQL 语句:
SELECT type_desc, port FROM sys.tcp_endpoints; GO
对于难以解释Always On可用性组设置问题,建议检查每个服务器实例以确定它是否在侦听正确的端口。 有关验证端口可用性的信息,请参阅 MSSQLSERVER_1418。
确保已启动端点 (STATE = STARTED)。 对于各个服务器实例,使用以下 Transact-SQL 语句:
SELECT state_desc FROM sys.database_mirroring_endpoints
有关 state_desc 列的详细信息,请参阅 sys.database_mirroring_endpoints (Transact-SQL)。
若要启动端点,请使用以下 Transact-SQL 语句:
ALTER ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = <port_number>) FOR database_mirroring (ROLE = ALL); GO
有关详细信息,请参阅 ALTER ENDPOINT (Transact-SQL)。
确保其他服务器的登录帐户具有 CONNECT 权限。 若要确定哪个登录帐户拥有对端点的 CONNECT 权限,请对每个服务器实例使用以下 Transact-SQL 语句:
SELECT 'Metadata Check'; SELECT EP.name, SP.STATE, CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id)) AS GRANTOR, SP.TYPE AS PERMISSION, CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id)) AS GRANTEE FROM sys.server_permissions SP , sys.endpoints EP WHERE SP.major_id = EP.endpoint_id ORDER BY Permission,grantor, grantee; GO
系统名称
对于端点 URL 中服务器实例的系统名称,可以使用明确标识系统的任何名称。 服务器地址可以是系统名称(如果各系统都在同一个域中)、完全限定域名或 IP 地址(最好是静态 IP 地址)。 保证使用完全限定域名的有效性。 有关详细信息,请参阅在添加或修改可用性副本时指定终结点 URL (SQL Server)。
网络访问
要承载可用性副本的每个服务器实例必须能够通过 TCP 访问其他各个服务器实例的端口。 当服务器实例位于相互不信任的不同域(不可信的域)中时,这尤为重要。
端点访问(SQL Server 错误 1418)
此 SQL Server 消息指示无法到达端点 URL 中指定的服务器网络地址或该地址不存在,同时建议确认网络地址名称并重新发出命令。 有关详细信息,请参阅 MSSQLSERVER_1418。
联接数据库失败(SQL Server 错误 35250)
此部分介绍由于与主副本的连接处于非活动状态而导致未能将辅助数据库联接到可用性组的可能原因和解决方法。
解决方法:
检查防火墙设置,确定是否允许在承载主副本的服务器实例与辅助副本之间进行端点端口通信(默认情况下为端口 5022)。
检查网络服务帐户是否拥有对端点的 CONNECT 权限。
只读路由未正确工作
验证以下配置值设置并且根据需要进行更正。
On... | 操作 | 注释 | 链接 | |
---|---|---|---|---|
当前主副本 | 确保可用性组侦听器处于联机状态。 | 验证侦听器是否处于联机状态:SELECT * FROM sys.dm_tcp_listener_states; 重新启动处于脱机状态的侦听器: ALTER AVAILABILITY GROUP myAG RESTART LISTENER 'myAG_Listener'; |
sys.dm_tcp_listener_states (Transact-SQL) 更改可用性组 (Transact-SQL) |
|
当前主副本 | 确保 READ_ONLY_ROUTING_LIST 仅包含承载可读辅助副本的服务器实例。 | 标识可读次要副本: sys.availability_replicas (列secondary_role_allow_connections_desc) 查看只读路由列表: sys.availability_read_only_routing_lists 更改只读路由列表: ALTER AVAILABILITY GROUP |
sys.availability_replicas (Transact-SQL) sys.availability_read_only_routing_lists (Transact-SQL) 更改可用性组 (Transact-SQL) |
|
read_only_routing_list 中的每个副本 | 请确保 Windows 防火墙未在阻止 READ_ONLY_ROUTING_URL 端口。 | - | 为数据库引擎访问配置 Windows 防火墙 | |
read_only_routing_list 中的每个副本 | 在 SQL Server 配置管理器 中,验证: 已启用 SQL Server 远程连接。 已启用 TCP/IP。 IP 地址已正确配置。 |
- | 查看或更改服务器属性 (SQL Server) 配置服务器以侦听特定 TCP 端口(SQL Server 配置管理器) |
|
read_only_routing_list 中的每个副本 | 确保READ_ONLY_ROUTING_URL (TCP://system-address :port) 包含正确的完全限定域名 (FQDN) 和端口号。 |
- | 计算 AlwaysOn 的 read_only_routing_url sys.availability_replicas (Transact-SQL) 更改可用性组 (Transact-SQL) |
|
客户端系统 | 确认客户端驱动程序支持只读路由。 | - | AlwaysOn 客户端连接 (SQL Server) |
Related Tasks
相关内容
另请参阅
数据库镜像和 AlwaysOn 可用性组的传输安全性 (SQL Server) AlwaysOn 可用性组的客户端网络配置先决条件、限制和建议 (SQL Server)