高可用性(AppFabric 1.1 缓存)
启用高可用性后,每个缓存对象或区域的副本将保留在不同的缓存主机上。缓存群集将管理对这些副本的维护,并在主要副本不可用时为应用程序提供这些副本。将启用缓存的应用程序设置为具有高可用性不需要更改任何代码。下图说明了启用高可用性功能以后,如何将对象和区域的副本存储在不同的主机上。
高可用性配置
高可用性在群集配置设置中的缓存级别进行配置。作为缓存的一项属性,您可以在首次创建缓存时使用 New-Cache
命令,并将 Secondaries
参数设置为等于 1
来启用高可用性功能。此命令可通知缓存管理 Windows PowerShell cmdlet 您需要每个缓存对象或区域的副本。如果将 Secondaries
参数设置为 0
,则表示禁用高可用性功能。默认情况下,在创建新缓存时,高可用性功能处于禁用状态。有关编辑缓存配置设置的详细信息,请参阅使用 Windows PowerShell 编辑缓存配置设置。
Microsoft AppFabric 1.1 for Windows Server 缓存 功能的高可用性功能要求缓存群集中的所有节点都运行 Windows Server 2008 或 Windows Server 2008 R2 的 Enterprise Edition(或更高版本)。请确认所有高可用性缓存节点在支持的操作系统上运行。有关支持的操作系统的详细信息,请参阅 AppFabric 安装指南 (https://go.microsoft.com/fwlink/?LinkId=169172)(可能为英文网页)的“软件要求”部分。
辅助副本存储
缓存群集选择对象和区域辅助副本的存储位置。与 AppFabric 在群集中的所有缓存主机上分发缓存对象一样,它还会在群集中的所有缓存主机上分发这些对象的辅助副本。
如何保持一致性
无论是否启用高可用性,支持缓存的应用程序都按照仅存在缓存对象主要副本的情况运行。所有的 Add、Put 和 Remove 方法调用都首先在主要对象上启动,无论他们位于哪个缓存主机上。对维护主要对象或区域的缓存主机启动调用之后,结果操作将因是否启用高可用性而异。
如果启用高可用性,会增加一个步骤通知维护辅助副本的主机即将发生更改。然后,包含对象主要副本的缓存主机在等待来自另一主机的确认以后,向客户端回复操作完成确认。
有关示例,请参阅下图中的缓存主机 A 和 B。缓存主机 A 收到请求以后,会立即开始处理请求并向缓存主机 B 通知此更改。然后,缓存主机 B 向缓存主机 A 发送回复确认。当缓存主机 A 收到确认以后,会完成更改并向支持缓存的应用程序发送回复确认。此过程可确保对象或区域的辅助副本始终与主要副本处于同一状态。此过程称为非常一致。
性能注意事项
因为维护对象或区域辅助副本的缓存主机必须确认与主要副本有关的所有更改,所以从支持缓存的应用程序写入的响应时间会稍微影响性能。注意,此性能影响不会影响缓存中已经存在的项目的读取。如果维护对象主要副本的缓存主机丢失,您还应该考虑向缓存重新加载这些对象所需的时间。
缓存主机失败时发生的情况
如果某个缓存主机失败(假定仍有足够数量的缓存主机可用于保持群集运行),则支持缓存的应用程序不会发生任何更改。缓存群集向维护对象辅助副本的缓存主机重新路由对象请求。随后会在群集中将所有主要对象的辅助副本提升为新的主要对象。然后,将这些新主要对象的辅助副本分发至群集中的其他缓存主机。失败的缓存主机上的辅助对象将由新的辅助对象替换并在群集中分发。此过程也适用于区域。
为了使用高可用性功能帮助应用程序避免缓存主机故障的影响,至少应该添加三个缓存主机作为缓存群集成员。这是由于非常一致要求启用高可用性的缓存中必须始终有两个缓存对象或区域副本。若要维护缓存或区域的两个副本,启用了高可用性的缓存至少需要两个缓存主机正常工作。
例如,如果您在拥有三台服务器的缓存群集中已创建启用高可用性且名为 HACache
的缓存,如下表所示。假定 SQL Server 已配置为执行群集管理角色(因此此示例不需要考虑主要主机可能丢失的问题)。
时间 | 缓存主机 1 | 缓存主机 2 | 缓存主机 3 | HACache (启用高可用性的命名缓存) |
---|---|---|---|---|
T1 |
正在运行 |
正在运行 |
正在运行 |
可用 |
T2 |
正在运行 |
正在运行 |
已停止 |
可用 |
T3 |
正在运行 |
已停止 |
已停止 |
不可用 |
在 T1 中,当有三个缓存主机可用时,缓存对象或区域的两个副本可以存储在这三个可用服务器中的任意一个上。在 T2 中,当一个缓存服务器失败时,HACache
继续可用,因为仍然有两个缓存主机可用于存储缓存对象或区域的两个副本。在 T3 中,当第二个缓存主机失败时,HACache
不可用。这是因为不再有另一个缓存主机可用于存储缓存对象或区域的第二个副本。
其他高可用性建议
若要优化您的缓存数据的可用性,请考虑以下建议:
使用大量的缓存主机。
在同一域的所有服务器成员防火墙外围部署分布式缓存系统,包括缓存客户端、缓存主机、主要数据源服务器和托管群集配置存储位置的服务器。
使用 SQL Server 或自定义提供程序存储缓存群集配置设置。
使用 SQL Server 或自定义提供程序执行群集管理角色。有关详细信息,请参阅主要主机和群集管理(AppFabric 1.1 缓存)。
如果可能,请使用 Microsoft Windows Server 2008 故障转移群集 (https://go.microsoft.com/fwlink/?LinkId=130692)(可能为英文网页)托管缓存群集配置存储位置的“群集”数据库资源。
最小化需要停止群集的高成本配置更改。如果可能,请重新创建命名缓存以在群集配置设置中进行缓存配置更改,而不是停止整个缓存群集。
在重新启动服务器之前,始终使用
Stop-CacheHost
命令停止缓存服务。主要主机执行群集管理角色时,如果停止缓存服务操作导致整个缓存群集关闭,则Stop-CacheHost
cmdlet 将失败(由于无多数运行的主要主机)。
另请参阅
概念
AppFabric 缓存物理体系结构图(AppFabric 1.1 缓存)
AppFabric 缓存逻辑体系结构图(AppFabric 1.1 缓存)
2012-03-05