高级概念

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

操作步骤

  1. Citrix ShareFile 下载包含脚本的压缩文件
  2. 解压缩文件。
  3. 请确保文件 DBConnectionStringFuncs.ps1 位于您所运行脚本的同一文件夹内,因为该脚本会调用 DBConnectionStringFuncs.ps1 中定义的函数。
  4. 请在 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 服务器并分配正确的权限

  1. 备份原始 SQL 服务器上的数据库,并将其还原到新的 SQL 服务器上。
  2. SQL Server 管理工作室 > 安全性 > 登录名 中,添加交付控制器计算机帐户。例如,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
  • 对于 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 $null and Set-MonitorDBConnection -DBConnection $null return DBUnconfigured instead of 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. 重新启动思杰工作室。

更多信息

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