我知道Azure存储实体(blob,表和队列)具有内置的弹性,这意味着它们被复制到同一数据中心的3个不同服务器。最重要的是,它们也可以被复制到物理上位于不同地理区域的不同数据中心。出于所有实际目的,在这种情况下丢失数据的可能性接近于零。
然而,如果一个草率的开发人员(或受酒精影响的开发人员))通过Azure门户或Azure存储资源管理器工具意外删除了存储帐户,会发生什么?最糟糕的是,如果黑客获取您的帐户并清除存储会怎么样?有没有办法检索已删除blob的千兆字节或是这样吗?不知何故,我认为Azure基础设施必须提供一个优雅的解决方案,但我找不到任何文档。
我能想到的唯一解决方案是编写自己的流程(工作者角色),定期将我的整个存储备份到不同的订阅/帐户,从而大大增加了存储和交易成本。 有什么想法吗?
此致
阿尔奇尔
答案 0 :(得分:24)
根据您要备份数据的位置,有两种选择:
在本地备份数据 - 如果您希望在基础架构中本地备份数据,则可以: 一个。使用Storage Client Library或使用REST API或编写自己的应用程序 湾使用第三方工具,如Cerebrata Azure Management Cmdlets(披露:我为Cerebrata工作)。
备份云中的数据 - 最近,Windows Azure存储团队宣布了异步复制Blob功能,该功能基本上允许您将数据从一个存储帐户复制到另一个存储帐户,而无需在本地下载数据。这里的问题是您的目标存储帐户应该在2012年6月7日之后创建。您可以在Windows Azure博客上阅读有关此功能的更多信息:http://blogs.msdn.com/b/windowsazurestorage/archive/2012/06/12/introducing-asynchronous-cross-account-copy-blob.aspx。
希望这有帮助。
答案 1 :(得分:4)
接受的答案很好,但我花了几个小时来解读所有内容。
我已将我现在用于生产的解决方案整理在一起。我通过Backup()
公开方法Web Api
,然后每天(午夜)由Azure WebJob
调用。
请注意,我已采用原始源代码并对其进行了修改:
可以从以下网址找到来源:https://github.com/ChrisEelmaa/StackOverflow/blob/master/AzureStorageAccountBackup.cs
这就是我在控制器中使用它的方法(注意你的控制器只能由azure webjob调用 - 你可以检查标题中的凭据):
[Route("backup")]
[HttpPost]
public async Task<IHttpActionResult> Backup()
{
try
{
await _blobService.Backup();
return Ok();
}
catch (Exception e)
{
_loggerService.Error("Failed to backup blobs " + e);
return InternalServerError(new Exception("Failed to back up blobs!"));
}
}
注意:我想将此代码添加为帖子的一部分,但是在尝试将该代码放入此帖子中浪费了6分钟,但是失败了。格式化根本不起作用,它完全破坏了。
答案 2 :(得分:1)
您可以制作博客容器的快照,然后下载快照以进行时间点备份。
https://docs.microsoft.com/en-us/azure/storage/storage-blob-snapshots
快照是在某一点上获取的blob的只读版本 时间。快照对备份blob非常有用。创建完成后 快照,您可以阅读,复制或删除它,但不能修改它。+ blob的快照与其基本blob相同,除了 blob URI具有附加到blob URI的DateTime值以指示 拍摄快照的时间。例如,如果是页面blob URI 是http://storagesample.core.blob.windows.net/mydrives/myvhd,是 快照URI类似于 http://storagesample.core.blob.windows.net/mydrives/myvhd?snapshot=2011-03-09T01:42:34.9360000Z
答案 3 :(得分:1)
如果不参考第三方解决方案,则可以通过以下步骤使用Azure中的内置功能来实现,以确保您的Blob安全。
Azure存储Blob的软删除 更好的步骤是首先启用软删除,此功能现在已在GA中使用: https://azure.microsoft.com/en-us/blog/soft-delete-for-azure-storage-blobs-ga
可读取的地理冗余存储 第二种方法是为RA-RGA启用地理复制,因此,如果第一个数据中心宕机了,您始终可以从另一个区域的辅助副本中读取,则可以在这里找到更多信息: https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy-grs
答案 4 :(得分:1)
我有完全相同的要求:从 Azure 备份 blob,因为我们有数百万个 blob 客户,您是对的 - 拥有完全访问权限的草率开发人员可能会危及整个系统。
因此,我编写了一个完整的应用程序“Blob To Local Backup”,在 GitHub 上根据 MIT 许可免费且开源:https://github.com/smartinmedia/BlobToLocalBackup
它解决了您的许多问题,即: a) 您只能授予此应用程序的 READ 访问权限,因此该应用程序不能破坏 Azure 上的任何数据 b) 备份到服务器,您粗心的开发人员或黑客没有与您的 Azure 帐户相同的访问权限。 c) 该软件提供版本控制,因此您甚至可以保护自己免受 e. G。赎金/加密攻击。 d) 我包含了一个序列化方法而不是数据库,因此您甚至可以在 Azure 上拥有数百万个文件,并且仍然能够保持同步(我们在 Azure 上有 2000 万个文件)。
这是它的工作原理(有关更多详细信息,请阅读 github 上的 README):
{
"App": {
"ConsoleWidth": 150,
"ConsoleHeight": 42,
"LoginCredentials": {
"ClientId": "2ab11a63-2e93-2ea3-abba-aa33714a36aa",
"ClientSecret": "ABCe3dabb7247aDUALIPAa-anc.aacx.4",
"TenantId": "d666aacc-1234-1234-aaaa-1234abcdef38"
},
"DataBase": {
"PathToDatabases": "D:/temp/azurebackup"
},
"General": {
"PathToLogFiles": "D:/temp/azurebackup"
}
}
}
{
"Job": {
"Name": "Job1",
"DestinationFolder": "D:/temp/azurebackup",
"ResumeOnRestartedJob": true,
"NumberOfRetries": 0,
"NumberCopyThreads": 1,
"KeepNumberVersions": 5,
"DaysToKeepVersion": 0,
"FilenameContains": "",
"FilenameWithout": "",
"ReplaceInvalidTargetFilenameChars": false,
"TotalDownloadSpeedMbPerSecond": 0.5,
"StorageAccounts": [
{
"Name": "abc",
"SasConnectionString": "BlobEndpoint=https://abc.blob.core.windows.net/;QueueEndpoint=https://abc.queue.core.windows.net/;FileEndpoint=https://abc.file.core.windows.net/;TableEndpoint=https://abc.table.core.windows.net/;SharedAccessSignature=sv=2019-12-12&ss=bfqt&srt=sco&sp=rl&se=2020-12-20T04:37:08Z&st=2020-12-19T20:37:08Z&spr=https&sig=abce3e399jdkjs30fjsdlkD",
"FilenameContains": "",
"FilenameWithout": "",
"Containers": [
{
"Name": "test",
"FilenameContains": "",
"FilenameWithout": "",
"Blobs": [
{
"Filename": "2007 EasyRadiology.pdf",
"TargetFilename": "projects/radiology/Brochure3.pdf"
}
]
},
{
"Name": "test2"
}
]
},
{
"Name": "martintest3",
"SasConnectionString": "",
"Containers": []
}
]
}
}
blobtolocal job1.json
答案 5 :(得分:0)
我已使用 Azure Data Factory 备份Azure存储,效果很好。它确实易于使用,具有成本效益并且运行良好。
只需创建一个数据工厂(v2),设置与数据源的数据连接(它当前支持Azure表,Azure Blob和Azure文件),然后设置数据复制管道。
管道可以合并,覆盖等,您可以设置自定义规则/通配符。
设置管道后,您应该设置时间表触发器。这样会按您需要的间隔启动备份。
我已经使用了几个月了,它非常完美。没有代码,没有VMS,没有自定义PowerShell脚本或第三方软件。纯Azure解决方案。