Ottieni file WAL dall'istanza PostgreSQL di AWS RDS


18

Abbiamo un'istanza di Postgres RDS su Amazon Web Services. Abbiamo abilitato i backup automatici e realizziamo istantanee su base giornaliera. Vorremmo generare un backup locale "aggiornato" dell'istanza RDS che possiamo gestire noi stessi. L'esecuzione di pg_dump sull'istanza non è sufficiente perché vogliamo essere in grado di ripristinare il database in qualsiasi momento. Preferiremmo avere un backup locale di RDS e di tutti i file WAL da quando è stato eseguito quel backup. Domande:

  1. È possibile accedere ai file WAL e ai backup che RDS sta generando automaticamente nella sua routine di backup? Questo sarebbe l'ideale. Vorrei scaricarne una copia locale. Dopo un'indagine iniziale, ritengo che la risposta a questa domanda sia "no". Sembra che RDS stia archiviando i suoi file WAL e i backup in S3, ma li rende inaccessibili per noi. Mi piacerebbe la conferma.

  2. Esiste un altro modo per accedere alle transazioni (file WAL) verificatesi sull'istanza RDS? Immagino che dovremmo essere in grado di creare un database Postgres su un EC2 e "alimentare" le transazioni dalla nostra istanza RDS "live" primaria in questa istanza EC2. Una volta aggiornata la nostra istanza EC2, potremmo estrarre i file WAL da lì. Che mal di testa, però: / È possibile questa configurazione? Qual è la magia da "alimentare" dalla nostra istanza RDS all'istanza EC2 in modo che sia sempre aggiornata?

Grazie!

Risposte:


17

Aggiornamento: ho postato su questo nei forum AWS - per favore, entra e chiedi lì .


Al momento della scrittura, Amazon RDS non supporta la replica fisica al di fuori di RDS. Puoi GRANTutilizzare gli utenti con il REPLICATIONdiritto utilizzando un rds_superuserlogin, ma non puoi configurare replicationvoci per IP esterni in pg_hba.conf.

Inoltre, quando si crea un gruppo di parametri DB in RDS, alcuni parametri chiave vengono visualizzati ma bloccati, ad esempio archive_command, a cui è bloccato /etc/rds/dbbin/pgscripts/rds_wal_archive %p. AWS RDS per PostgreSQL non sembra esporre questi WAL per l'accesso esterno (diciamo, tramite S3) come sarebbe necessario se si dovesse usare la replica di spedizione WAL per PITR esterno.

Quindi, a questo punto, se si desidera wal-shipping, non utilizzare RDS. È un database in scatola facile da usare, ma facile da usare spesso significa che è anche limitato, e questo è certamente il caso qui. Come sottolinea Joe Love nei commenti, fornisce la spedizione WAL e PITR all'interno di RDS , ma non è possibile accedere a WAL da quello esterno RDS.

Quindi è necessario utilizzare le funzionalità di backup di RDS: dump, istantanee e il proprio PITR basato su WAL.


Anche se RDS ti ha permesso di effettuare connessioni di replica (per pg_basebackupo streaming di replica) e ti ha permesso di accedere a WAL archiviato, potresti non essere in grado di consumare effettivamente quel WAL. RDS esegue un PostgreSQL con patch, anche se nessuno sa quanto sia pesantemente modificato o se altera in modo significativo il formato su disco. Funziona anche con l'architettura selezionata da Amazon, che è probabilmente x64 Linux, ma non facilmente determinabile. Poiché PostgreSQL sul formato del disco e la replica dipendono dall'architettura, è possibile replicare solo su host con la stessa architettura utilizzata da Amazon RDS e solo se la build PostgreSQL era compatibile con la loro.

Tra le altre cose, ciò significa che non hai un modo semplice per migrare da RDS. Dovresti interrompere tutte le scritture nel database abbastanza a lungo per eseguire un pg_dump, ripristinarlo e far funzionare il nuovo DB. I soliti trucchi con replica e failover, con rsync, ecc., Non funzioneranno perché non si ha accesso diretto all'host DB.

Anche se RDS avesse eseguito un PostgreSQL senza patch, Amazon probabilmente non avrebbe voluto permetterti di eseguire lo streaming WAL in RDS o importarlo in RDS pg_basebackupper motivi di sicurezza. PostgreSQL considera la directory dei dati come contenuto attendibile e se hai creato funzioni intelligenti "LANGUAGE c" che agganciano la funzionalità interna o fanno qualsiasi altra cosa complicata potresti essere in grado di sfruttare il server per ottenere un accesso maggiore di quello che dovresti avere . Quindi Amazon non consentirà WAL in entrata in qualunque momento presto.

Potrebbero supportare l'invio di WAL in uscita, ma continuano ad applicarsi i problemi di cui sopra con compatibilità di formato, libertà di apportare modifiche, ecc.


Invece dovresti usare uno strumento come Londiste o Bucardo.


Se RDS non supporta PITR, a cosa serve il pulsante "Ripristina in un determinato momento"?
Joe Love,

1
RDS supporta PITR all'interno di RDS . Non è possibile spedire WAL al di fuori di RDS. Modificherò per renderlo più chiaro in risposta, come posso vedere come avresti potuto leggerlo dicendo che RDS non aveva alcun supporto PITR.
Craig Ringer,


1

La replica che utilizza sistemi basati su trigger come Londiste e Bucardo in entrata e in uscita da RDS è ora supportata dal 10 novembre 2014 , per una risposta su quel thread del forum.

Annuncio qui


1
È utile, ma non è la stessa cosa di cui si parla qui. Stanno aggiungendo il supporto per le repliche logiche basate su trigger come Bucardo e Londiste con RDS. Ciò non aggiunge il supporto per lo streaming "fisico" basato su log utilizzato da hot standby pg_basebackup, ecc. Hanno fatto la scelta migliore possibile, poiché i problemi di sicurezza impediscono loro di supportare realmente la replica fisica.
Craig Ringer,

Ah sì. E grazie per la modifica. Sono arrivato a questa domanda da un altro che chiedeva più genericamente opzioni di replica - avrei dovuto notare che questo fa domande specifiche sui file WAL.
michel-slm,

Quindi, aggiungi anche un link alla domanda correlata. Sarebbe utile comunque.
Craig Ringer,

Ecco qua - pubblicherò anche qui la mia risposta: stackoverflow.com/questions/20468230/…
michel-slm
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.