设想
您想要在高可用性模式下配置远程桌面服务连接代理,使用(至少)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:未指定:(:)[写入错误],RDManagementException + 完全合格的错误标识:SetRdmsHighAvailability,Microsoft.PowerShell.Commands.WriteErrorCommand + PS计算机名称:本地主机
诊断
你确实确定一切没问题。您可以以SYSTEM
用户身份启动 PowerShell psexec -is powershell
,然后使用 PowerShell SQL 工具和正确的驱动程序根据自己的喜好创建数据库。
没有什么是错的。
不过,有一件事很奇怪。你使用 GUI 向导或 PowerShell 命令检查防火墙,然后你看到绝对没有 SQL 服务器连接尝试。
怎么了?
答案1
尽管微软在 UI 或 PowerShell 命令中声称……
...数据库路径不是可选的!
是的。一旦您添加了数据库路径,一切就开始正常工作了!
神奇的是,如果您只指定数据库路径,例如:
C:\ClusterStorage\SQL Data\MSSQL13.MSSQLSERVER\MSSQL\DATA
如果你的日志有不同的默认路径,则将创建新的数据库正确地:
C:\ClusterStorage\SQL Log\MSSQL13.MSSQLSERVER\MSSQL\DATA
答案2
这个话题可能有点老了,但我们最近才升级到 2016 RD Server Farm,而且我在谷歌上找到的所有其他东西都不起作用,你的回答终于让我找到了解决方案。所以如果有人仍打算升级,我想我会分享一些额外的信息。
我想补充一点,当我尝试使用与默认数据库根目录路径不同的路径时,它也不起作用。您可以在 MS SQL Server Management Studio 中的服务器选项中获取您的路径。
在该文件夹中,有一个名为 MSSQLSERVER 且拥有完全权限的服务帐户用户,代理似乎使用该用户来创建数据库。在服务器上的其他每个文件夹中,都显示与上述相同的错误。
附加信息:当您想要向 HA Broker 添加第二台服务器时,您需要首先将 RDS Broker 安全组映射为新创建的数据库上的 dbowner。这不是自动完成的。
答案3
尝试像这样添加。它应该有效。
DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com,1434;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;Database=RDSDB
答案4
问题在于 MS SQL 实例中的权限。您应该进入 SQL → 安全 → 登录 → RemoteAppBrokersGroup → 属性 → 安全对象 → 创建任何数据库(您没有得到分配 dbcreate 权限时自动选中此复选框)