2012-07-19 15 views
29

Wiem, że obiekty Azure Storage (bloby, tabele i kolejki) mają wbudowaną odporność, co oznacza, że ​​są replikowane na 3 różne serwery w tym samym centrum danych. Ponadto mogą być również replikowane do innego centrum danych, fizycznie zlokalizowanego w innym regionie geograficznym. Szansa utraty danych w tym przypadku jest niemal zerowa ze względów praktycznych.Jaki jest najlepszy sposób tworzenia kopii zapasowej zawartości pamięci Blob Azure?

Co jednak się stanie, jeśli niechlujny programista (lub ten pod wpływem alkoholu :)) przypadkowo usunie konto magazynu przy użyciu narzędzia Azure Portal lub narzędzia Azure Storage Explorer? Najgorsze, a jeśli haker zdobędzie twoje konto i wyczyści pamięć masową? Czy istnieje sposób na odzyskanie gigabajtów usuniętych obiektów typu blob? Jakoś myślę, że musi istnieć eleganckie rozwiązanie, które zapewnia infrastruktura Azure, ale nie mogę znaleźć żadnej dokumentacji.

Jedyne rozwiązanie, jakie mogę wymyślić to napisanie własnego procesu (roli pracownika), który okresowo tworzy kopię zapasową całej mojej pamięci do innej subskrypcji/konta, co zasadniczo podwaja koszt przechowywania i transakcji. Jakieś myśli?

Pozdrawiam,

Archil

Odpowiedz

19

W zależności od tego, gdzie chcesz, aby wykonać kopię zapasową danych, istnieją dwie możliwości:

  1. Tworzenie kopii zapasowych danych lokalnie - Jeśli chcesz wykonać kopię zapasową danych lokalnie w Twojej infrastrukturze, możesz: a. Napisz własną aplikację za pomocą Biblioteki klienta pamięci masowej lub korzystając z interfejsu REST API lub b. Użyj narzędzi innych firm, takich jak Cerebrata Azure Management Cmdlets (Ujawnienie: pracuję dla Cerebraty).

  2. Tworzenie kopii zapasowych danych w chmurze - Niedawno zespół ds. Systemu Windows Azure ogłosił funkcję asynchronicznego kopiowania blobów, która zasadniczo umożliwia kopiowanie danych z jednego konta pamięci do innego konta magazynu bez pobierania danych lokalnie. Połów tutaj polega na tym, że docelowe konto pamięci masowej powinno zostać utworzone po 7 czerwca 2012 r. Więcej informacji na temat tej funkcji można znaleźć na blogu Windows Azure: http://blogs.msdn.com/b/windowsazurestorage/archive/2012/06/12/introducing-asynchronous-cross-account-copy-blob.aspx.

Mam nadzieję, że to pomoże.

+1

Napotkałem ten dokładny problem i wykonałem kopię zapasową za pomocą klienta .net. Gdybym dzisiaj pisał to ponownie, użyłbym Asynchonous Copy Blob, znacznie szybciej. – knightpfhor

+0

Cmdlets zarządzania Cerebrata Azure powinny zostać wycofane. – TWilly

+0

[Gaurav Mantri] (https://stackoverflow.com/users/188096/gaurav-mantri) Łącze z pierwszej opcji już nie działa. – SashaPinsk

4

Przyjęta odpowiedź jest w porządku, ale zajęło mi to kilka godzin, aby rozszyfrować wszystko.

Połączyłem rozwiązanie, którego używam teraz w produkcji. Prezentuję metodę Backup() do Web Api, która jest następnie wywoływana przez Azure WebJob każdego dnia (o północy).

Zauważ, że wziąłem oryginalny kod źródłowy i modyfikować go:

  • to nieaktualne więc zmieniłem kilka nazwy metod
  • dodaje ponawiania operacji kopia bezpieczna osłona (było nie po 4 próby dla tego samego bloba)
  • dodał trochę logowania - powinieneś zamienić go na swój.
  • wykonuje kopie zapasowe między dwoma kontami pamięci masowej (replikowanie kontenerów & BLOB)
  • dodane usuwanie - pozbywa się starych kontenerów, które nie są potrzebne (zachowuje 16 dni danych).zawsze możesz to wyłączyć, ponieważ przestrzeń jest tania.

źródło można znaleźć od: https://github.com/ChrisEelmaa/StackOverflow/blob/master/AzureStorageAccountBackup.cs

i to jak go używać w kontrolerze (zauważ, kontroler powinien być wpłacone tylko przez lazur webjob - można sprawdzić referencje w nagłówkach):

[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!")); 
    } 
} 

uwaga: chciałem dodać ten kod jako część słupka, ale marne 6 minut próbując dostać ten kod do tego postu, ale nie powiodło się. formatowanie w ogóle nie działało i całkowicie się zepsuło.

+0

Nazwy kluczy metadanych nie mogą już zawierać znaku "-". Jeśli zmienisz nazwę na "CreateAt" i "BackupOf", wszystko działa poprawnie. – PMerlet

0

Można utworzyć migawkę kontenera blogu, a następnie pobrać migawkę do tworzenia kopii zapasowej w czasie.

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

Migawka jest tylko do odczytu wersja blob że podjętej w punkcie, w czasie. Migawki są przydatne do tworzenia kopii zapasowych obiektów typu blob. Po utworzeniu migawki można ją odczytać, skopiować lub usunąć, ale nie można jej zmodyfikować. + Migawka obszaru blobowego jest identyczna z podstawową, jednak identyfikator URI blobu ma wartość DateTime dołączoną do blob URI, aby wskazać czas, w którym zrobiono migawkę. Jeśli na przykład identyfikator URI strony bloku to http://storagesample.core.blob.windows.net/mydrives/myvhd, identyfikator URI migawki jest podobny do identyfikatora URI podobnego do http://storagesample.core.blob.windows.net/mydrives/myvhd?snapshot=2011-03-09T01:42:34.9360000Z.