Windows Server AppFabric 缓存群集由一个或多个共同工作以提供统一的内存中缓存的服务器组成。 有时您必须更新缓存群集中的一个或多个服务器,并且这些更新可能会要求重新启动。 本部分提供对此修补方案的缓存群集指南。

计划维护

该问题的最简单解决方案是计划一个维护窗口以在所有缓存服务器上执行更新。 在此方案中,使用 Stop-CacheCluster 命令停止缓存群集,更新计算机,然后使用 Start-CacheCluster 命令启动缓存群集。 这非常适合于对时间期限要求较低的缓存。 如果客户端应用程序对缓存群集有比较稳定的需求,则您可以考虑在升级期间保持缓存群集运行的其他选项。

缓存服务器顺序更新

可以在缓存群集保持运行的同时更新各个缓存服务器。 这要求缓存群集至少包含两个缓存主机。 基本过程包含以下步骤:

  1. 使用 Stop-CacheHost 命令停止群集中的一个服务器。

  2. 更新并重新启动该服务器。

  3. 使用 Start-CacheHost 命令启动服务器。

  4. 按顺序在每个缓存服务器上重复这些步骤。

尽管这些步骤非常简单,但仍有一些注意事项,将在以下部分对这些注意事项进行介绍。

更新主要主机

存在群集管理角色,用于成功管理缓存群集中的缓存主机。 如果使用 XML 提供程序存储缓存群集配置设置,则通过将其中一些缓存主机指定为主要主机来执行该角色。 要使缓存群集保持正常工作,必须运行大部分主要主机。 这将影响顺序更新缓存服务器。 考虑下面两个服务器的缓存群集。

主机名 是否为主要主机?

CacheServer1

CacheServer2

在本示例中,CacheServer1 是此两个节点的缓存群集中的主要主机。 由于必须使大部分主要主机保持运行,因此如果不停止缓存群集,您就不能停止 CacheServer1。 在本示例中,由于关闭其中一个服务器将不能使大部分主要主机保持运行,因此这对这两个服务器主要主机都没有帮助。 要解决此问题,您可以使用 Export-CacheClusterConfigImport-CacheClusterConfig 命令添加其他缓存主机服务器并使所有服务器都成为主要主机。 有关如何更改指定主要主机的详细信息,请参阅设置群集管理角色和主要主机指定。 考虑进行这些更改后的缓存群集。

主机名 是否为主要主机?

CacheServer1

CacheServer2

CacheServer3

在此新配置中,所有这三个服务器都是主要主机。 现在可以一次关闭一个缓存服务器来执行更新。

请注意 System.Data.SqlClient 提供程序不会遇到此问题,因为 SQL Server 执行群集管理角色,而不是主要主机。 有关主要主机的详细信息,请参阅主要主机和群集管理

更新具有使用高可用性缓存的缓存主机

高可用性在其他缓存主机上创建缓存项目的辅助副本。 如果主要缓存主机变为不可用,则从辅助缓存主机提供缓存的项目。 因此,缓存的项目不会丢失。 有关此功能的详细信息,请参阅高可用性。 按照定义,高可用性至少需要缓存群集中存在三个服务器。 缓存的项目可以在一个服务器上,在另一个服务器上拥有辅助副本,并且依赖第三个服务器来实现高可用性要求(如果主要或辅助服务器关闭)。 如果您仅让两个缓存主机运行,则您将无法分别停止它们,因为第三个服务器不存在,无法保持高可用性。

可以使用 Windows PowerShell 脚本来确定一个或多个缓存是否使用高可用性功能。 以下 PowerShell 脚本提供一个示例,该示例循环通过每个缓存并检查 Secondaries 属性。

Import-Module DistributedCacheAdministration

Use-CacheCluster

$Caches = Get-Cache -MaxRegions 0
$HighAvailability = $false

foreach ($Cache in $Caches)
{
   $CacheConfig = Get-CacheConfig $Cache.CacheName
   if ($CacheConfig.Secondaries -eq 1)
   {
      Write-Host $CacheConfig.CacheName
      $HighAvailability = $true
   }
}

if ($HighAvailability -eq $true)
{
   Write-Host "One or more caches use high availability (Secondaries = 1)"
}
else
{
   Write-Host "No caches use high availability (Secondaries = 1)"
}

即使您在缓存群集中拥有两个以上的服务器,您也应该在顺序更新它们之前使用 Get-CacheHost 来检查它们的运行状态。

客户端应用程序注意事项

当在未停止缓存群集的情况下顺序更新缓存主机时,有几个针对访问使用缓存群集的客户端应用程序的注意事项。

  1. 应用程序通过名称来引用一个或多个缓存主机,以便初始连接到缓存群集。 可以在应用程序配置文件中或通过编程方式完成此操作。 如果客户端应用程序仅指向一个缓存主机,则只要该主机关闭,客户端应用程序将无法建立与缓存群集的新连接。 客户端应用程序应该引用多个缓存主机(如果可能)。 请注意,客户端应用程序不必引用所有缓存主机。 引用的缓存主机充当整个群集的入口。

  2. 当某个缓存主机停止时,应用程序可能无法找到之前位于已停止缓存主机上的项目。 应用程序负责重新填充这些项目。

  3. 当某个缓存主机停止时,应用程序可能会临时收到多种 DataCacheException 异常。 随着缓存群集适应某个缓存主机的缺失,这些异常应该会自动解决。 应用程序应设计为预期常见异常。 客户端可以决定实现重试逻辑或者在异常解决之前也可以使用源数据。 有关详细信息,请参阅处理错误

  4. 当某个缓存主机停止时,应用程序可能无法临时写入使用高可用性的缓存。 缓存主机停止之后,会在另一个缓存主机上创建缓存项目的新副本(辅助)。

另请参阅

概念

常规缓存群集管理任务(Windows Server AppFabric 缓存)

  2011-12-05