Come si può utilizzare in modo efficiente S3 per eseguire il backup dei file in modo incrementale?


42

Capisco come funziona rsync ad alto livello, ma ci sono 2 lati. Con S3 non c'è demone di cui parlare - beh, lo è, ma fondamentalmente è solo HTTP.

Sembrano esserci alcuni approcci.

s3rsync (ma questo si limita a rsync su s3). Semplice. Non sono sicuro di voler dipendere da qualcosa di terze parti. Vorrei che s3 supportasse rsync.

Ci sono anche alcuni "cloni" rsync come la duplicità che affermano di supportare s3 senza detto bolt-on. Ma come può farlo? Stanno mantenendo un file indice localmente? Non sono sicuro di come possa essere altrettanto efficiente.

Ovviamente voglio usare s3 perché è economico e affidabile, ma ci sono cose per cui rsync è lo strumento, come il backup di una gigantesca directory di immagini.

Quali sono le opzioni qui? Cosa perdo usando duplicity + s3 invece di rsync + s3rsync + s3?


4
S3 è economico? Questa è una novità per me. Affidabile? Di sicuro, ma non economico.
EEAA,

5
Bene, s3 è di $ 0,13 / gb o meno se si memorizza di più o si desidera meno ridondanza. Una rapida ricerca rivela evbackup.com per l'archiviazione rsync. Molto più costoso. Cos'è più economico e ha un certo livello di ridondanza?
Jaimie Sirovich,

Se dovessi progettare rsync, supporterebbe i plugin in modo da poter aggiungere nuovi protocolli (ad esempio s3: //). Tuttavia, al momento, rsync non supporta questo, quindi non credo che rsync possa essere utilizzato direttamente per il backup su S3.
Edward Falk

Il prossimo problema è che non credo che S3 memorizzi metadati come proprietà o permessi, quindi usando ad esempio "aws s3 sync" per fare i backup funzionerà, ma probabilmente non è adatto per un backup completo di un filesystem Unix, dal momento che troppi dati andrebbero persi al ripristino. Penso anche che link simbolici, hardlink e altri file speciali andrebbero persi.
Edward Falk,

Risposte:


39

Dal momento che questa domanda è stato risposto scorso, v'è un nuovo strumento a riga di comando AWS, aws.

Può sincronizzare , similmente a rsync, tra memoria locale e s3. Esempio di utilizzo:

aws s3 sync s3://mybucket /some/local/dir/

Se l'ambiente python del tuo sistema è configurato correttamente, puoi installare il client AWS usando pip:

pip install awscli

1
Nella mia esperienza, questo carica tutto, non solo un delta di modifiche. Ad esempio, stavo spingendo un sito statico su un server di sviluppo con rsync, e ci sono voluti in media 1 secondo, con solo le modifiche in corso sulla mia connessione lenta. aws s3 syncd'altra parte, ci sono voluti circa 5 minuti, ritrasferendo ogni singolo file.
segale

2
Credo che non funzioni, ma i documenti dicono "Un file locale richiederà il caricamento se la dimensione del file locale è diversa dalla dimensione dell'oggetto s3, l'ultima volta modificata del file locale è più recente della ora dell'ultima modifica dell'oggetto s3 o il file locale non esiste sotto il bucket e il prefisso specificati. " Assicurati di avere l'ultima versione di aws-cli - se riesci a riprodurlo, invia un bug con loro su github. Mi hanno risposto quando ho presentato un bug qualche tempo fa.
Dan Pritts,

Il comando dovrebbe essere: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S

1
Carlos, non sono sicuro di quale sia il tuo punto. Se intendi suggerire che il mio comando di esempio è sbagliato, entrambi abbiamo ragione. La sincronizzazione s3 può funzionare in entrambe le direzioni.
Dan Pritts,

In ritardo alla festa, ma ecco cosa sta succedendo: quando si carica su S3, si applicano le regole di controllo rapido (caricare se la dimensione o la data è cambiata). Durante il download , non ci sono regole di controllo rapido e tutto viene scaricato incondizionatamente.
Edward Falk,

16

Lo strumento s3cmd ha un'ottima syncopzione. Lo uso per sincronizzare i backup locali, usando qualcosa come:

s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/

Ciò --skip-existingsignifica che non tenta di eseguire il checksum per confrontare i file esistenti. Se esiste già un file con quel nome, lo salterà e passerà rapidamente. C'è anche --delete-removedun'opzione che rimuoverà i file non esistenti localmente, ma voglio continuare su S3 anche quelli che ho ripulito localmente, quindi non lo uso.


5

Non voglio dire a nessuno cosa fare, ma posso sventolare una bandiera per la duplicità? o altra soluzione di backup incrementale. La sincronizzazione è molto buona, ma se esegui il backup di notte, cosa succede se non noti il ​​problema per due giorni? Risposta: è troppo tardi, i tuoi file locali e il tuo backup sono uno specchio l'uno dell'altro e non hanno nemmeno i dati di cui hai bisogno. Dovresti davvero prendere in considerazione backup incrementali o istantanee in modo da poter recuperare in un determinato momento nel tempo e per farlo in modo efficiente hai bisogno di backup incrementali. E se la perdita dei dati è una fine dello scenario mondiale, conservare copie di diversi fornitori come non si sa mai, quindi si potrebbe perdere, violare chi lo sa.

Uso la duplicità e s3, va bene ma è intensivo per la cpu. Ma esegue backup incrementali. In un'emergenza quando si desidera ripristinare una directory o un file particolare, come lo scorso mercoledì o lo scorso gennaio, senza ripristinare gli altri file nella stessa partizione, è necessario disporre di backup incrementali e uno strumento in cui è possibile richiedere solo i file necessari.

Ho un cron, che fa il pieno ogni x mesi, altrimenti incrementale ed elimina più vecchi di x mesi per mantenere bassi i totali di archiviazione s3, infine fa lo stato della raccolta, quindi mi viene inviato ogni mattina con lo stato. È necessario tenerlo d'occhio regolarmente in modo da notare quando il backup non funziona.

Richiede un significativo spazio temporaneo locale per conservare le firme locali, quindi imposta attentamente la directory temporanea. Questo esegue il backup / mnt, escludendo varie directory all'interno di / mnt. Questo è utile per il backup dei dati, poiché le partizioni di sistema utilizzano gli strumenti di imaging o di istantanea di Amazon.

Script PHP:

# Duplicity Backups

$exclude  = "--exclude /mnt/ephemeral ".
            "--exclude /mnt/logs ".
            "--exclude /mnt/service ".
            "--exclude /mnt/mail ".
            "--exclude /mnt/mysql ";

$key = "PASSPHRASE=securegpgpassphrase";

$tmp = "/mnt/mytempdir";

system("mkdir -p $tmp");

# Amazon

$aws = "AWS_ACCESS_KEY_ID=xxxxxx ".
       "AWS_SECRET_ACCESS_KEY=xxxxxx ";

$ops = "-v5 --tempdir=$tmp --archive-dir=$tmp --allow-source-mismatch --s3-european-buckets --s3-use-new-style --s3-use-rrs";
$target = " s3://s3-eu-west-1.amazonaws.com/mybucket";

# Clean + Backup

system("$key $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclude /mnt $target");
system("$key $aws /usr/bin/duplicity $ops remove-older-than 6M --force $target");
system("$key $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $target");
system("$key $aws /usr/bin/duplicity $ops collection-status $target")

1
attiva il controllo delle versioni per il bucket s3, quindi manterrà le vecchie copie
mcmillab,

3

S3 è un sistema di archiviazione di oggetti per scopi generici che offre abbastanza flessibilità per progettare come si desidera utilizzarlo.

Non sono sicuro dalla tua domanda dei problemi con rsync (diversi dall'indicizzazione) o dei problemi con lo strumento "di terze parti" in cui ti sei imbattuto.

Se disponi di un ampio set di file ben strutturati, puoi eseguire più sincronizzazioni s3 nelle tue sottocartelle.

Le persone simpatiche di Amazon ti consentono anche di fare un'importazione / esportazione dal tuo hard disk portatile per il trasferimento di file di grandi dimensioni su S3 o EBS - http://aws.amazon.com/importexport/ che puoi utilizzare per il primo caricamento.

Consulta le migliori pratiche di Amazon s3 qui: http://aws.amazon.com/articles/1904

Per quanto riguarda gli strumenti diversi, provali e vedi cosa funziona meglio per te. Per quanto riguarda i prezzi, vi è una riduzione dei prezzi di ridondanza se si adatta alle proprie esigenze - http://aws.amazon.com/s3/pricing/

Raccomandazione generale - avere una CPU multicore veloce e una buona pipe di rete.

AGGIORNAMENTO: Menzione sul checksum su S3

Per quanto riguarda S3 memorizza i dati in coppie chiave-valore e non esiste un concetto di directory. S3sync verifica il checksum (S3 ha un meccanismo per inviare il checksum come intestazione per la verifica - Content-MD5 header). Le migliori pratiche collegano la parte di integrità dei dati in modo dettagliato. S3 consente di inviare / verificare e recuperare checksum. Ci sono molte persone che fanno backup incrementali con duplicità. Anche se non c'è rsync in esecuzione su S3, puoi fare checksum come ho menzionato qui.

rsync è uno strumento collaudato e la maggior parte degli strumenti moderni utilizza lo stesso algoritmo o libreria rsync o chiama rsync esternamente.


1
Non vedo come questo risponda alla domanda. Stavo chiedendo come la doppiezza riesca a fare ciò che fa rsync senza un demone dall'altra parte. Non ha nemmeno la possibilità di ottenere un checksum, o forse lo fa, ma come aggiornerebbe in modo incrementale i file?
Jaimie Sirovich,

OK. Quindi stai dicendo che Duplicity usa questo hash da S3, ma afferma anche di funzionare su FTP. FTP non ha alcun meccanismo di hashing. Tendo a sbagliare sul lato sicuro e utilizzare gli strumenti "comprovati". Rsync ha dimostrato di sì, ma non eseguirà backup s3 senza il servizio aggiuntivo s3 s3rsync. Ho un po 'paura della duplicità, ma ha un fascino del protocollo più ampio se riesco a ottenere un certo livello di funzionalità simile a rsync con S3 senza detto servizio accessorio. Io proprio non capisco come bene funziona (e possibilmente in modo diverso con vari protocolli). Come diavolo fa la sincronizzazione FTP? :)
Jaimie Sirovich,

@JaimieSirovich Provalo e vedi. Se lo avessi fatto, avresti saputo che Duplicity crea file "manifest" in meno tempo di quanto ci sia voluto per scrivere tutti questi commenti su cosa potrebbe fare.
Ceejayoz,

3

In alternativa puoi usare minio client aka mc L' uso del comando 'mc mirror' farà il lavoro.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: client minio
  • share / sharegain: directory locale
  • s3: Alias ​​per https://s3.amazonaws.com
  • MyS3Bucket: il mio bucket S3 remoto
  • share / sharegain: il mio oggetto su s3

Puoi scrivere un semplice script come cronjob che manterrà una sincronizzazione a intervalli periodici.

Spero che sia d'aiuto.


-wOra c'è anche una bandiera, che userà fsnotifyper controllare i cambiamenti. Può essere facilmente impostato come servizio di sistema o simile.
alkar,

2

Non sono sicuro che il vero rsync sia adatto ad Amazon.

A quanto ho capito, l'algoritmo rsync standard significa che il client calcola gli hash per ogni blocco di un file e il server calcola gli hash per la sua copia e invia quegli hash al client, il che significa che il client può determinare quali blocchi sono stati modificati e devono essere caricati.

Ciò causa due problemi per Amazon in quanto molti hash devono essere inviati via Internet e ci vuole anche potenza di elaborazione per calcolare tutti quegli hash che aumenterebbero i costi di Amazon - motivo per cui probabilmente lo lasciano a fornitori terzi che possono addebito extra per quella funzione.

Per quanto riguarda i cloni, stanno ovviamente memorizzando gli hash da qualche parte e da qualche parte possono variare a seconda del clone. Sarebbe possibile per loro archiviare gli hash come oggetto separato per file su Amazon o come database archiviato su Amazon oppure potrebbero memorizzarli localmente e in remoto.

Ci sono vantaggi e svantaggi di farlo in entrambi i modi. Se gli hash vengono archiviati in remoto in singoli file, può essere costoso recuperarli continuamente. Se gli hash sono archiviati in remoto in un database, questo database può diventare grande e può essere costoso recuperarli e aggiornarli continuamente. Se gli hash vengono archiviati localmente, ciò aiuta a ridurre i costi, ma introduce altre complicazioni e problemi.

(Naturalmente Amazon ha altri servizi, quindi sarebbe possibile mantenere un database in Amazon DB)

Ad esempio, ho provato molti anni fa un clone rsync. Questo non è stato scritto per tenere conto della struttura dei prezzi di Amazon e stava emettendo un sacco di http per recuperare l'hash di ciascun blocco e poiché Amazon addebita per ogni blocco, ciò significa che mentre la parte di archiviazione della mia fattura è diminuita drasticamente, la parte di trasferimento gonfiato.

Cosa perdo usando duplicity + s3 invece di rsync + s3rsync + s3?

Perdi il fatto che con rsync sai che stai confrontando i file di origine con i tuoi file di backup. Con la duplicità e altri cloni, si stanno confrontando i file di origine con un hash acquisito durante l'esecuzione del backup. Ad esempio, potrebbe essere possibile accedere direttamente a S3 e sostituire uno dei suoi file senza ricalcolare l'hash o aggiornare il database di hash.


0

Dopo aver confrontato più opzioni menzionate in questo thread, ho deciso di scegliere S3fs. Ti permette di montare S3 come filesystem locale. È quindi possibile procedere e utilizzare rsync nel modo in cui lo si conosce già.

Questo è un buon tutorial per iniziare: Amazon S3 con Rsync

L'autore aveva precedentemente utilizzato il citato s3sync, ma poi è passato all'opzione con S3Fs. Mi piace perché ho anche altre cartelle di backup montate localmente tramite SSHFS.


12
Pericolo, Will Robinson! Questo è davvero costoso in quanto non stai ottenendo alcun vantaggio dalla comunicazione rsync a bassa larghezza di banda --- s3fs finirà per leggere (e quindi scrivere, se cambia) l'intero file, il che significa che Amazon ti fatturerà due volte. Invece considera l'utilizzo di un'istanza EC2 e l'utilizzo remoto di rsync tramite ssh. I trasferimenti verso S3 da un'istanza EC2 sono gratuiti, quindi tutto ciò che si paga è la comunicazione a bassa larghezza di banda di rsync dal proprio computer locale all'istanza EC2. L'esecuzione di una microistanza EC2 su richiesta non costa praticamente nulla.
David, dato il

2
Questo! Ci sono molti cattivi consigli là fuori per quelli che non capiscono rsync e S3 ...
Mark

L'unico aspetto negativo di questo è che ora hai una microistanza da gestire. Triviale se sai come, ma una barriera all'ingresso per molti. Tra i lati positivi, l'archiviazione EBS collegata a EC2 è circa la metà del prezzo per byte di S3.
Dan Pritts,

@DavidGiven E se scrivessi direttamente su s3fs montato senza usare rysnc e poi gestissi la longevità tramite il ciclo di vita?
Pensatore
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.