使用 SQL Server 高可用性解决方案时更新数据库连接字符串
Citrix 提供了几个 PowerShell 脚本,这些脚本可以在使用 SQL Server 高可用性数据库解决方案(例如 Always On 和镜像)时更新 XenApp 和 XenDesktop 数据库连接字符串。
这些使用 XenApp 和 XenDesktop PowerShell API 的脚本包括:
- DBConnectionStringFuncs.ps1:执行实际工作的核心脚本。此脚本包含其他脚本使用的常用函数。
- Change_XD_Failover_Partner_v1.ps1:更新(添加、更改或删除)故障转移合作伙伴。此脚本提示输入每个数据库的故障转移伙伴位置 (FQDN)。(如果提供空的故障转移伙伴,则会删除故障转移伙伴。您也可以使用 ClearPartner 选项删除合作伙伴。) 不要将故障转移伙伴设置为与主体数据库服务器相同的位置。
- Change_XD_To_ConnectionString.ps1:使用提供的连接字符串更新到数据库的连接字符串。此脚本可确保某些 Citrix 服务已启动并正在运行,然后在站点中的所有 Controller 上以正确的顺序更新这些服务。将每个数据库的连接字符串信息用引号括起来。
-
change_xd_to_multisubnetFailover.ps1:切换 m ultiSubnetFailover=True的添加和删除。如果您使用始终在可用性组中,Microsoft 建议连接字符串包括 MultiSubnetFailover=true。此选项可在发生高可用性事件时加快恢复速度,建议在单子网和多子网环境中使用。运行此脚本一次以添加选项。如果必须删除该选项,请使用
Change_XD_To_ConnectionString.ps1
再次运行脚本并提供不带设置的字符串。 -
Change_XD_To_Null.ps1
: 重置本地主机上的所有连接字符串,因为出现了问题。通过将连接字符串重置为 null,此脚本将控制器置于“初始”状态。如果您在运行此脚本后运行 Studio,系统会询问您是要创建站点还是加入现有站点。如果出现问题并且需要重置,这很有用。重置后,您可以再次尝试使用 Change_XD_To_ConnectionString.ps1 设置连接字符串。
也可以手动更新数据库连接字符串;请参阅手动 更新字符串。要下载 PowerShell 脚本,请参阅 过程 部分。
重要:
本文是在 XenDesktop 7.6 上编写和测试脚本的。本文档不再使用更高版本的 Citrix Virtual Apps and Desktops 进行维护或测试。
要求和注意事项
- 您必须是完全站点管理员才能运行脚本。
- 在一个控制器的 PowerShell 窗口中运行脚本。PowerShell v3 是必需的。
- 必须安装 XenApp 和 XenDesktop 核心组件,并且站点必须启动并运行。
- 在运行脚本之前,请禁用强制配置日志记录。
-
.NET 4.5 及更高版本支持 MultiSubnetFailover 选项。但是,Studio 在 Windows 7 或 2008 R2 计算机上使用的 MMC 包含早期的 .NET 版本,因此当您在 Studio 导航窗格中选择配置时,您可能会看到错误“不支持关键字:”
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 下载包含脚本的 zip 文件。
- 解压文件。
- 确保 DBConnectionStringFuncs.ps1 与您运行的脚本位于同一文件夹中,因为您运行的脚本使用 DBConnectionStringFuncs.ps1 中的函数。
- 在控制器上运行脚本。
如果要将站点设置为多子网故障转移,则只需运行 Change_XD_To_MultiSubnetFailover.ps1 脚本。(请记住:确保 DBConnectionStringFuncs.ps1 脚本位于同一文件夹中。)
提示:
- 更新连接字符串时,通常会看到一条消息,指示“
Server=SQLxxx\\CITRIX\\...
”正在更改为Data Source=SQLxxx\\CITRIX\\...
。术语“服务器”和“数据源”是同义词。- 如果要操作连接字符串,请查看
Change\_XD\_
脚本如何使用DBConnectionStringFuncs.ps1
中的函数。
手动更新字符串
要手动更新字符串,请运行 XenApp 和 XenDesktop PowerShell cmdlet。
步骤 1. 将 SQL 数据库移动到不同的 SQL Server,并分配正确的权限
- 备份原始 SQL Server 上的数据库,并在新的 SQL Server 上还原它们。
- 在 SQL Management Studio > 安全 > 登录中,添加 Delivery Controller 计算机帐户。例如,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
- 对于始终保持高可用性:
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
命令都返回了“确定”的结果。如果这些命令的结果不是“**确定”,则可能需要启用日志记录或跟踪以确定连接失败的原因。
Set-LogDBConnection -DBConnection $null
和Set-MonitorDBConnection -DBConnection $null
返回 DBUnconfigured 而非 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-->
-
重新启动 Citrix Studio。