2012-12-28 14 views
12

Qual è il modo consigliato di aggiornare un database di produzione Heroku Postgres a 9.2 con tempi di inattività minimi? È possibile utilizzare un follower o dovremmo prendere il percorso pgbackups/snapshots?aggiornamento a postgres su Heroku

+0

Poiché la soluzione (più votata) è applicabile a 9.2 e 9.3, si potrebbe prendere in considerazione la rimozione del numero di versione dal titolo della domanda. –

risposta

18

Fino al logical followers in 9.4, è necessario eseguire il dump e il ripristino (per i motivi descritti da Craig). Puoi semplificarlo con pgbackups: transfer. Il trasferimento diretto è più rapido di dump e restore, ma sappi che non avrai un'istantanea da conservare.

Lo script di seguito è in pratica il Using PG Backups to Upgrade Heroku Postgres Databases di Heroku con la modifica per pgbackups:transfer. (Se si dispone di più istanze, per esempio un server di gestione temporanea, aggiungere "-a" o "--remote" per ogni linea di Heroku per specificare quale server.)

# get the pgbackups plugin 
heroku plugins:install git://github.com/heroku/heroku-pg-extras.git 

# provision new db 
heroku addons:add heroku-postgresql:crane --version=9.2 

# wait for it to come online, make note of new color 
heroku pg:wait 

# prevent new data from arriving during dump 
heroku ps:scale worker=0 web=0 
heroku maintenance:on 

# copy over the DB. could take a while. 
heroku pgbackups:transfer OLDCOLOR NEWCOLOR 

# promote new database as default for DATABASE_URL 
heroku pg:promote NEWCOLOR 

# start everything back up and test 
heroku ps:scale worker=N web=N 
heroku maintenance:off 
heroku open 

# remove old database 
heroku addons:remove HEROKU_POSTGRESQL_OLDCOLOR 

Si noti che se si confrontano le dimensioni dei dati tra di loro , il nuovo potrebbe essere molto più piccolo a causa dell'efficienza in 9.2. (Il mio 9.2 era circa il 70% del 9.1.)

1

I follower di Heroku sono, AFAIK, solo server di replica di streaming PostgreSQL. Ciò significa che non è possibile utilizzarli attraverso le versioni, è necessario disporre di database compatibili con i binari.

Le stesse tecniche dovrebbero essere applicate come PostgreSQL ordinario, tranne che potresti non essere possibile utilizzare pg_upgrade su Heroku. Ciò richiede l'accesso shell (ssh, ecc.) Come utente postgres sul sistema che ospita il database, quindi dubito che sia possibile su Heroku a meno che non abbiano fornito uno strumento per eseguire pg_upgrade per te. Non riesco a trovare molte informazioni su questo.

Probabilmente si dovrà guardare con Slony-I, Bucardo, o un'altra soluzione di replica basata su trigger di fare l'aggiornamento a meno che non si può trovare un modo per eseguire pg_upgrade su un'istanza di database Heroku. L'idea generale è di impostare una nuova istanza 9.2, utilizzare Slony per clonare i dati dall'istanza 9.1, quindi una volta che sono completamente sincronizzati, si interrompe l'istanza 9.1, si rimuovono i trigger Slony e si passano i client 9.2 istanza.

Per ulteriori informazioni su "postgresql downtime downtime upgrade downtime" ecc., Vedere come si va.

+0

Craig è corretto, sono repliche di streaming: non è possibile utilizzare questa rotta per l'aggiornamento. Attualmente, l'approccio migliore sarebbe utilizzare il comando pgbackups: transfer disponibile nel plugin pg-extras (https://github.com/heroku/heroku-pg-extras#pgbackupstransfer) per trasferire i dati rapidamente (mentre sei l'app è in modalità manutenzione). In futuro, abbiamo in programma di supportare opzioni di aggiornamento più semplici. – hgmnz

+0

@hgmnz Perché non usare [heroku-pgupgrade] (https://github.com/hgmnz/heroku-pgupgrade)? – thejaz

+0

@thejaz aha! Bene, perché è attualmente in beta, e capita di essere rotto (lato server) fino a nuovo avviso. Una volta pronto per la prima serata, mi assicurerò di prenderlo in nota su quel repository. – hgmnz

Problemi correlati