Availability-Groups

可用性組只讀路由不適用於 SQL 登錄

  • August 21, 2019

我們有以下可用性組配置:

server1.domain.com - primary
server2.domain.com - sync secondary
server3.domain.com - async secondary

sql-listener.domain.com - availability group listener DNS name

最近我們設置了只讀路由 (ROR)

只讀路由 URL:

server1 - TCP://server1.domain.com:1433
server2 - TCP://server2.domain.com:1433
server3 - TCP://server3.domain.com:1433

只讀路由列表:

server1: server2, server3, server1
server2: server1, server3, server2
server3: server2, server1, server3

在使用 Windows 身份驗證登錄 (Domain\MyLogin) 和 Options >> Additional Connection Parameters 選項卡 -> ApplicationIntent=ReadOnly 在 SSMS 中進行測試時,它執行良好

雖然server1是主要的,但我使用上述參數在 SSMS 中連接到 AG 偵聽器(sql-listener.domain.com)並執行select @@servername,它顯示server 2,這意味著 ROR 有效

問題/疑問:

當我嘗試使用 SQL 身份驗證登錄 (SQLAuthLogin) 和ApplicationIntent=ReadOnly參數在 SSMS 中連接到 AG 偵聽器,然後執行select @@servername時,它顯示了我server1

>>> So in my case, ROR does not work with SQL Authentication Login is there any way to fix this ?

補充:在 server1 和 server2 上仔細檢查 SQLAuthLogin 的 SID - SID 相同,SQLAuthLogin 可以登錄到兩個伺服器並查詢 MyDatabase 就好了

問題不在 SQL 或 Windows 身份驗證方法中,而是在 default_database 設置中

發現對於我的 Windows 身份驗證登錄default_database = [MyDatabase](參與可用性組),而我的 SQL 身份驗證登錄有default_database = [master]

由於上述設置,在使用 Windows 身份驗證在 SSMS 中連接時,只讀路由在ApplicationIntent=ReadOnly指定後立即起作用。對於 SQL Authentication Login,不僅ApplicationIntent=ReadOnly需要指定,還應該包含Initial Catalog=[MyDatabase]

添加Initial Catalog=[MyDatabase]修復了問題,SQL 身份驗證登錄可以連接並被定向到只讀輔助

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/245785