{"id":86904,"date":"2020-07-01T07:42:30","date_gmt":"2020-07-01T05:42:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud"},"modified":"2020-07-01T07:42:30","modified_gmt":"2020-07-01T05:42:30","slug":"kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","title":{"rendered":"Come GitLab aiuta a fare backup di grandi archivi NextCloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, Habr!<\/p>\n<p><\/p>\n<p>Oggi voglio condividere la nostra esperienza nell'automazione del backup dei grandi dati degli archivi Nextcloud in diverse configurazioni. Lavoro come CTO presso \"Molniya AK\", dove ci occupiamo della gestione delle configurazioni dei sistemi IT, utilizzando Nextcloud per lo storage dei dati. Inclusi, con una struttura distribuita, con riserva.<\/p>\n<p><\/p>\n<p>I problemi derivano dalle peculiarit\u00e0 delle installazioni, dato che i dati sono numerosi. La versioning fornita da Nextcloud, il backup, motivi soggettivi e altro creano molteplici duplicati.<\/p>\n<p><\/p>\n<h2 id=\"predystoriya\">Antefatti<\/h2>\n<p><\/p>\n<p>Quando si amministra Nextcloud sorge acutamente il problema di organizzare un backup efficace che deve essere assolutamente crittografato, poich\u00e9 i dati sono preziosi.<\/p>\n<p><\/p>\n<p>Offriamo opzioni per memorizzare il backup da noi o dal cliente su macchine separate da Nextcloud, il che richiede un approccio automatizzato e flessibile all'amministrazione.<\/p>\n<p><\/p>\n<p>Ci sono molti clienti, tutti con configurazioni diverse, in piattaforme diverse e con le proprie peculiarit\u00e0. In questo caso, la metodica standard, dove l'intera piattaforma appartiene a te e i backup sono effettuati da cron, si adatta male.<\/p>\n<p><\/p>\n<p>Per iniziare, diamo un'occhiata ai dati di input. Abbiamo bisogno di:<\/p>\n<p><\/p>\n<ul>\n<li>Scalabilit\u00e0 in termini di una o pi\u00f9 nodi. Per installazioni di grandi dimensioni utilizziamo minio come storage.<\/li>\n<li>Rilevare problemi nell'esecuzione del backup.<\/li>\n<li>\u00c8 necessario conservare il backup presso i clienti e\/o presso di noi.<\/li>\n<li>Risolvere rapidamente e facilmente i problemi.<\/li>\n<li>I clienti e le installazioni differiscono significativamente l'uno dall'altro: non riusciamo a raggiungere l'uniformit\u00e0.<\/li>\n<li>La velocit\u00e0 di ripristino deve essere minima in due scenari: ripristino completo (disastro), una cartella - cancellata per errore.<\/li>\n<li>\u00c8 obbligatoria la funzione di deduplicazione.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Come GitLab aiuta a fare backup di grandi archivi NextCloud\" src=\"\/wp-content\/uploads\/2020\/07\/1a0048e3295fef94ddca28e50612e3cb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Per affrontare il compito della gestione dei backup, abbiamo integrato GitLab. Maggiori dettagli in seguito. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Senza dubbio, non siamo i primi a risolvere un problema simile, ma ci sembra che la nostra esperienza pratica possa essere interessante e siamo pronti a condividerla.<\/p>\n<p><\/p>\n<p>Poich\u00e9 nella nostra azienda \u00e8 adottata una politica open source, abbiamo cercato una soluzione proprio con codice sorgente aperto. D'altra parte, condividiamo le nostre sviluppazioni e le pubblichiamo. Ad esempio, su GitHub c'\u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/nextcloud-safe-trash\">il nostro plugin per Nextcloud<\/a><\/noindex>, che installiamo ai clienti, aumentando la sicurezza dei dati in caso di cancellazione accidentale o intenzionale.<\/p>\n<p><\/p>\n<h2 id=\"sredstva-bekapirovaniya\">Strumenti di backup<\/h2>\n<p><\/p>\n<p>La ricerca di soluzioni \u00e8 iniziata con la scelta dello strumento per la creazione del backup.<\/p>\n<p><\/p>\n<p>Il normale tar + gzip funziona male: i dati vengono duplicati. L'incremento spesso contiene pochissime modifiche e gran parte dei dati all'interno di un file si ripete.<br \/>\nC'\u00e8 un altro problema: la ridondanza dello storage distribuito dei dati. Utilizziamo minio e i suoi dati sono in linea di principio ridondanti. O si doveva effettuare il backup tramite lo stesso minio, caricandolo e utilizzando tutte le interfacce tra il filesystem, e cosa non meno importante, c'\u00e8 il rischio di dimenticare parte dei bucket e delle informazioni meta. Oppure si pu\u00f2 utilizzare la deduplicazione.<\/p>\n<p><\/p>\n<p>Esistono strumenti di backup con deduplicazione nell'open source (ne abbiamo parlato su Habr <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/449282\/\">sul CommunityHelpWiki (sullo stesso dominio<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420055\/\">a questo proposito<\/a><\/noindex>) e i nostri finalisti sono stati <noindex><a rel=\"nofollow\" href=\"https:\/\/borgbackup.readthedocs.io\/en\/stable\/\">Borg<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/restic.net\/\">Restic<\/a><\/noindex>. Di seguito il nostro confronto tra le due applicazioni, mentre ora vi racconteremo come abbiamo organizzato l'intero schema.<\/p>\n<p><\/p>\n<h2 id=\"upravlenie-sozdaniem-rezervnyh-kopiy\">Gestione della creazione di backup<\/h2>\n<p><\/p>\n<p>Borg e Restic sono buoni, ma nessuno dei due prodotti ha un meccanismo di gestione centralizzato. Per motivi di gestione e controllo abbiamo scelto uno strumento che abbiamo gi\u00e0 implementato, senza il quale non concepiamo il nostro lavoro, compresa l'automazione: \u00e8 il noto CI\/CD \u2013 GitLab.<\/p>\n<p><\/p>\n<p>L'idea \u00e8 la seguente: su ogni nodo che memorizza dati Nextcloud viene installato gitlab-runner. Il runner esegue secondo una pianificazione uno script che monitora il processo di backup, e questo avvia Borg o Restic.<\/p>\n<p><\/p>\n<p>Cosa abbiamo ottenuto? Un feedback dall'esecuzione, un controllo agevole sulle modifiche, dettagli in caso di errore.<\/p>\n<p><\/p>\n<p>Ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/backup-by-runner\">qui su GitHub<\/a><\/noindex> abbiamo pubblicato esempi di script per diverse attivit\u00e0, e in ultima analisi lo abbiamo collegato al backup non solo di Nextcloud, ma anche di molti altri servizi. L\u00ec si trova anche il pianificatore, se non si ha voglia di configurarlo manualmente (e a noi non piace) e .gitlab-ci.yml<\/p>\n<p><\/p>\n<p>Nell'API di GitLab attualmente non c'\u00e8 la possibilit\u00e0 di modificare il timeout CI\/CD, che \u00e8 piuttosto breve. Deve essere aumentato, diciamo a <code>1d<\/code>.<\/p>\n<p><\/p>\n<p>Fortunatamente, GitLab pu\u00f2 essere avviato non solo al momento del commit, ma anche secondo una pianificazione, ed \u00e8 esattamente ci\u00f2 che ci serve.<\/p>\n<p><\/p>\n<p>Ora parliamo dello script wrapper.<\/p>\n<p><\/p>\n<p>Abbiamo posto le seguenti condizioni per questo script:<\/p>\n<p><\/p>\n<ul>\n<li>Deve essere avviato sia dal runner che manualmente dalla console con funzionalit\u00e0 identiche.<\/li>\n<li>\u00c8 assolutamente necessario avere gestori degli errori:<\/li>\n<li>return code.<\/li>\n<li>ricerca di stringhe nei log. Ad esempio, per noi un messaggio che il programma considera non fatale pu\u00f2 essere un errore.<\/li>\n<li>Timeout in elaborazione. Il tempo di esecuzione deve essere ragionevole.<\/li>\n<li>Abbiamo bisogno di un log dettagliato. Ma solo in caso di errore.<\/li>\n<li>Viene effettuata anche una serie di test prima dell'inizio.<\/li>\n<li>Piccole comodit\u00e0 che abbiamo trovato utili durante l'assistenza:<\/li>\n<li>L'inizio e la conclusione vengono registrati nel log di sistema della macchina locale. Questo aiuta a collegare gli errori di sistema e il funzionamento del backup.<\/li>\n<li>Una parte del log degli errori, quando presenti, viene mostrata in stdout, l'intero log viene scritto in un file separato. \u00c8 comodo dare un'occhiata subito in CI e valutare l'errore se \u00e8 banale.<\/li>\n<li>Modalit\u00e0 per il debug.<\/li>\n<\/ul>\n<p><\/p>\n<p>Un log completo viene salvato come artefatto in GitLab; se non ci sono errori, il log viene eliminato. Scriviamo lo script in bash.<\/p>\n<p><\/p>\n<p>Siamo lieti di considerare qualsiasi suggerimento o osservazione riguardante l'open source \u2014 benvenuti.<\/p>\n<p><\/p>\n<h2 id=\"kak-eto-rabotaet\">Come funziona<\/h2>\n<p><\/p>\n<p>Sulla node da eseguire backup viene avviato un runner con un executor bash. Un job CI\/CD viene eseguito tramite un pianificatore in un repository speciale. Il runner avvia uno script come wrapper universale per tali compiti, in cui vengono eseguiti controlli di validit\u00e0 del repository di backup, dei punti di montaggio e di tutto ci\u00f2 che desideriamo, quindi viene eseguita l'operazione di backup e la pulizia del vecchio. Il backup pronto viene inviato a S3.<\/p>\n<p><\/p>\n<p>Lavoriamo secondo questo schema: un provider esterno AWS o un analogo russo (questo \u00e8 pi\u00f9 veloce e i dati non lasciano la RF). In alternativa, installiamo un cluster minio separato presso il cliente per questi scopi. Di solito facciamo cos\u00ec per motivi di sicurezza, quando il cliente non vuole affatto che i dati lascino il loro contesto.<\/p>\n<p><\/p>\n<p>Non abbiamo utilizzato la funzionalit\u00e0 di invio del backup tramite ssh. Questo non aggiunge sicurezza, mentre le capacit\u00e0 di rete del provider S3 sono molto superiori a quelle di una nostra macchina ssh.<\/p>\n<p><\/p>\n<p>Per proteggersi da un hacker sulla macchina locale \u2014 poich\u00e9 pu\u00f2 cancellare i dati su S3 \u2014 \u00e8 assolutamente necessario abilitare la versioning.<br \/>\nIl backup viene sempre crittografato.<\/p>\n<p><\/p>\n<p>Borg ha una modalit\u00e0 senza crittografia <code>none<\/code>, ma non raccomandiamo categoricamente di attivarla. In questa modalit\u00e0 non ci sar\u00e0 solo crittografia, ma non verr\u00e0 calcolato nemmeno il checksum di ci\u00f2 che viene registrato, quindi l'integrit\u00e0 pu\u00f2 essere verificata solo indirettamente, tramite indici.<\/p>\n<p><\/p>\n<p>Secondo un pianificatore separato, viene eseguita la verifica dei backup sull'integrit\u00e0 degli indici e del contenuto. La verifica avviene lentamente e a lungo, quindi la avviamo separatamente una volta al mese. Pu\u00f2 durare diversi giorni.<\/p>\n<p><\/p>\n<h2 id=\"ridmi-na-russkom\">Readme in russo<\/h2>\n<p><\/p>\n<h3 id=\"osnovnye-funkcii\">Funzioni principali<\/h3>\n<p><\/p>\n<ul>\n<li><code>preparare<\/code> preparazione<\/li>\n<li><code>testcheck<\/code> verifica della prontezza<\/li>\n<li><code>maincommand<\/code> comando principale<\/li>\n<li><code>forcepostscript<\/code> funzione eseguita alla fine o in caso di errore. Utilizzata per smontare la partizione.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"service-functions\">Funzioni di servizio<\/h3>\n<p><\/p>\n<ul>\n<li><code>ripulire<\/code> registriamo gli errori o cancelliamo il file di log.<\/li>\n<li><code>checklog<\/code> analizziamo il log per la presenza di stringhe di errore.<\/li>\n<li><code>ret<\/code> gestore di uscita.<\/li>\n<li><code>checktimeout<\/code> verifica del timeout.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"environment\">Ambiente<\/h3>\n<p><\/p>\n<ul>\n<li><code>VERBOSE=1<\/code> mostriamo gli errori immediatamente a schermo (stdout).<\/li>\n<li><code>SAVELOGSONSUCCES=1<\/code> salviamo il log in caso di successo.<\/li>\n<li><code>INIT_REPO_IF_NOT_EXIST=1<\/code> Creiamo il repository se non esiste. Disabilitato di default.<\/li>\n<li><code>TIMEOUT<\/code> tempo massimo per l'operazione principale. Puoi impostarlo come &#8216;m&#8217;, &#8216;h&#8217; o &#8216;d&#8217; alla fine.<\/li>\n<\/ul>\n<p><\/p>\n<p>Modalit\u00e0 di conservazione delle copie vecchie. Di default:<\/p>\n<p><\/p>\n<ul>\n<li><code>KEEP_DAILY=7<\/code><\/li>\n<li><code>KEEP_WEEKLY=4<\/code><\/li>\n<li><code>KEEP_MONTHLY=6<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"peremennye-vnutri-skripta\">Variabili all'interno dello script<\/h2>\n<p><\/p>\n<ul>\n<li><code>ERROR_STRING<\/code> \u2014 stringa per il controllo nel log per l'errore.<\/li>\n<li><code>EXTRACT_ERROR_STRING<\/code> \u2014 espressione per mostrare la stringa in caso di errore.<\/li>\n<li><code>KILL_TIMEOUT_SIGNAL<\/code> \u2014 segnale per terminare in caso di timeout.<\/li>\n<li><code>TAIL<\/code> \u2014 quante stringhe con errori a schermo.<\/li>\n<li><code>COLORMSG<\/code> \u2014 colore del messaggio (default giallo).<\/li>\n<\/ul>\n<p><\/p>\n<p>Lo script chiamato wordpress \u00e8 cos\u00ec chiamato perch\u00e9 ha anche la funzione di fare backup del database mysql. Pertanto, pu\u00f2 essere utilizzato per installazioni monodose di Nexcloud, dove \u00e8 possibile eseguire anche il backup del database. Il vantaggio non \u00e8 solo che tutto \u00e8 in un posto, ma anche che il contenuto del database \u00e8 vicino a quello dei file, poich\u00e9 la differenza di tempo \u00e8 minima.<\/p>\n<p><\/p>\n<h2 id=\"restic-vs-borg\">Restic vs Borg<\/h2>\n<p><\/p>\n<p>Le comparazioni tra Borg e Restic sono disponibili anche <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/454734\/\">qui su Habr\u00e9<\/a><\/noindex>, e non avevamo l'obiettivo di fare solo un altro, ma il nostro. Ci importava sapere come questo si sarebbe presentato sui nostri dati, con la nostra specificit\u00e0. Li riportiamo.<\/p>\n<p><\/p>\n<p>I nostri criteri di selezione, oltre a quelli gi\u00e0 menzionati (deduplicazione, ripristino rapido, ecc.):<\/p>\n<p><\/p>\n<ul>\n<li>Resistenza a lavori non completati. Verifica di kill -9.<\/li>\n<li>Dimensione su disco.<\/li>\n<li>Richiesta di risorse (CPU, memoria).<\/li>\n<li>Dimensione dei blob conservati.<\/li>\n<li>Lavoro con S3.<\/li>\n<li>Verifica di integrit\u00e0.<\/li>\n<\/ul>\n<p><\/p>\n<p>Per il testing abbiamo preso un cliente con dati reali e dimensione totale di 1,6TB.<br \/>\nCondizioni.<\/p>\n<p><\/p>\n<p>Borg non pu\u00f2 lavorare direttamente con S3, e lo abbiamo montato come disco fuse, tramite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/goofys\">goofys<\/a><\/noindex>. Restic inviava a S3 direttamente.<\/p>\n<p><\/p>\n<p>Goofys funziona molto velocemente e bene, ed ha anche <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/catfs\">un modulo di cache su disco<\/a><\/noindex>, che accelera ulteriormente il lavoro. \u00c8 attualmente in fase beta e, a dire la verit\u00e0, ha presentato malfunzionamenti con perdita di dati nei nostri test (altri). Tuttavia, il vantaggio \u00e8 che l'intera procedura di backup non richiede una grande lettura, ma principalmente scrittura, quindi la cache la utilizziamo solo durante il controllo di integrit\u00e0.<\/p>\n<p><\/p>\n<p>Per ridurre l'impatto della rete, abbiamo utilizzato un fornitore locale: Yandex Cloud.<\/p>\n<p><\/p>\n<p>Risultati del confronto dei test.<\/p>\n<p><\/p>\n<ul>\n<li>Kill -9 seguito da un riavvio sono andati entrambi a buon fine.<\/li>\n<li>Dimensione su disco. Borg \u00e8 in grado di comprimere, quindi i risultati sono attesi.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nDimensione<\/p>\n<p>Borg<br \/>\n562Gb<\/p>\n<p>Restic<br \/>\n628Gb<\/p>\n<p><\/p>\n<ul>\n<li>Per CPU<br \/>\nDi per s\u00e9, borg consuma poco, con compressione predefinita, ma va valutato insieme al processo goofys. In totale sono comparabili e utilizzano circa 1,2 core su una stessa macchina virtuale di test.<\/li>\n<li>Memoria. Restic circa 0,5Gb, Borg circa 200Mb. Ma tutto ci\u00f2 \u00e8 insignificante rispetto alla cache dei file di sistema. \u00c8 quindi consigliabile allocare pi\u00f9 memoria.<\/li>\n<li>La differenza nelle dimensioni dei blob \u00e8 stata notevole.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nDimensione<\/p>\n<p>Borg<br \/>\ncirca 500Mb<\/p>\n<p>Restic<br \/>\ncirca 5Mb<\/p>\n<p><\/p>\n<ul>\n<li>Lavorare con S3 da Restic \u00e8 eccellente. Lavorare con Borg attraverso goofys non solleva domande, ma \u00e8 stato notato che \u00e8 preferibile eseguire umount al termine del backup per azzerare completamente la cache. Una peculiarit\u00e0 dell'operazione S3 \u00e8 che i chunk non completamente scaricati non saranno mai inviati al bucket, il che significa che dati non completamente caricati portano a gravi corruzioni.<\/li>\n<li>La verifica dell'integrit\u00e0 funziona bene in entrambi i casi, ma la velocit\u00e0 differisce notevolmente.<br \/>\nRestic \u2013 <strong>3,5 ore<\/strong>.<br \/>\nBorg, con cache dei file di 100Gb SSD \u2013 <strong>5 ore<\/strong>. Un risultato di velocit\u00e0 circa simile se i dati si trovano su un disco locale.<br \/>\nBorg legge direttamente da S3 senza cache <strong>33 ore<\/strong>. Un tempo mostruosamente lungo.<\/li>\n<\/ul>\n<p><\/p>\n<p>In sintesi, Borg \u00e8 in grado di comprimere e ha blob pi\u00f9 grandi \u2014 il che rende pi\u00f9 economico lo storage e le operazioni GET\/PUT in S3. Ma per questo si deve pagare una verifica pi\u00f9 complessa e lenta. Per quanto riguarda la velocit\u00e0 di ripristino \u2014 non abbiamo notato differenze. I backup successivi (dopo il primo) restic li fa un po' pi\u00f9 lentamente, ma non in modo significativo.<\/p>\n<p><\/p>\n<p>Non da ultimo nella scelta c'era la dimensione della community.<\/p>\n<p><\/p>\n<p>E abbiamo scelto borg.<\/p>\n<p><\/p>\n<h2 id=\"paru-slov-o-szhatii\">Due parole sulla compressione<\/h2>\n<p><\/p>\n<p>Borg ha a disposizione un ottimo nuovo algoritmo di compressione \u2014 zstd. In termini di qualit\u00e0 di compressione non \u00e8 inferiore a gzip, ma \u00e8 notevolmente pi\u00f9 veloce. \u00c8 comparabile come velocit\u00e0 con llz4 predefinito.<\/p>\n<p><\/p>\n<p>Ad esempio, un dump di un database MySQL si comprime circa due volte meglio di lz4 alla stessa velocit\u00e0. Tuttavia, l'esperienza su dati reali mostra una differenza molto piccola nel grado di compressione per i nodi Nextcloud.<\/p>\n<p><\/p>\n<p>In Borg c'\u00e8 una modalit\u00e0 di compressione piuttosto vantaggiosa \u2014 se il file ha un'alta entropia, la compressione non viene applicata affatto, il che aumenta la velocit\u00e0 di esecuzione. \u00c8 attivata tramite un'opzione al momento della creazione<br \/>\n<code>-C auto,zstd<\/code><br \/>\nper l'algoritmo zstd<br \/>\nEcco, con questa opzione rispetto alla compressione predefinita abbiamo ottenuto<br \/>\n560Gb e 562Gb rispettivamente. I dati dell'esempio precedente, ricordo, senza compressione il risultato \u00e8 stato di 628Gb. Il risultato con una differenza di 2Gb ci ha sorpreso un po', ma abbiamo deciso che sceglieremo comunque <code>auto,zstd<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"metodika-proverki-bekapa\">Metodologia per il controllo del backup<\/h2>\n<p><\/p>\n<p>Il virtual machine viene avviato direttamente dal provider o dal cliente tramite il pianificatore, il che riduce notevolmente il carico di rete. Almeno \u00e8 pi\u00f9 economico che farlo in locale e gestire il traffico.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">goofys --cache \"--free:5%:\\\/mnt\\\/cache\" -o allow_other --endpoint https:\\\/\\\/storage.yandexcloud.net --file-mode=0666 --dir-mode=0777 xxxxxxx.com \\\/mnt\\\/goofys\nexport BORG_PASSCOMMAND=\"cat \\\/home\\\/borg\\\/.borg-passphrase\"\nborg list \\\/mnt\\\/goofys\\\/borg1\\\/\nborg check --debug -p --verify-data \\\/mnt\\\/goofys\\\/borg1\\\/<\/code><\/pre>\n<p><\/p>\n<p>Con lo stesso schema controlliamo i file con l'antivirus (post-fatto). Infatti, gli utenti caricano vari contenuti su Nextcloud e non tutti hanno un antivirus. Effettuare il controllo al momento del caricamento richiede troppo tempo e ostacola l'attivit\u00e0.<\/p>\n<p><\/p>\n<p>La scalabilit\u00e0 si ottiene avviando runner su nodi diversi con tag diversi.<br \/>\nNel nostro monitoraggio raccogliamo gli stati dei backup tramite l'API di GitLab in un'unica finestra; se necessario, i problemi vengono facilmente individuati e altrettanto facilmente localizzati.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Conclusione<\/h2>\n<p><\/p>\n<p>Di conseguenza, sappiamo con certezza che stiamo effettuando i backup, che i nostri backup sono validi, e i problemi che si verificano con essi richiedono poco tempo e vengono risolti a livello di amministratore di turno. I backup occupano realmente poco spazio rispetto a tar.gz o Bacula.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/508758\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0421\u0422\u041e \u0432 \u00ab\u041c\u043e\u043b\u043d\u0438\u044f \u0410\u041a\u00bb, \u0433\u0434\u0435 \u043c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c IT \u0441\u0438\u0441\u0442\u0435\u043c, \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Nextcloud. \u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0441 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":86905,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-86904","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a GitLab \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 NextCloud | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-01T05:42:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-01T05:42:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Come GitLab aiuta a creare backup di grandi archivi NextCloud | ProHoster","description":"Ciao, Habr! Oggi voglio raccontarvi della nostra esperienza nell'automazione del backup di grandi archivi di dati Nextcloud in diverse configurazioni.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a GitLab \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 NextCloud | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-01T05:42:30+00:00","article:modified_time":"2020-07-01T05:42:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"86904","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:03:54","updated":"2022-10-06 09:05:46","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/86904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=86904"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/86904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/86905"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=86904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=86904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=86904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}