本文主要用来帮助排查在AG配置时出现的问题,包括,AG功能被禁用,账号配置不正确,数据库镜像endpoint不存在,endpoint不能访问。
Section
Description
<a href="#_1._AG%E4%B8%8D%E5%8F%AF%E7%94%A8">AlwaysOn Availability Groups Is Not Enabled</a>
如果实例没有启动AG特性,实例就不支持任何AG相关的功能
<a href="#_2.%E8%B4%A6%E5%8F%B7">Accounts</a>
在SQL Server在运行的情况下,正确的账号配置
<a href="#_3._Endpoint">Endpoints</a>
诊断关于实例的镜像endpoint问题。
<a href="#_4.%E7%B3%BB%E7%BB%9F%E5%90%8D">System name</a>
Endpoint URL中可用来替换实例的系统名
<a href="#_5._%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE">Network access</a>
关于每个持有AG副本的实例,都必须要有可以通过TCP访问其他实例的权限
<a href="#_6._EndPoint%E8%AE%BF%E9%97%AE%EF%BC%8C1418%E9%94%99%E8%AF%AF">Endpoint Access (SQL Server Error 1418)</a>
SQL Server错误信息1418
<a href="#_7._%E5%8A%A0%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%B1%E8%B4%A5%EF%BC%8C35250%E9%94%99%E8%AF%AF">Join Database Fails (SQL Server Error 35250)</a>
关于join数据库出现的问题,因为primary副本不是活动的
<a href="#_8._%E5%8F%AA%E8%AF%BB%E8%B7%AF%E7%94%B1%E4%B8%8D%E8%83%BD%E6%AD%A3%E7%A1%AE%E5%B7%A5%E4%BD%9C">Read-Only Routing is Not Working Correctly</a>
<a href="#_9._Related_Tasks">Related Tasks</a>
<a href="#_10._Related_Content">Related Content</a>
SQL Server运行的必须有正确的配置:
1.权限配置是否正确?
a.如果运行在相同域账号,正确的用户login都会保存在2个master数据库中。这个配置简单也是被推荐的配置。
b.如果2个实例使用不同的账号,每个账号必须在远程master库被正确的创建,被授予CONNECT权限,通过镜像endpoint连接远程实例。
2.如果以build-in账号运行,比如Local System,Local Service,或者其他用户,必须创建一个证书,用于endpoint的验证。如果你的服务是使用域账号的,可以给每个服务器启动账号授予CONNECT权限,或者使用证书验证。
Endpoint必须正确配置
2.检查端口号,可以查看DMV sys.tcp_endpoint查看端口号。
4.为了保证endpoint是否启动,可以使用以下语句:
SELECT state_desc FROM sys.database_mirroring_endpoints
如果未启动,可以使用语句:
ALTER ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = <port_number>)
FOR database_mirroring(ROLE = ALL);
GO
5.保证login有CONNECT权限。可以使用以下语句查看所有endpoint的连接权限
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;
每个实例必须可以通过TCP访问其他的实例。这个很重要特别是在不同的域,相互不可信的情况下。
导致加入数据库错误的原因,是因为primary副本不活动,解决方法:
1.检查防火墙设置,是否允许endpoint访问
2.账号是否有权限访问endpoint。
只读路由不能工作检查一下信息:
On…
Action
Comments
Link
Current primary replica
保证AG Listener是活动的
To verify whether the listener is online:
SELECT * FROM sys.dm_tcp_listener_states;
To restart an offline listener:
ALTER AVAILABILITY GROUP myAG RESTART LISTENER 'myAG_Listener';
<a href="https://msdn.microsoft.com/en-us/library/hh245287(v=sql.110).aspx">sys.dm_tcp_listener_states (Transact-SQL)</a>
<a href="https://msdn.microsoft.com/en-us/library/ff878601(v=sql.110).aspx">ALTER AVAILABILITY GROUP (Transact-SQL)</a>
保证READ_ONLY_ROUTING_LIST 中只有一个可定secondary副本。
To identify readable secondary replicas:
sys.availability_replicas (secondary_role_allow_connections_desc column)
To view a read-only routing list:
sys.availability_read_only_routing_lists
To change a read-only routing list:
ALTER AVAILABILITY GROUP
<a href="https://msdn.microsoft.com/en-us/library/ff877883(v=sql.110).aspx">sys.availability_replicas (Transact-SQL)</a>
<a href="https://msdn.microsoft.com/en-us/library/hh710027(v=sql.110).aspx">sys.availability_read_only_routing_lists (Transact-SQL)</a>
Every replica in the read_only_routing_list
保证windows不会堵塞READ_ONLY_ROUTING_URL的端口
—
<a href="https://msdn.microsoft.com/en-us/library/ms175043(v=sql.110).aspx">Configure a Windows Firewall for Database Engine Access</a>
在SQL Server配置管理,验证:
1.SQL Server可以被远程连接
2.启动了TCP/IP连接
3.IP地址配置正确
<a href="https://msdn.microsoft.com/en-us/library/ms186947(v=sql.110).aspx">View or Change Server Properties (SQL Server)</a>
<a href="https://msdn.microsoft.com/en-us/library/ms177440(v=sql.110).aspx">Configure a Server to Listen on a Specific TCP Port (SQL Server Configuration Manager)</a>
保证READ_ONLY_ROUTING_URL(TCP://system-address:port)配置是正确的
<a href="http://blogs.msdn.com/b/mattn/archive/2012/04/25/calculating-read-only-routing-url-for-alwayson.aspx">Calculating read_only_routing_url for AlwaysOn</a>
Client system
保证客户端驱动支持只读路由。
<a href="https://msdn.microsoft.com/en-us/library/hh510238(v=sql.110).aspx">AlwaysOn Client Connectivity (SQL Server)</a>