解决 AlwaysOn 可用性组配置问题 (SQL Server)
本主题提供的信息可帮助您解决在为 AlwaysOn 可用性组 配置服务器实例时遇到的典型问题。 典型配置问题包括AlwaysOn 可用性组 被禁用、帐户配置不当、数据库镜像端点不存在、端点无法访问(SQL Server 错误 1418)、网络访问不存在,以及联接数据库命令失败(SQL Server 错误 35250)。
注意 |
---|
确保您满足 AlwaysOn 可用性组 的先决条件。 有关详细信息,请参阅针对 AlwaysOn 可用性组的先决条件、限制和建议 (SQL Server)。 |
本主题内容:
部分 |
说明 |
---|---|
未启用 AlwaysOn 可用性组 |
如果 SQL Server 实例未启用 AlwaysOn 可用性组,该实例则不支持创建可用性组,也无法承载任何可用性副本。 |
帐户 |
介绍了正确配置运行 SQL Server 所用的帐户的相关要求。 |
端点 |
介绍如何诊断与服务器实例的数据库镜像端点有关的问题。 |
系统名称 |
概述了在端点 URL 中指定服务器实例的系统名称的备选方法。 |
网络访问 |
记录了承载可用性副本的每个服务器实例必须能够通过 TCP 访问其他各个服务器实例的端口的要求。 |
端点访问(SQL Server 错误 1418) |
包含有关此 SQL Server 错误消息的信息。 |
联接数据库失败(SQL Server 错误 35250) |
介绍由于与主副本的连接处于非活动状态而导致未能将辅助数据库联接到可用性组的可能原因和解决方法。 |
只读路由未正确工作 |
|
相关任务 |
包含 SQL Server 2012 联机丛书中专门针对排除可用性组配置问题的面向任务的主题列表。 |
相关内容 |
包含 SQL Server 联机丛书以外的相关资源的列表。 |
未启用 AlwaysOn 可用性组
必须在每个 SQL Server 2012 实例上启用 AlwaysOn 可用性组 功能。 有关详细信息,请参阅启用和禁用 AlwaysOn 可用性组 (SQL Server)。
帐户
必须正确配置运行 SQL Server 所用的帐户。
帐户是否具有正确的权限?
如果伙伴使用相同的域用户帐户运行,则正确的用户登录名将自动存在于全部两个 master 数据库中。 这样可简化数据库的安全配置并建议这样做。
如果两个服务器实例使用不同的帐户运行,则必须在远程服务器实例上的 master 数据库中创建每个登录帐户,并且必须向该登录帐户授予 CONNECT 权限,以便连接到该服务器实例的数据库镜像端点。 有关详细信息,请参阅设置数据库镜像或 AlwaysOn 可用性组的登录帐户 (SQL Server)。
如果 SQL Server 正在以内置帐户(例如 Local System、Local Service 或 Network Service)或非域帐户运行,则您必须使用证书来进行端点身份验证。 如果您的服务帐户使用的是同一个域中的域帐户,则您可以选择为所有副本位置上的每个服务帐户授予 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
对于难以解释的 AlwaysOn 可用性组 设置问题,建议您检查每个服务器实例以确定它是否正在侦听相应的端口。 有关验证端口可用性的信息,请参阅 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 权限。
只读路由未正确工作
验证以下配置值设置并且根据需要进行更正。
|
对象… |
操作 |
注释 |
链接 |
---|---|---|---|---|
当前主副本 |
确保可用性组侦听器处于联机状态。 |
验证侦听器是否处于联机状态:
重新启动处于脱机状态的侦听器:
|
||
当前主副本 |
确保 READ_ONLY_ROUTING_LIST 仅包含承载可读辅助副本的服务器实例。 |
|
sys.availability_replicas (Transact-SQL) |
|
read_only_routing_list 中的每个副本 |
请确保 Windows 防火墙未在阻止 READ_ONLY_ROUTING_URL 端口。 |
— |
||
read_only_routing_list 中的每个副本 |
在 SQL Server 配置管理器中,请确认:
|
— |
||
read_only_routing_list 中的每个副本 |
确保 READ_ONLY_ROUTING_URL (TCP://system-address:port) 包含正确的完全限定域名 (FQDN) 和端口号。 |
— |
计算 AlwaysOn 的 read_only_routing_url |
|
客户端系统 |
确认客户端驱动程序支持只读路由。 |
— |
返回页首
相关任务
[返回页首]
相关内容
[返回页首]
请参阅
概念
针对数据库镜像和 AlwaysOn 可用性组的传输安全性 (SQL Server)
针对 AlwaysOn 可用性组的先决条件、限制和建议 (SQL Server)