Come minimizzare la width di banda in un frequente scenario di backup postgres?

Sto cercando di fare un backup molto frequente (each ora) dei dati postgres su più VM (diciamo 20-50) verso lo stesso server di archivio.

Qui sono più dati se necessario: Idealmente, il sistema dovrebbe supportre il carico di 80-200 database situati su tutti i VM. Le banche dati sono piccole (da 10 MB a 100 MB) a medie size (500 MB – 2 GB) composta da centinaia di tabelle, una piccola porzione di queste tabelle può facilmente contenere diverse migliaia di linee fino a circa un milione di righe. Le modifiche al database sono spesso nuovi record, alcuni aggiornamenti, non tanto eliminazione. La width di banda sarebbe 100Mbits / s.

Come sto già facendo con un filesystem standard che utilizza il backup incrementale ( rsync ), mi chiedo se qualcosa di simile potrebbe essere raggiunto con i backup del database postgres.

Ho diverse opzioni possibili:

  • Potrei scegliere di mettere il database su un filesystem snapshotable ( aufs docker style, ZFS , btrfs , ma alcuni di questi sembrano davvero rallentare i postgres).
  • Sono pronto ad usare WAL se necessario
  • Sarebbe meglio se posso eseguire il backup solo a livello di database se necessario. Poiché non ho bisogno di eseguire il backup di tutti i dati postgres, solo i database dei clienti.
  • Ho un po 'di spazio su disco sul server postgres che potrebbe mantenere un backup intermedio.
  • Posso permettermi un po 'di carica di CPU ragionevole sul lato VM, ma preferisco minimizzarla sul server di backup in quanto aggiungere il database più sicuro per il backup.
  • Non sto cercando veramente il backup continuo o le opzioni di ripristino PITR. Il mio server di backup ha un sistema basato su file (brfs) per eseguire snapshot periodici efficienti di backup. È abbastanza buono.

Ho pensato:

  • utilizzando rsync in combinazione con pg_dump localmente al server in SQL, ma non sono sicuro di quale formato diverso dovrei utilizzare per mantenere la massima efficienza.
  • utilizzando file system snapshotable che consente di submit diff diffusioni binarie a livello di block (btrfs e ZFS sono buone) con o senza utilizzare un dump locale (stessa domanda sul formato di backup da utilizzare).
  • Ho imparato l'esistenza di pg_rman , non so davvero se può essere affidata, e l'installazione e il process vari sembrano leggermente più pesanti di pg_dump . Sarebbe supportto avere solo backup incrementali? E possiamo avere un formato pratico sul lato di backup?

e c'è un altro modo di backup incrementali per raggiungere la piccola width di banda?

Così … come posso minimizzare la width di banda nel mio scenario di backup postgres ?

2 Solutions collect form web for “Come minimizzare la width di banda in un frequente scenario di backup postgres?”

Stai tentando di risolvere un problema ben praticato (in sisthemes di database reali) utilizzando una soluzione scomoda; questo è comprensibile per la maggior parte delle persone provenienti da uno background in sisthemes di database più piccoli (e ho fatto una cosa molto simile a me stesso con MySQL e sbattuto per le conseguenze della rottura della width di banda).

È necessario utilizzare le funzioni di replica di PostgreSQL; vedi http://www.postgresql.org/docs/9.3/interactive/high-availability.html

Rendere dump in formato sql. Conserva una copia completa su vm locale, diciamo aggiornati each giorno. Quindi scarichi la nuova copia e fai una differenza dalla copia completa. Copia una copia completa una volta al giorno e solo diff in altre occasioni. Per ripristinare dovrai patchare la copia completa con un file sql di diff ed eseguire.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.