RDS 連接代理高可用性無法連接到數據庫
設想
您希望使用(至少)Windows Server 2016 在高可用性模式下配置遠端桌面服務連接代理。
您已完成並驗證所有先決條件:
- 可以通過網路訪問數據庫(所有防火牆和路由都可以),
- 數據庫權限正常(
db_creator
對於包含所有目標 RDS CB 主機的組),- SQL 驅動程序已安裝且連接字元串正確。
您可以通過嚮導開始配置高可用性:
或通過 Powershell:
Set-RDConnectionBrokerHighAvailability ` -ClientAccessName "rds.contoso.com" ` -DatabaseConnectionString "DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=rdscbha"
您省略了“儲存數據庫的文件夾”,或者
-DatabaseFilePath
因為它是可選的,並且您的 MSSQL 已經配置了預設儲存新數據庫的位置。問題
您在 GUI 上收到以下錯誤消息:
或 PowerShell 上的以下錯誤:
連接字元串中指定的數據庫 DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=master 在 RD 連接代理伺服器 RDS-01 中不可用.CONTOSO.COM。確保數據庫伺服器在網路上可用,SQL Server Native Client 安裝在所有 RD 連接代理伺服器上,並且 RD 連接代理伺服器的電腦帳戶是數據庫伺服器上 RDS 管理伺服器組的成員。 + CategoryInfo : NotSpecified: (:) [Write-Error], RDManagementException + FullyQualifiedErrorId : SetRdmsHighAvailability,Microsoft.PowerShell.Commands.WriteErrorCommand + PSComputerName:本地主機
診斷
你真的很確定一切都很好。您可以使用 PowerShell SQL 工具和正確的驅動程序以
SYSTEM
使用者身份啟動 PowerShell,並根據自己的喜好創建數據庫。psexec -is powershell
沒有錯誤。
不過,有一點很奇怪。您使用 GUI 嚮導或 PowerShell 命令檢查您的防火牆,您絕對沒有看到任何 SQL 伺服器連接嘗試。
怎麼了?
儘管微軟在 UI 或 PowerShell 命令中聲稱…
…數據庫路徑不是可選的!
是的。添加數據庫路徑後,一切都開始工作了!
神奇的是,如果您只指定數據庫路徑,例如:
C:\ClusterStorage\SQL Data\MSSQL13.MSSQLSERVER\MSSQL\DATA
如果您的日誌具有不同的預設路徑,則將正確創建新創建的數據庫:
C:\ClusterStorage\SQL Log\MSSQL13.MSSQLSERVER\MSSQL\DATA
這個話題可能有點老了,但我們最近才升級到 2016 RD Server Farm,我在Google搜尋時發現的所有其他東西都不起作用,你的回答終於讓我找到了解決方案。因此,如果有人仍計劃進行升級,我想我會分享一些額外的資訊。
我想補充一點,當我嘗試使用與預設數據庫根目錄路徑不同的路徑時,它也不起作用。您可以在 MS SQL Server Management Studio 的伺服器選項中獲取您的路徑。
在該文件夾中有一個名為 MSSQLSERVER 的具有完全權限的服務帳戶使用者,代理似乎使用它來創建數據庫。在伺服器上的每個其他文件夾中,它都顯示了與上面發布的相同的錯誤。
附加資訊:當您想向 HA 代理添加第二台伺服器時,您需要首先將 RDS 代理安全組映射為新創建的數據庫上的 dbowner。這不是自動完成的。