问题描述
我有一个 Azure Web 作业,它在 TimerTrigger 上运行以将一些消息放入服务总线队列。我已在 2 个不同的区域部署了此 Web 作业,以在一个区域出现故障时实现高可用性。根据{{3}},我可以看到分布式锁机制运行良好,定时器一次只在一个区域执行,因此没有重复的请求通过。
但是,这两个区域的 Web Job 使用相同的公共存储帐户,并且存储帐户仅部署到一个区域。我不能使用 2 个单独的存储帐户,因为那样我就失去了分布式锁功能。我知道 Azure 为我的存储帐户提供异地冗余存储,因此数据会复制到次要区域。
我的问题是 - 如果一个区域(特别是存储帐户的主要区域)发生灾难,是否有办法让 Web 作业自动故障转移到辅助端点?现在,我将“AzureWebJobsStorage”应用程序设置指定为存储帐户的共享访问密钥之一。
感谢任何指点!
解决方法
我不是存储 SDK 方面的专家,但我链接了两个文档,可以帮助您了解如何使您的应用高度可用。
- https://docs.microsoft.com/en-us/azure/storage/common/storage-disaster-recovery-guidance?toc=/azure/storage/blobs/toc.json
- https://docs.microsoft.com/en-us/azure/storage/common/geo-redundant-design?tabs=legacy
- https://docs.microsoft.com/en-us/azure/storage/blobs/storage-create-geo-redundant-storage?tabs=dotnet11
由于地理冗余存储的警告是它在辅助服务器上是只读的,除非您提出请求,否则我确实找到了 GeoRedundantSecondaryUri 的 BlobClientOptions 属性部分,它将使用辅助地址作为重试策略的一部分。