Sql-Server

RDS 連接代理高可用性無法連接到數據庫

  • November 18, 2020

設想

您希望使用(至少)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 上收到以下錯誤消息:

數據庫連接字元串中指定的數據庫在 RD 連接代理伺服器中不可用。 確保 SQL Server 在網路上可用,SQL Server Native Client 安裝在 RD Connection Broker 伺服器上,並且 RD Connection Broker 對數據庫具有寫入權限。

或 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。這不是自動完成的。

引用自:https://serverfault.com/questions/1007905