2012-07-19 2 views
29

Azure 저장소 엔터티 (blob, 테이블 및 큐)에는 기본 제공 복원력이 있습니다. 즉, 동일한 데이터 센터의 3 개의 다른 서버에 복제된다는 것을 알고 있습니다. 또한 다른 지리적 영역에 물리적으로 위치한 다른 데이터 센터로 복제 될 수도 있습니다. 이 경우 귀하의 데이터를 잃을 확률은 모든 실질적인 목적을 위해 거의 제로입니다.Azure Blob 저장소 내용을 백업하는 가장 좋은 방법은 무엇입니까

그러나 실수 한 개발자 (또는 주류의 영향을받는 개발자)가 실수로 Azure Portal 또는 Azure 저장소 탐색기 도구를 통해 저장소 계정을 삭제하면 어떻게됩니까? 최악의 경우, 해커가 계정을 보유하고 저장 용량을 지우면 어떻게 될까요? 삭제 된 BLOB의 기가 바이트를 검색 할 수있는 방법이 있습니까? 여하튼 Azure 인프라가 여기에 제공하는 우아한 솔루션이 있어야한다고 생각하지만 어떤 문서도 찾을 수 없습니다.

내가 생각할 수있는 유일한 해결책은 정기적으로 다른 구독/계정에 내 전체 저장 장치를 백업하는 자체 프로세스 (작업자 역할)를 작성하는 것입니다. 따라서 본질적으로 저장소 및 트랜잭션의 비용이 두 배가됩니다. 의견이 있으십니까?

감사합니다,

Archil

답변

19

당신이 데이터를 백업 할 위치에 따라 사용할 수있는 두 가지 옵션이 있습니다 : 로컬 데이터 백업

  1. 가 - 당신은 데이터를 백업하고자하는 경우 인프라에서 로컬로 수행 할 수있는 작업은 다음과 같습니다. a. 스토리지 클라이언트 라이브러리 또는 소비 REST API 또는 을 사용하여 자신의 응용 프로그램을 작성하십시오. b. Cerebrata Azure Management Cmdlets과 같은 타사 도구를 사용하십시오 (공개 : 저는 Cerebrata에서 일합니다).

  2. 클라우드의 데이터 백업 - 최근 Windows Azure Storage 팀에서는 기본적으로 데이터를 로컬로 다운로드하지 않고 하나의 저장소 계정에서 다른 저장소 계정으로 데이터를 복사 할 수있는 비동기 복사 BLOB 기능을 발표했습니다. 2012 년 6 월 7 일 이후에 대상 스토리지 계정을 만들어야한다는 사실을 알게되었습니다.이 기능에 대한 자세한 내용은 Windows Azure 블로그 http://blogs.msdn.com/b/windowsazurestorage/archive/2012/06/12/introducing-asynchronous-cross-account-copy-blob.aspx에서 확인할 수 있습니다.

희망이 있습니다.

+1

나는이 정확한 문제에 직면했으며 .net 스토리지 클라이언트로 백업했습니다. 오늘 다시 쓰고 있다면 Asynchonous Copy Blob을 사용하는 것이 훨씬 빠릅니다. – knightpfhor

+0

Cerebrata Azure 관리 Cmdlet이 더 이상 지원되지 않습니다. – TWilly

+0

[Gaurav Mantri] (https://stackoverflow.com/users/188096/gaurav-mantri) 첫 번째 옵션의 링크가 더 이상 작동하지 않습니다. – SashaPinsk

4

허용되는 대답은 괜찮지 만 모든 것을 해독하는 데 몇 시간이 걸렸습니다.

저는 현재 프로덕션 환경에서 사용하고있는 솔루션을 정리했습니다. 방법 Backup()에서 Web Api을 노출 한 다음 매일 (자정에) Azure WebJob이라고 부릅니다.

  • 이 후 실패하지 지금까지 내가 몇 메소드 이름을 변경
  • 추가 재시도 복사 작업 안전 가드까지 (한 : 나는 원래의 소스 코드를 촬영하고 수정 한

    주 4는 동일한 blob을 시도합니다)

  • 로깅을 조금 추가했습니다. 사용자가 직접 교체해야합니다.
  • 두 스토리지 계정 (복제 컨테이너 & 얼룩) 간의 백업은
  • 입니다. 제거가 필요하지 않은 오래된 컨테이너를 제거합니다 (16 일분의 데이터 보존).공간이 부족하기 때문에 언제든지이 기능을 비활성화 할 수 있습니다.

소스에서 찾을 수 있습니다 https://github.com/ChrisEelmaa/StackOverflow/blob/master/AzureStorageAccountBackup.cs

이 내가 (푸른 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!")); 
    } 
} 

참고 : 나는 게시물의 일환으로이 코드를 추가하고 싶어하지만,이 게시물에서 그 코드를 얻으려고 노력 육분을 낭비하지만 실패했습니다. 포맷팅이 전혀 작동하지 않아 완전히 포맷되지 않았습니다.

+0

메타 데이터 키 이름에 더 이상 "-"을 포함 할 수 없습니다. "CreateAt"및 "BackupOf"로 이름을 바꾸면 모든 것이 잘 작동합니다. – PMerlet

0

블로그 컨테이너의 스냅 샷을 만든 다음 특정 시점 백업을 위해 스냅 샷을 다운로드 할 수 있습니다.

https://docs.microsoft.com/en-us/azure/storage/storage-blob-snapshots

스냅 샷

는 시점에서 촬영하고 블롭의 읽기 전용 버전입니다. 스냅 샷은 모양을 백업하는 데 유용합니다. 스냅 샷을 만든 후에는 해당 스냅 샷을 읽거나 복사하거나 삭제할 수 있지만 수정할 수는 없습니다. + 블롭의 스냅 샷은 blob URI에 DateTime 값이 추가 된 것을 제외하고는 기본 blob과 동일합니다. blob URI는 스냅 샷을 찍은 시간을 나타냅니다. 예를 들어, 페이지 모양의 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과 비슷합니다.

관련 문제