gpt4 book ai didi

azure - 如何按计划时间同步两个不同帐户上的两个 Azure blob?

转载 作者:行者123 更新时间:2023-12-03 00:22:08 25 4
gpt4 key购买 nike

为了实现高可用性,我们在不同 Azure 区域的不同存储帐户下创建了两个 Blob 容器。

因此,如果应用程序在写入到主 blob 容器时发现问题,应用程序将执行断路器逻辑,如果即使在尝试阈值次数后问题仍然存在,应用程序将开始写入 到位于不同 Azure 位置的备用 Blob 存储帐户,此架构工作正常。

用于从主要切换到辅助的代码:

AsyncLazy<CloudQueue> qClient = new AsyncLazy<CloudQueue>(async () =>
{
var myStorageAccount = CloudStorageAccount.Parse("ConnectionString");
var myQueue = myStorageAccount.CreateCloudQueueClient();
myQueue.DefaultRequestOptions = new QueueRequestOptions
{
RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(3), 4),

LocationMode = LocationMode.PrimaryThenSecondary,

MaximumExecutionTime = TimeSpan.FromSeconds(20)
};
var queue = myQueue.GetQueueReference("QueueName");
await queue.CreateIfNotExistsAsync();
return queue;
});

现在的问题是,一旦主帐户恢复运行,如何将写入备用位置的数据与主位置中的实际 blob 同步?

Azcopy 是在两个不同帐户上同步两个 blob 的一种选项,但问题是按照此 link Azcopy 的官方 docker 镜像尚不可用

Azcopy 的官方 docker 镜像是否可用(如果不可用),还有哪些其他合适的选项可以按计划时间同步两个不同帐户上的两个 Blob? Azure 数据工厂? Azure 函数?

最佳答案

首先,您可能知道,Azcopy 没有可用的官方 docker 镜像。 github问题提到了它。

是的,你可以使用azure函数来做到这一点(关于ADF,不确定,但问了一些人,他们说这不容易做到),但可能有点困难。

更简单的解决方案是使用 azure web jobazcopy 在一起。只需在 Azure 门户中创建 WebJob 时将其指定为计划即可。 Azure webjob 支持许多文件类型,例如 .ps1(powershell)、.cmd、.py 等。因此,使用您最喜欢的文件类型之一来创建它非常容易。

在这里,我将创建一个 .ps1(powershell) 文件,然后将其上传到 azure webjob 以按计划时间执行同步作业。

第 1 步:创建 .ps1 文件。 文件名必须是 run.ps1。然后在run.ps1文件中使用以下代码(请在代码中使用您自己的源存储和目标存储):

#define the source container and destination container, note that the sas token are required.
$source_container = "https://yy1.blob.core.windows.net/a11?sv=2020-02-10&ss=bfqt&srt=sco&sp=rwdlacup&se=2021-03-12T11:00:50Z&st=2021-03-12T03:00:50Z&spr=https&sig=xxxxxx"
$dest_container = "https://yyasia1.blob.core.windows.net/test123?sv=2020-02-10&ss=bfqt&srt=sco&sp=rwdlacup&se=2021-03-12T11:01:36Z&st=2021-03-12T03:01:36Z&spr=https&sig=xxxxxx"

#get the current working directory which contains the current .ps1 file and the azcopy.exe
$path = Split-Path -Parent $MyInvocation.MyCommand.Definition

#set the location to the path where contains the azcopy.exe
Set-Location -Path $path

#execute the sync command
.\azcopy.exe sync $source_container $dest_container --recursive

Write-Output "**completed**"

第2步:将azcopy.exe(如果没有,请先下载)放在运行的同一位置。 ps1 文件。然后将这2个文件压缩成一个.zip文件(注意:在压缩之前,最好在本地测试一下代码是否可以工作):

enter image description here

第 3 步:假设您已经有一个支持 webjob 和 always on 的 Azure Web 应用服务。功能已启用。导航到 azure 门户 -> 你的 azure web 应用程序 -> 设置 -> Webjobs -> 单击“添加”按钮 -> 在“添加 Webjob”面板中,填写所有必填字段/选择 .zip 文件/并设置正确的值类型/触发器/CRON。这是屏幕截图:

enter image description here

第4步:创建webjob后(可能需要几分钟,点击“刷新”按钮查看),选择webjob,然后点击“运行”按钮:

enter image description here

关于azure - 如何按计划时间同步两个不同帐户上的两个 Azure blob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66549454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com