使用 SQL Server 高可用性解决方案时更新数据库连接字符串
Citrix 提供了多个 PowerShell 脚本,用于在使用 SQL Server 高可用性数据库解决方案(例如 Always On 和镜像)时更新 XenApp 和 XenDesktop® 数据库连接字符串。
The scripts, which use the XenApp® and XenDesktop PowerShell API, are:
- DBConnectionStringFuncs.ps1:执行实际工作的核心脚本。此脚本包含其他脚本使用的通用函数。
- Change_XD_Failover_Partner_v1.ps1:更新(添加、更改或删除)故障转移伙伴。此脚本会提示输入每个数据库的故障转移伙伴位置 (FQDN)。(提供空白故障转移伙伴会删除故障转移伙伴。您也可以使用 ClearPartner 选项删除伙伴。) 请勿将故障转移伙伴设置为与主数据库服务器相同的位置。
- Change_XD_To_ConnectionString.ps1:使用提供的连接字符串更新数据库的连接字符串。此脚本可确保某些 Citrix 服务已启动并正在运行,然后按正确顺序更新站点中所有 Controllers 上的这些服务。将每个数据库的连接字符串信息用引号括起来。
-
Change_XD_To_MultiSubnetFailover.ps1:切换 MultiSubnetFailover=true 的添加和删除。如果您使用 Always On 可用性组,Microsoft 建议连接字符串包含 MultiSubnetFailover=true。此选项可在发生高可用性事件时加快恢复速度,建议用于单子网和多子网环境。运行此脚本一次以添加该选项。如果必须删除该选项,请使用
Change_XD_To_ConnectionString.ps1再次运行脚本并提供不带此设置的字符串。 -
Change_XD_To_Null.ps1:由于出现问题,重置 localhost 上的所有连接字符串。通过将连接字符串重置为 null,此脚本将 Controller 置于“初始”状态。如果在运行此脚本后运行 Studio,系统将询问您是要创建站点还是加入现有站点。如果出现问题并且需要重置,此功能非常有用。重置后,您可以再次尝试使用 Change_XD_To_ConnectionString.ps1 设置连接字符串。
您也可以手动更新数据库连接字符串;请参阅 手动更新字符串。要下载 PowerShell 脚本,请参阅 过程 部分。
重要提示:
本文是在 XenDesktop 7.6 上编写和测试脚本的。此文档不再针对更高版本的 Citrix Virtual Apps and Desktops 进行维护或测试。
要求和需要考虑的事项
- 您必须是完整的站点管理员才能运行这些脚本。
- 在一个控制器的 PowerShell 窗口中运行脚本。需要 PowerShell v3。
- 必须安装 XenApp 和 XenDesktop 核心组件,并且站点必须已启动并正在运行。
- 在运行脚本之前,禁用强制配置日志记录。
-
MultiSubnetFailover 选项支持 .NET 4.5 及更高版本。但是,Studio 在 Windows 7 或 2008 R2 计算机上使用的 MMC 包含较早的 .NET 版本,因此当您在 Studio 导航窗格中选择 Configuration 时,可能会看到错误“不支持关键字:
multisubnetfailover”。在这种情况下,请按如下方式修补或更新: - 对于 .NET 3.5 SP1,请使用 http://support.microsoft.com/kb/2654347 进行修补。
- 对于 .NET 4.0,请更新到最低 4.0.2。建议使用 4.0.3:http://support.microsoft.com/kb/2600211。
然后,使用 Change_XD_To_MultiSubnetFailover.ps1 脚本通过此选项更新数据库连接字符串。
操作步骤
- 从 Citrix ShareFile 下载包含脚本的压缩文件。
- 解压缩文件。
- 请确保文件 DBConnectionStringFuncs.ps1 位于您所运行脚本的同一文件夹内,因为该脚本会调用 DBConnectionStringFuncs.ps1 中定义的函数。
- 请在 Controller 上运行此脚本。
如果要将站点设置为多子网故障转移,则只需运行 Change_XD_To_MultiSubnetFailover.ps1 脚本。(请记住:确保 DBConnectionStringFuncs.ps1 脚本位于同一文件夹中。)
提示:
- 更新连接字符串时,看到消息指示“
Server=SQLxxx\\CITRIX\\...”正在更改为Data Source=SQLxxx\\CITRIX\\...”是正常的。术语 Server 和 Data Source 是同义词。- 如果要操作连接字符串,请查看
Change\_XD\_脚本如何使用DBConnectionStringFuncs.ps1中的函数。
手动更新字符串
要手动更新字符串,请运行 XenApp 和 XenDesktop PowerShell 命令行小程序。
步骤 1. 将 SQL 数据库移动到其他 SQL 服务器并分配正确的权限
- 备份原始 SQL 服务器上的数据库,并将其还原到新的 SQL 服务器上。
- 在 SQL Server 管理工作室 > 安全性 > 登录名 中,添加交付控制器计算机帐户。例如,CORP\DDC01$。
- 添加 SQL 登录时,在“用户映射”页面上,单击三个 Citrix 数据库:站点数据库、监视数据库和日志记录数据库。
- 对于这三个 Citrix 数据库中的每一个,将 Delivery Controller™ 计算机帐户添加到各种数据库角色。站点数据库的角色比日志记录数据库和监视数据库多得多。
Site database - ADIdentitySchema_ROLE
Site database - Analytics_ROLE # for 7.8 and newer
Site database - AppLibrarySchema_ROLE # for 7.8 and newer
Site database - chr_Broker
Site database - chr_Controller
Site database - ConfigLoggingSiteSchema_ROLE
Site database - ConfigurationSchema_ROLE
Site database - DAS_ROLE
Site database - DesktopUpdateManagerSchema_ROLE
Site database - EnvTestServiceSchema_ROLE
Site database - HostingUnitServiceSchema_ROLE
Site database - Monitor_ROLE
Site database - OrchestrationSchema_ROLE # for 7.11 and newer
Site database - public
Site database - StorefrontSchema_ROLE # for 7.8 and newer
Site database - TrustSchema_ROLE # for 7.11 and newer
Monitoring database - Monitor_ROLE
Monitoring database - public
Logging database - ConfigLoggingSchema_ROLE
Logging database - public
<!--NeedCopy-->
步骤 2. 检索现有数据库连接(可选)
运行以下命令以查看现有数据库连接字符串:
## Load the Citrix snap-ins
asnp Citrix.*
## Get the current Delivery Controller database connections
Get-ConfigDBConnection
Get-AcctDBConnection
Get-AnalyticsDBConnection # for 7.6 and newer
Get-AppLibDBConnection # for 7.8 and newer
Get-OrchDBConnection # for 7.11 and newer
Get-TrustDBConnection # for 7.11 and newer
Get-HypDBConnection
Get-ProvDBConnection
Get-BrokerDBConnection
Get-EnvTestDBConnection
Get-SfDBConnection
Get-MonitorDBConnection
Get-MonitorDBConnection -DataStore Monitor
Get-LogDBConnection
Get-LogDBConnection -DataStore Logging
Get-AdminDBConnection
<!--NeedCopy-->
步骤 3. 删除现有数据库连接
在 Delivery Controller 上,以管理员身份打开 PowerShell 并运行以下命令。此过程将清除现有数据库连接。
## Note the state of the log site
Get-LogSite
## Load the Citrix snap-ins
asnp Citrix.*
## Disable configuration logging for the XD site:
Set-LogSite -State Disabled
## Clear the current Delivery Controller database connections
## Note: AdminDBConnection must be the last command
Set-ConfigDBConnection -DBConnection $null -Force
Set-AcctDBConnection -DBConnection $null -Force
Set-AnalyticsDBConnection -DBConnection $null -Force # for 7.6 and newer
Set-AppLibDBConnection -DBConnection $null -Force # for 7.8 and newer
Set-OrchDBConnection -DBConnection $null -Force # for 7.11 and newer
Set-TrustDBConnection -DBConnection $null -Force # for 7.11 and newer
Set-HypDBConnection -DBConnection $null -Force
Set-ProvDBConnection -DBConnection $null -Force
Set-BrokerDBConnection -DBConnection $null
Set-EnvTestDBConnection -DBConnection $null -Force
Set-SfDBConnection -DBConnection $null -Force
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null -Force
Set-MonitorDBConnection -DBConnection $null -Force
Set-LogDBConnection -DataStore Logging -DBConnection $null -Force
Set-LogDBConnection -DBConnection $null -Force
Set-AdminDBConnection -DBConnection $null -Force
<!--NeedCopy-->
如果看到错误消息,则必须重新启动所有 Citrix 服务。
Get-Service Citrix* | Stop-Service -Force
Get-Service Citrix* | Start-Service
<!--NeedCopy-->
重新启动 Citrix 服务后,如果仍然看到错误,则必须重新启动服务器。重新运行原始命令集以确认现有连接已正确删除。
以下 cmdlet 必须返回空输出:
## Load the Citrix snap-ins
asnp Citrix.*
## Get the current Delivery Controller database connections
Get-ConfigDBConnection
Get-AcctDBConnection
Get-AnalyticsDBConnection # for 7.6 and newer
Get-AppLibDBConnection # for 7.8 and newer
Get-OrchDBConnection # for 7.11 and newer
Get-TrustDBConnection # for 7.11 and newer
Get-HypDBConnection
Get-ProvDBConnection
Get-BrokerDBConnection
Get-EnvTestDBConnection
Get-SfDBConnection
Get-MonitorDBConnection
Get-LogDBConnection
Get-AdminDBConnection
<!--NeedCopy-->
步骤 4. 指定新的数据库连接字符串
调整变量以匹配所需的连接字符串。
- 对于独立 SQL Server 连接字符串:
Server=SQLServerName; Initial Catalog=DBName; Integrated Security=True - 对于数据库镜像连接字符串:
Server=PrimarySQLServerName; Initial Catalog=DBName; Integrated Security=True; Failover Partner=SecondSQLServer - 对于 Always On 高可用性:
Server=ListenerName; Initial Catalog=XDdb; Integrated Security=True; MultiSubnetFailover=True
运行以下命令以设置新的连接字符串。
$ServerName = "<dbserver>"
$SiteDBName = "<SiteDbName>"
$LogDBName = "<LoggingDbName>"
$MonitorDBName = "<MonitorDbName>"
$csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True"
$csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True"
$csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True"
Set-AdminDBConnection -DBConnection $csSite
Set-ConfigDBConnection -DBConnection $csSite
Set-AcctDBConnection -DBConnection $csSite
Set-AnalyticsDBConnection -DBConnection $csSite # for 7.6 and newer
Set-HypDBConnection -DBConnection $csSite
Set-ProvDBConnection -DBConnection $csSite
Set-AppLibDBConnection –DBConnection $csSite # for 7.8 and newer
Set-OrchDBConnection –DBConnection $csSite # for 7.11 and newer
Set-TrustDBConnection –DBConnection $csSite # for 7.11 and newer
Set-BrokerDBConnection -DBConnection $csSite
Set-EnvTestDBConnection -DBConnection $csSite
Set-SfDBConnection -DBConnection $csSite
Set-LogDBConnection -DBConnection $csSite
Set-LogDBConnection -DataStore Logging -DBConnection $null -force
Set-LogDBConnection -DataStore Logging -DBConnection $csLogging
Set-MonitorDBConnection -DBConnection $csSite
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null -force
Set-MonitorDBConnection -DataStore Monitor -DBConnection $csMonitoring
## If necessary, enable configuration logging for the XD site:
Set-LogSite -State Enabled
<!--NeedCopy-->
注意:
验证所有前面的
Set-<service>DBConnection命令是否都返回了 OK 结果。如果其中任何一个命令的结果不是 OK,则可能需要启用日志记录或跟踪以确定连接失败的原因。The
Set-LogDBConnection -DBConnection $nullandSet-MonitorDBConnection -DBConnection $nullreturn DBUnconfigured instead of OK.
步骤 5. 测试新的数据库连接字符串
-
运行以下命令以验证与数据库的连接。
## Load the Citrix snap-ins asnp citrix.* $ServerName = "<dbserver>" $SiteDBName = "<SiteDbName>" $LogDBName = "<LoggingDbName>" $MonitorDBName = "<MonitorDbName>" $csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True" $csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True" $csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True" Test-AcctDBConnection -DBConnection $csSite Test-AdminDBConnection -DBConnection $csSite Test-AnalyticsDBConnection -DBConnection $csSite # for 7.6 and newer Test-AppLibDBConnection -DBConnection $csSite # for 7.8 and newer Test-BrokerDBConnection -DBConnection $csSite Test-ConfigDBConnection -DBConnection $csSite Test-EnvTestDBConnection -DBConnection $csSite Test-HypDBConnection -DBConnection $csSite Test-LogDBConnection -DBConnection $csSite Test-LogDBConnection -DataStore Logging -DBConnection $csLogging Test-MonitorDBConnection -DBConnection $csSite Test-MonitorDBConnection -Datastore Monitor -DBConnection $csMonitoring Test-OrchDBConnection -DBConnection $csSite # for 7.11 and newer Test-ProvDBConnection -DBConnection $csSite Test-SfDBConnection -DBConnection $csSite Test-TrustDBConnection -DBConnection $csSite # for 7.11 and newer <!--NeedCopy--> -
重新启动思杰工作室。