Strategia di backup di Amazon EC2 con restrizioni (è possibile scattare poche o nessuna istantanea?)


9

Domande simili sono state poste ma ho bisogno di sapere cosa sarebbe raccomandato in tali circostanze, per sapere se mi manca qualcosa nella mia comprensione dell'uso di EC2.

Una piccola startup gestisce la propria attività sulla rete EC2 e mi ha chiesto alcuni consigli sulle opzioni di backup. Sono autofinanziati al momento e stanno facendo il possibile per risparmiare sui costi quando è fattibile. Senza approfondire troppo la configurazione dei loro sistemi, darò un web server come esempio; è un semplice server Web con un database. Il problema è che non vogliono che il server venga rimosso.

La persona che ha eseguito l'installazione ritiene che dovrebbero semplicemente eseguire dump periodici del database e archiviarlo su S3, oppure creare script che ricostruiscano un nuovo server su Amazon quando sono necessari eseguendo il backup di cartelle selezionate contenenti informazioni di configurazione . Ha suggerito che creare snapshot del server sarebbe uno spreco, poiché occupano molto spazio su disco ed essenzialmente ci sarebbe un marciume di dati tra grandi dump di dati in modo che lo snapshot diventasse obsoleto rapidamente.

Il mio pensiero era di fare un'istantanea della VM, e quindi di eseguire periodicamente il dump del database e archiviarlo in S3. Se dovessero perdere l'istanza EC2 o avere qualcosa come un aggiornamento che lo rende inutilizzabile, potrebbero utilizzare l'istantanea per creare il backup del server in modo relativamente rapido con l'ultimo dump del database, piuttosto che ricominciare da zero per creare una nuova istanza da un nuovo AMI.

La mia comprensione è che scattare un'istantanea di un'istanza EC2 (o negozio EBS) richiederà tempi di inattività, cosa che sono titubanti. Ho anche letto che dovresti chiudere il server per mantenere coerente il filesystem quando è stata scattata l'istantanea. Dato che non hanno ancora un cluster dietro un bilanciatore, questi limitano le opzioni che coinvolgono le istantanee.

Lo scripting per costruire server, a meno che non ci sia qualcosa di specifico in Amazon di cui non sono a conoscenza, implicherebbe la creazione di un server Chef o Puppet in grado di distribuire nuovi server con i loro ruoli associati su EC2. In questo momento l'avvio non ha fondi per mantenere quel tipo di server dietro le quinte e loro, in questo momento, non hanno davvero bisogno di distribuire tanti server.

Idealmente, avrebbero il finanziamento per creare un numero di server dietro un bilanciamento virtuale o il servizio di bilanciamento di Amazon, quindi rimuovere i server uno alla volta per eseguire aggiornamenti o istantanee. In questo momento sarei nervoso all'idea di fare aggiornamenti perché se stai eseguendo i dump del database, questo non sarebbe di aiuto se un aggiornamento del sistema altera una libreria su cui si basa la loro applicazione e il servizio si arresta.

Ho anche supposto che un'altra opzione fosse quella di eseguire uno script che crea un volume EBS, lo monta e sul server esegue qualcosa come rsync per acquisire la maggior parte delle informazioni del filesystem sul volume EBS, quindi comprimere e copiare il contenuto su S3, disconnettere il volume e distruggerlo per risparmiare sui costi di archiviazione, quindi eseguire un dump del database per acquisire dati in volo che altrimenti sarebbero incoerenti. Per alcuni dei loro server sarà probabilmente necessario salvare nei volumi EBS temporanei man mano che il loro database cresce.

È stato creato un sandbox VMWare per ricreare i propri sistemi di rete in un ambiente in cui è possibile pre-testare gli aggiornamenti prima di applicarli ai sistemi di produzione su Amazon. Spero che ciò riduca al minimo la possibilità che un aggiornamento del sistema uccida la loro applicazione.

Quindi ... date le restrizioni sull'esecuzione di un server, con database e application server sul sistema, cercando di non avere tempi di inattività il più vicini possibile (limitando l'uso di snapshot e facendo in modo che il processo di backup sia il più "caldo" possibile ( creato dal vivo senza arrestare il server), sono sulla strada sbagliata per aver suggerito di programmare un orario per creare un'istantanea dell'istanza EC2 nel suo stato di funzionamento e da lì fare i dump del database da copiare su S3? Esiste una strategia migliore da perseguire nella creazione di un backup live di un server se le istantanee creeranno tempi di inattività?


2
Sono sensibili ai tempi di inattività ma funzionano su un solo server?
Ceejayoz,

1
Fino a quando non avranno i finanziamenti per gestire i cluster, sì. Sanno e stanno puntando a eseguire un cluster dietro un bilanciatore ... al momento non è un'opzione sul tavolo.
Bart Silverstrim,

Amazon avverte fortemente di aspettarsi errori di istanza. Quanto costano i tempi di inattività significativi e la perdita di alcuni dati?
Ceejayoz,

A volte devi fare i conti con ciò che la situazione ti dà ... a loro credito, stanno lavorando per ottenere una corretta installazione.
Bart Silverstrim,

Risposte:


18

C'è qualcosa di interessante in questa domanda, in particolare per quanto riguarda l'idea dei tempi di fermo. Parte dell'idea è che se un'applicazione è sensibile ai tempi di inattività, anche i tempi di recupero devono essere presi in considerazione. ).

Un po 'su EBS

I volumi e le istantanee EBS funzionano a livello di blocco, una conseguenza della quale consente di acquisire istantanee mentre un'istanza è in esecuzione, anche se il volume EBS è in uso. Tuttavia, solo i dati che si trovano effettivamente sul disco (cioè non in una cache di file) verranno inclusi nell'istantanea. È quest'ultima ragione che dà origine all'idea di istantanee coerenti.

  • Il modo consigliato è quello di staccare il volume, istantaneamente e ricollegarlo, di solito non pratico.
  • L'opzione migliore successiva prevede lo svuotamento delle cache di scrittura sul disco, il blocco del file system e l'esecuzione dell'istantanea

Un punto interessante qui è che in entrambi i casi sopra, non è necessario attendere il completamento dell'istantanea per ricollegarsi / sbloccare e riprendere la scrittura sul disco: una volta avviata l'istantanea, i dati saranno coerenti con quel momento. In genere ciò richiede solo pochi secondi durante i quali il disco è bloccato in scrittura. Inoltre, poiché la maggior parte dei database struttura i propri file su disco in modo ragionevole - esiste una buona probabilità che gli inserti abbiano un effetto minimo sui blocchi esistenti - il che riduce al minimo i dati aggiunti all'istantanea.

Considera il punto del backup

I volumi EBS sono già replicati all'interno di una zona di disponibilità, quindi è presente un certo grado di ridondanza. Se l'istanza viene chiusa, è possibile semplicemente collegare il volume EBS a una nuova istanza e (dopo aver superato la mancanza di coerenza) riprendere da dove lasciato fuori. Per molti aspetti ciò rende il volume EBS molto simile a uno snapshot incoerente, a condizione che sia possibile accedervi. Detto questo, la maggior parte degli utenti EC2 probabilmente ricorda i fallimenti a cascata dei volumi EBS dall'inizio del 2011 - i volumi sono stati inaccessibili per più giorni e alcuni utenti hanno perso anche i dati.

RAID1

Se si sta tentando di proteggersi dall'errore di un disco EBS (ciò accade), è possibile prendere in considerazione un'installazione RAID1. Poiché i volumi EBS sono dispositivi a blocchi, è possibile utilizzare facilmente mdadm per configurarli nella configurazione desiderata. Se uno dei tuoi volumi EBS non funziona secondo le specifiche, è abbastanza facile fallirlo manualmente (e successivamente sostituirlo con un altro volume EBS). Naturalmente, questo ha degli aspetti negativi: maggiore tempo per ogni scrittura, maggiore suscettibilità alle prestazioni variabili, doppio del costo I / O (monetariliy, non dal punto di vista delle prestazioni), nessuna protezione reale contro un fallimento AWS più diffuso (un problema comune dell'anno scorso era l'impossibilità di staccare i volumi EBS che erano in uno stato bloccato) e, naturalmente, lo stato incoerente del disco in caso di errore.

S3FS

Un'opzione per alcune applicazioni (sicuramente NON per i database) è montare S3 come file system locale (ad es. Tramite s3fs). Questo è lento, manca di alcune delle funzionalità che ci si aspetterebbe da un file system e potrebbe non comportarsi come previsto (eventuale coerenza). Detto questo, per un semplice scopo come rendere disponibili i file caricati su più istanze, potrebbe avere dei meriti. Ovviamente non è per tutto ciò che richiede buone prestazioni di lettura / scrittura.

Bin-log di MySQL

Un'altra opzione specifica per MySQL potrebbe essere l'uso del bin-log. È possibile impostare un secondo volume EBS che memorizzerà il proprio registro bin (per ridurre al minimo l'effetto delle scritture aggiunte sul database) e utilizzarlo insieme a qualsiasi dump del database. Potresti anche essere in grado di farlo con s3fs, che potrebbe effettivamente avere merito se le prestazioni sono tollerabili (probabilmente un rsync sarebbe meglio che provare a usare direttamente s3fs e vorrai sicuramente comprimere ciò che puoi).

Ancora una volta, però, torniamo all'idea di scopo. Considera cosa accadrebbe con i suggerimenti di cui sopra:

  • Volumi EBS inaccessibili:
    • RAID1: inutile, poiché non è possibile accedere ai dati
    • bin-log - inutile, a meno che non sia stato esportato in S3 - probabilmente un ritardo se lo facessi
  • L'istanza termina inaspettatamente:
    • RAID1: i dischi sono disponibili, ma non coerenti, il database potrebbe ripristinarsi da solo incoerenza
    • bin-log: i dati dovrebbero essere accessibili, anche se potrebbe essere necessario rivedere gli ultimi eventi
  • Qualcuno esegue DROP DATABASE come root:
    • RAID1: hai due copie perfette di un database inesistente
    • bin-log: dovresti essere in grado di riprodurre gli eventi fino a poco prima del comando, quindi dovresti essere a posto

Quindi, in realtà, RAID1 è per lo più inutile e il bin-log impiega troppo tempo - entrambi possono avere dei meriti in determinate circostanze, ma sono lontani dall'idea del backup.

istantanee

È importante notare che le istantanee sono differenziali e memorizzano solo i blocchi effettivi che contengono dati (e sono compressi). A differenza di un volume EBS, in cui se si dispone di un volume da 20 GB, ma si utilizza solo 1 GB, viene comunque addebitato lo spazio di archiviazione "provisioning" (20 GB). Con un'istantanea, ti viene addebitato solo ciò che utilizzi. Se nessun dato cambia tra le istantanee, non c'è (teoricamente) alcun addebito. (Le istantanee vengono addebitate per PUTS / GETS e spazio di archiviazione utilizzato).

Inoltre, consiglio vivamente che i dati della tua applicazione (compresi i database) non vengano archiviati sul tuo volume di root (che potresti avere già configurato). Uno dei vantaggi è che, si spera, il tuo volume di root vede un minimo di cambiamento - il che significa che le sue istantanee possono essere meno frequenti (o avranno un minimo di cambiamento) riducendo i costi e la facilità d'uso.

È anche importante ricordare che è possibile eliminare le vecchie istantanee in qualsiasi momento, anche se sono differenziali e non influiranno sulle altre istantanee. Detto questo, ogni blocco assegnato a un'istantanea non verrà abbandonato fino a quando non ci sarà un'istantanea che fa ancora riferimento a quel blocco.

Il problema con i dump periodici è innanzitutto il tempo che intercorre tra i dump (eventualmente risolti utilizzando il bin-log di MySQL) e anche la difficoltà di recupero. Ci vuole tempo per importare un dump di grandi dimensioni e riprodurre tutti gli eventi da un registro bin. Inoltre, la creazione di un dump non è priva di conseguenze per le prestazioni. Probabilmente, tali discariche richiedono probabilmente molta più memoria di un'istantanea. La creazione di un volume EBS esclusivamente per i database e lo snapshot sarebbe preferibile per la maggior parte dei casi (detto ciò, anche lo scatto di un'istantanea ha un certo impatto sulle prestazioni).

Il bello delle istantanee e dei volumi EBS è che possono essere utilizzati in altri casi. Se la tua istanza non si avvia, puoi collegare il volume di root a un'altra istanza per diagnosticare e risolvere il problema - o semplicemente per copiare i tuoi dati da esso - e puoi cambiare i volumi di root con solo un paio di minuti di downtime (fermare l'istanza, staccare il volume di root, collegare un nuovo volume di root, avviare l'istanza). La stessa idea vale per avere i tuoi dati su un secondo volume EBS. In sostanza, è sufficiente estrarre una nuova istanza dall'AMI personalizzata e collegare il volume EBS corrente ad esso - aiuta a ridurre al minimo i tempi di inattività.

(Si potrebbe argomentare (e probabilmente non lo consiglierei) che è possibile impostare due copie di MySQL sullo stesso server (Master-slave), utilizzando due volumi EBS, quindi arrestare lo slave per scattare un'istantanea del suo Volume EBS - sarà coerente, senza tempi di inattività - ma i costi di prestazione probabilmente non ne valgono la pena).

AWS ha il ridimensionamento automatico, che sarà in grado di mantenere un numero costante di istanze (anche se quel numero è 1), tuttavia si distribuirà da un'istantanea, quindi se l'istantanea non è utile, la premessa non è di grande utilità .

Un'altra coppia di punti: è possibile distribuire tutte le istanze desiderate da una singola istantanea (a differenza di un volume EBS, che può essere collegato a una singola istanza in qualsiasi momento). Inoltre, i volumi EBS possono essere utilizzati all'interno di un'area di disponibilità, mentre le istantanee possono essere utilizzate all'interno di un'area.

Idealmente, con uno snapshot, se il tuo server si arresta, puoi semplicemente avviarne uno nuovo usando l'ultimo snapshot - specialmente se separi il tuo volume di root dai tuoi dati, un cattivo aggiornamento dovrebbe comportare un minimo di downtime (dal momento che trasferisci il volume EBS contenente i tuoi dati - e scatta un'istantanea per preservare tutto ciò che potrebbe essere danneggiato a causa di un'incoerenza).

Come nota a margine, Amazon afferma che il tasso di fallimento dei volumi EBS aumenta con la quantità di dati modificati su di loro dall'ultima istantanea.

Raccomandazioni finali

  • Usa le istantanee - sono fantastiche - riducono i tempi di fermo molto più di quanto non lo causino
  • Separare i dati e il volume di root, magari anche mettendo i database sul proprio volume e, se necessario, eseguire uno snapshot prima degli aggiornamenti
  • Usa il bin-log per rimanere il più 'caldo' possibile - carica questo (compresso) su S3
  • Assicurati di ottenere effettivamente i dati dall'istanza (anche se i dati sono intatti su un volume EBS, il volume stesso potrebbe essere temporaneamente inaccessibile).

Lettura consigliata:

(Credo di aver scritto troppo, ma non ho detto abbastanza - ma spero che trovi qualcosa che valga la pena leggere).


Ottime informazioni e spiegazioni sul funzionamento degli snapshot EBS.
bwight

Sì, c'erano delle ottime informazioni lì. Entrambe le risposte (se combinate con i commenti in particolare) sono state utili, vorrei poterle accettare entrambe!
Bart Silverstrim,

4

È possibile eseguire l'istantanea di un volume EBS live , tuttavia è necessario assicurarsi che il filesystem sia in uno stato coerente e quindi bloccato mentre viene avviata l'istantanea. Non tutti i filesystem lo consentono, sebbene sia sicuramente possibile e alla base della nostra soluzione di backup.

Le snapshot EBS sono anche abbastanza economiche in quanto fanno pagare solo per i dati modificati e le tariffe dei dati sono molto ragionevoli dentro e fuori da sole. Tieni presente, tuttavia, che questo si basa su cambiamenti a livello di blocco, quindi può cambiare piuttosto rapidamente. Questo vale anche tra le istantanee, vengono addebitati solo i dati modificati tra le istantanee. Per darti un'idea dei costi, paghiamo <$ 10 al mese per l'archiviazione di snapshot e realizziamo snapshot giornalieri, mantenendo gli ultimi 7 quotidiani e gli ultimi mesi di snapshot settimanali e abbiamo 2 server che seguono questo schema (~ 20 snapshot, Dischi rigidi da 20 GB).


Purtroppo il filesystem sui server non è xfs. Anche se supponevo che potesse essere fatto se fossero migrati al montaggio di un volume EBS formattato XFS e collegandolo all'istanza, quindi spostando i dati esistenti su quel punto di montaggio. In questo momento non penso che andrebbero per i tempi di inattività e aggiunto costi per questo.
Bart Silverstrim,

@Bart: se sei disposto a sopportare un'ora o due inattività, è possibile migrare un'istantanea esistente su XFS. Credo anche che ext4 ora supporti le cose necessarie per far funzionare l'istantanea coerente, se invece ci si trova su quel file system.
Matthew Scharley,

Come suggerisce la risposta, è comunque possibile eseguire un'istantanea senza arrestare il database senza interrompere i servizi. C'è una possibilità quando si esegue un'istantanea che potrebbe non essere coerente, ma in quella situazione si avrà comunque il dump del database.
Javier Constanzo,

@javierConstanzo - Stai suggerendo di scattare un'istantanea dal vivo e rischiare lo stato incoerente e di utilizzare i dump del database per correggere probabili nodi nella consistenza del filesystem?
Bart Silverstrim,

@Bart: suggerirei anche che gli snapshot sono "caldi" come un backup, e anche molto più coerenti internamente di rsync o simili. I file possono cambiare mentre altri vengono trasferiti, il che significa che in alcune situazioni potresti finire con un backup inutile. Consiglio vivamente di consumare le poche ore di inattività per modificare i filesystem (se necessario) per far funzionare le istantanee. È incredibile quanto sia flessibile una soluzione di backup degli snapshot EBS, è possibile montarli sull'istanza corrente per ripristinarli.
Matthew Scharley,

1

Che ne dici di una soluzione di backup economica come Zmanda Cloud Backup? Lo usiamo per il backup di circa 6 server e 1 SQL Server ed è solo circa $ 10 al mese. Puoi crittografare i tuoi dati con un certificato autofirmato e usano s3 per archiviare i dati (quindi non ci sono costi di trasferimento dei dati se esegui il backup da EC2).


Sei affiliato? Se non stanno andando in primavera per ~ $ 1 / mese per un'istantanea EBS ...
ceejayoz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.