Azure 角色中缓存中的高可用性
重要
Microsoft 建议所有新开发使用 Azure Redis 缓存。 有关选择 Azure 缓存产品/服务的当前文档和指南,请参阅 哪种 Azure 缓存产品/服务适合我?
In-Role缓存使你能够保持缓存对象的高可用性。 使用 Azure 角色属性为需要此功能的每个缓存启用高可用性。 不需更改代码,只需重新计算工作负荷所需的内存容量。 可以通过在容量规划电子表格中启用“高可用性”设置来完成此操作。 有关详细信息,请参阅 Azure In-Role 缓存的容量规划注意事项。
启用高可用性后,将在同一云服务部署中复制缓存对象以便可以从硬件故障中复原。 还会将辅助副本放置在不同的故障域和升级域中,以提高可用性。 如果由于任何原因缓存群集中的一个虚拟机出现故障,则缓存群集可以使用辅助副本以防止数据丢失。
体系结构
高可用性需要关联角色的多个实例。 缓存项目的第二个副本保留在属于不同故障域和升级域的单独实例上。 这样,如果一个实例出现故障,备份副本还存在于另一个实例上。 在这种情况下,辅助副本将被提升为主要副本。 然后,将在剩余的某一实例上生成新的辅助副本以保持高可用性。
为了实现高可用性,需要对主要副本和辅助副本执行所有缓存写入操作。
注意
请注意,即使禁用高可用性,缓存群集也会尝试在计划关闭(如重新启动)期间保留数据。 在这种情况下,缓存群集会尝试在关闭之前将缓存的项目传输到其他服务器。 但是,此正常关闭无法保证完成,具体取决于要传输的数据量。 此外,与高可用性不同,意外关闭期间不会保留数据。
注意事项
主机In-Role缓存的角色应配置为在至少四个实例上运行。 对于为两个或三个正在运行的实例配置的角色,可以启用高可用性,但由于以下两个原因,不建议这样做。
Azure 有时会重新启动虚拟机进行日常维护。 应用程序的就地更新也会使虚拟机脱机。 在这两种情况下,最好至少有三个服务器存在于缓存群集中。 这样,如果某一服务器出现故障,缓存群集仍然有三个服务器可用于生成缓存对象的主要副本和辅助副本。 如果只有一个服务器正在运行,则缓存仍然是可以访问的,但高可用性将无法实现。
虽然三个服务器满足前面的要求,但建议使用四个服务器。 这有助于在故障域之间更均匀地分发主要副本。 这将改善整个缓存群集中的数据分布,并且还会改善网络通信模式和性能。
当实例变为不可用时,会需要一段较短的时间将辅助副本提升为主要副本,并更新路由信息。 在此期间,客户端会收到 ErrorCode of RetryLater的 DataCacheException 异常。 In-Role缓存应用程序应使用正常的错误处理和重试逻辑来正确响应此条件。
由于要对主要副本和辅助副本执行所有写入操作,高可用性将增加延迟并减少吞吐量。 对于受益于高可用性的缓存,这可能需要进行合理的权衡。
重要
按照定义,高可用性使用量等于每个缓存项所需的内存量乘以二。 在容量规划任务中将考虑此内存影响。 有关详细信息,请参阅 Azure In-Role 缓存的容量规划注意事项。
启用高可用性
双击已启用In-Role缓存的角色。
在“配置”选项卡上,验证“实例计数”是否为
4
或更高值。在“Caching”选项卡上,选中需要高可用性的缓存所对应的“高可用性”复选框。 下面的屏幕快照显示为三个缓存中的两个缓存启用了“高可用性”。