Citrix Virtual Apps and Desktops

数据库

Citrix Virtual Apps 或 Citrix Virtual Desktops 站点使用三个 SQL Server 数据库:

  • 站点: (也称为站点配置)存储正在运行的站点配置,以及当前会话状态和连接信息。
  • 配置日志记录: (也称为日志记录)存储有关站点配置更改和管理活动的信息。启用配置日志记录功能(默认情况下启用)时将使用此数据库。
  • 监视: 存储 Director 使用的数据,如会话和连接信息。

每个 Delivery Controller 都将与站点数据库进行通信。需要在 Controller 与数据库之间执行 Windows 身份验证。拔出或关闭一个 Controller 不会对站点中的其他 Controller 产生影响。但这也意味着站点数据库会形成单点故障。如果数据库服务器出现故障,现有连接继续正常运行,直到用户注销或断开连接。有关站点数据库变得不可用时的连接行为的信息,请参阅本地主机缓存

Citrix 建议您定期备份数据库,以便在数据库服务器出现故障时可以通过备份进行还原。各个数据库的备份策略会有所不同。相关说明,请参阅CTX135207

如果您的站点包含多个区域,请确保主区域始终包含站点数据库。各区域内的 Controller 与该数据库通信。

高可用性

可以考虑采取几种高可用性解决方案以确保实现自动故障转移:

  • AlwaysOn 可用性组(包括 Basic 可用性组): 这是 SQL Server 2012 中引入的具有高可用性和灾难恢复能力的企业级解决方案,此方案可以使您最大程度地提高一个或多个数据库的可用性。AlwaysOn 可用性组要求 SQL Server 实例必须驻留在 Windows Server 故障转移群集 (WSFC) 节点上。有关详细信息,请参阅使用 SQL Server 执行 Windows Server 故障转移群集操作
  • SQL Server 数据库镜像: 通过数据库镜像可以确保一旦与活动数据库服务器失去联系,可以在几秒钟内快速实现自动故障转移,因此用户通常不会受到影响。与其他解决方案相比,此方法更加昂贵,因为需要在每个数据库服务器上安装完全权限 SQL Server 许可证。不能在镜像环境中使用 SQL Server Express Edition。
  • SQL 群集化: 可以使用 Microsoft 的 SQL 群集化技术,允许一台服务器自动接管另一台故障服务器的任务和职责。但是,该解决方案的设置更为复杂,自动故障转移过程通常比其他备选方案(如 SQL 镜像)更慢。
  • 使用虚拟机管理程序的高可用性功能: 通过此方法,可以将数据库作为虚拟机进行部署,并使用虚拟机管理程序的高可用性功能。此解决方案的成本比镜像方法要低,因为它使用的是现有虚拟机管理程序软件,您也可以使用 SQL Server Express 版本。但是,其自动故障转移过程比较慢,因为需要花时间为数据库启动新计算机,这样可能会导致为用户提供的服务中断。

本地主机缓存功能是对 SQL Server 高可用性最佳实践的补充。本地主机缓存功能使用户能够连接和重新连接到应用程序和桌面,即使站点数据库不可用时亦如此。有关详细信息,请参阅本地主机缓存

如果站点中的所有 Controller 均出现故障,可以将 VDA 配置为在高可用性模式下运行,这将允许用户继续访问其桌面和应用程序。在高可用性模式下,VDA 将接受来自用户的直接 ICA 连接,而不是由 Controller 代理的连接。仅当无法与所有 Controller 进行通信(极少出现)时才使用此功能。此功能不能代替其他高可用性解决方案。有关详细信息,请参阅CTX 127564

在 SQL 群集或 SQL 镜像安装中,不支持在节点上安装控制器。

安装数据库软件

默认情况下,安装首个 Delivery Controller 时,如果在该服务器上未检测到另一个 SQL Server 实例,系统将安装 SQL Server Express 版本。对于概念验证或试验部署,该默认操作通常足以解决问题。但是,SQL Server Express 不支持 Microsoft 高可用性功能。

默认安装程序使用默认 Windows 服务帐户和权限。请参阅 Microsoft 文档了解关于这些默认设置的详细信息,其中包括如何向 sysadmin 角色添加 Windows 服务帐户。Controller 使用此配置中的网络服务帐户。Controller 不需要使用任何其他 SQL Server 角色或权限。

如有需要,可以为数据库实例选择隐藏实例。在 Studio 中配置数据库的地址时,请输入实例的静态端口号,而不是它的名称。请参阅 Microsoft 文档了解关于隐藏 SQL Server 数据库引擎实例的详细信息。

对于大多数生产部署以及任何使用 Microsoft 高可用性功能的部署,我们建议您仅使用受支持的非 Express 版 SQL Server。在安装第一个 Controller 的服务器以外的计算机上安装 SQL Server。系统要求 列出了受支持的 SQL Server 版本。数据库可以位于一台或多台计算机上。

请务必在创建站点之前安装 SQL Server 软件。无须创建数据库,但是,如果确实已创建数据库,此数据库必须为空。同时,建议配置 Microsoft 高可用性技术。

使用 Windows 更新保持 SQL Server 处于最新状态。

通过站点创建向导设置数据库

在站点创建向导中的数据库页面上指定数据库名称和地址(位置)。(请参阅数据库地址格式。)为避免 Director 查询 Monitor Service 时存在潜在错误,请勿在监视数据库的名称中使用空格。

数据库页面提供两个用于设置数据库的选项:自动或使用脚本。通常,如果您(Studio 用户和 Citrix 管理员)拥有所需的数据库权限,可以使用自动选项。(请参阅设置数据库所需的权限。)

创建站点后,您可以稍后更改配置日志记录和监视数据库的位置。请参阅 更改数据库位置

要将站点配置为使用镜像数据库,请完成以下操作,然后继续执行自动设置过程或脚本设置过程。

  1. 在两个服务器(A 和 B)上安装 SQL Server 软件。
  2. 在服务器 A 上,创建要作为主体数据库的数据库。在服务器 A 上备份此数据库,然后将其复制到服务器 B。
  3. 在服务器 B 上,还原备份文件。
  4. 在服务器 A 上启动镜像。

要在创建站点后验证镜像,请运行 PowerShell cmdlet get-configdbconnection,以确保已在连接字符串中将故障转移伙伴设置为镜像。

如果稍后在镜像的数据库环境中添加、移动或删除 Delivery Controller,请参阅 Delivery Controller

自动设置

如果您拥有所需的数据库权限,请在站点创建向导的数据库页面选择在 Studio 中创建和设置数据库选项。然后提供主体数据库的名称和地址。

如果指定的地址已存在数据库,此数据库必须为空。如果指定的地址没有数据库,系统会提示您未找到数据库,然后询问是否为您创建数据库。确认该操作后,Studio 将自动创建数据库,然后为主体数据库和复制数据库应用初始化脚本。

脚本设置

如果您没有所需的数据库权限,必须在具有这些权限的人员(如数据库管理员)的帮助下进行操作。以下是操作步骤:

  1. 在站点创建向导的数据库页面中,选择生成脚本。此操作将生成六个脚本:三个数据库各具有两个脚本(一个用于对应的主体数据库,另一个用于对应的复制数据库)。可以指定存储这些脚本的位置。
  2. 将这些脚本提供给数据库管理员。此时站点创建向导将自动停止。稍后返回时,系统会提示您继续创建站点。

然后,数据库管理员创建数据库。每个数据库必须具有以下特征:

  • 请使用结尾为 _CI_AS_KS 的排序规则。Citrix 建议使用结尾为 _100_CI_AS_KS 的排序规则。
  • 为获得最佳性能,请启用 SQL Server Read-Committed 快照。有关详细信息,请参阅CTX 137161
  • 如果需要,请配置高可用性功能。
  • 要配置镜像,请首先将数据库设置为使用完整恢复模式(默认情况下为简单模式)。将主体数据库备份到某个文件中,然后将其复制到镜像服务器。在镜像数据库上,将备份文件还原到镜像服务器。然后,在主体服务器上启动镜像。

数据库管理员在 SQLCMD 模式下使用 SQLCMD 命令行实用程序或 SQL Server Management Studio 来执行以下操作:

  • 在高可用性 SQL Server 数据库实例上运行每个 xxx_Replica.sql 脚本(如果配置了高可用性)
  • 在主体 SQL Server 数据库实例上运行每个 xxx\_Principal.sql 脚本。

有关 SQLCMD 的详细信息,请参阅 Microsoft 文档。

所有脚本成功完成后,数据库管理员向 Citrix 管理员提供三个主体数据库地址。

Studio 将提示您继续创建站点,并返回数据库页面。输入地址。如果无法联系托管数据库的任何服务器,系统会显示错误消息。

设置数据库所需的权限

您必须是本地管理员或域用户才能创建和初始化数据库(或更改数据库位置)。您还必须具有某些 SQL Server 权限。以下权限可以显式配置或通过 Active Directory 组成员身份获取。如果您的 Studio 用户凭据不包括这些权限,系统会提示您使用 SQL Server 用户凭据。

操作 用途 服务器角色 数据库角色
创建数据库 创建合适的空数据库 dbcreator  
创建架构 创建所有服务特定的架构,并将第一个 Controller 添加到站点 securityadmin* db_owner
添加 Controller 将 Controller(除第一个外)添加到站点 securityadmin* db_owner
添加 Controller(镜像服务器) 将 Controller 登录信息添加到当前位于镜像数据库的镜像角色中的数据库服务器 securityadmin*  
删除 Controller 从站点中删除 Controller ** db_owner
更新架构 应用架构更新或修补程序   db_owner

* 虽然在技术层面上的限制更加严格,但实际上可以将 securityadmin 服务器角色视为等同于 sysadmin 服务器角色。

** 从站点中删除 Controller(通过 Desktop Studio,或者使用 Studio 或 SDK 生成的脚本)时,Controller 到数据库服务器的登录信息不会被删除。这是为了避免可能删除同一计算机上除此 Citrix 产品以外的服务正在使用的登录。如果不再需要登录,则必须手动删除登录信息。此操作需要 securityadmin 服务器角色成员资格。

当使用 Studio 执行这些操作时,Studio 用户必须具有明确为相应服务器角色成员的数据库服务器帐户,或者能够提供相应帐户的凭据。

首选数据库权限脚本

在企业环境中,数据库设置包括必须由具有不同角色(权限)的不同团队处理的脚本:securityadmindb_owner

使用 PowerShell,您现在可以指定首选的数据库权限。(此功能在 Studio 中不可用,该功能仅支持包含所有任务的单个脚本。)

指定非默认值会导致创建单独的脚本。一个脚本包含需要 securityadmin 角色的任务。另一个脚本仅需要 db_owner 权限,并且可以由 Citrix 管理员运行,而无需与数据库管理员联系。

get-*DBSchema cmdlet 中,-DatabaseRights 选项具有以下有效值:

  • SA:生成用于创建数据库和 Delivery Controller 登录的脚本。这些任务需要 securityadmin 权限。
  • DBO:生成一个可在数据库中创建用户角色的脚本、添加登录名,然后创建数据库架构。这些任务需要 db_owner 权限。
  • Mixed:(默认)所有任务都在一个脚本中,无论所需权限如何都是如此。

有关详细信息,请参阅 cmdlet 帮助。

数据库地址格式

可以使用以下格式之一指定数据库地址:

  • ServerName
  • ServerName\InstanceName
  • ServerName,PortNumber

对于 AlwaysOn 可用性组,请在位置字段指定组的侦听器。

更改数据库位置

在创建站点后,您可以更改配置日志记录和监视数据库的位置。(您不能更改站点数据库的位置。)当您更改某个数据库的位置时:

  • 以前数据库中的数据不会导入到新数据库中。
  • 检索日志时,不能合并来自两个数据库的日志。
  • 新数据库中的第一条日志指示数据库发生更改,但不会标识以前的数据库。

可以在启用强制日志记录功能时更改配置日志记录数据库的位置。

要更改数据库的位置,请执行以下操作:

  1. 确保您希望数据库所在的服务器上已安装受支持版本的 Microsoft SQL Server。根据需要设置高可用性功能。
  2. 在 Studio 导航窗格中选择配置
  3. 选择要为其指定新位置的数据库,然后在操作窗格中选择更改数据库
  4. 指定新位置和数据库名称。
  5. 如果希望 Studio 创建数据库,并且您具有相应的权限,请单击确定。出现提示时,请单击确定,然后 Studio 会自动创建数据库。Studio 会尝试使用您的凭据访问数据库。如果该操作失败,系统将提示您输入数据库用户的凭据。然后,Studio 会将数据库架构上载到数据库。凭据仅在数据库创建期间保留。
  6. 如果不希望 Studio 创建数据库,或者您没有足够的权限,请单击生成脚本。生成的脚本中包括用于手动创建数据库和镜像数据库(如果需要)的指令。上载架构前,请确保数据库为空,且至少有一个用户有权访问和更改该数据库。

更多信息

数据库