天天看點

[AlwaysOn Availability Groups]排查:AG配置 排查AG配置

本文主要用來幫助排查在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 = &lt;port_number&gt;)

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>