高级概念

使用 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 脚本使用此选项更新数据库连接字符串。

过程

  1. Citrix ShareFile 下载包含脚本的 zip 文件
  2. 解压文件。
  3. 确保 DBConnectionStringFuncs.ps1 与您运行的脚本位于同一文件夹中,因为您运行的脚本使用 DBConnectionStringFuncs.ps1 中的函数。
  4. 在控制器上运行脚本。

如果要将站点设置为多子网故障转移,则只需运行 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,并分配正确的权限

  1. 备份原始 SQL Server 上的数据库,并在新的 SQL Server 上还原它们。
  2. SQL Management Studio > 安全 > 登录中,添加 Delivery Controller 计算机帐户。例如,CORP\DDC01$。
  3. 添加 SQL 登录时,在“用户映射”页面上,单击三个 Citrix 数据库:站点数据库、监视数据库和日志记录数据库。
  4. 对于三个 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 $nullSet-MonitorDBConnection -DBConnection $null 返回 DBUnconfigured 而非 OK

步骤 5. 测试新的数据库连接字符串

  1. 运行以下命令验证与数据库的连接。

    ## 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-->
    
  2. 重新启动 Citrix Studio。

更多信息

使用 SQL Server 高可用性解决方案时更新数据库连接字符串