2012-12-28 24 views
12

Was ist der empfohlene Weg, um eine Heroku Postgres Produktionsdatenbank mit minimaler Ausfallzeit auf 9.2 zu aktualisieren? Ist es möglich, einen Follower zu verwenden, oder sollten wir die Route pgbackups/snapshots nehmen?Upgrade auf Postgres auf Heroku

+0

Da die (am besten gewählte) Lösung für 9.2 und 9.3 gilt, könnten Sie in Betracht ziehen, die Versionsnummer aus Ihrem Fragentitel zu entfernen. –

Antwort

18

Bis logical followers in 9.4 müssen Sie dump und wiederherstellen (aus den Gründen, die Craig beschreibt). Sie können dies mit pgbackups vereinfachen: Übertragen. Die direkte Übertragung ist schneller als das Sichern und Wiederherstellen, aber Sie müssen wissen, dass Sie keinen Snapshot behalten müssen.

Das folgende Skript ist im Wesentlichen Herokus Using PG Backups to Upgrade Heroku Postgres Databases mit Änderung für pgbackups:transfer. (Wenn Sie mehrere Instanzen haben, sagen, ein Staging-Server, fügen Sie „-a“ oder „--remote“ zu jeder Heroku Zeile angeben, welche 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 

Beachten Sie, dass, wenn Sie vergleichen Sie Ihre Datengröße zwischen ihnen , der neue kann wegen der Effizienzen in 9.2 viel kleiner sein. (Meine 9.2 war etwa 70% der 9.1.)

1

Heroku-Anhänger sind, AFAIK, nur PostgreSQL-Streaming-Replikatserver. Das bedeutet, dass Sie sie nicht versionsübergreifend verwenden können, Sie müssen binärkompatible Datenbanken haben.

Die gleichen Techniken sollten wie gewöhnliche PostgreSQL gelten, außer dass Sie möglicherweise pg_upgrade auf Heroku nicht verwenden können. Dies erfordert Shell (ssh, etc) Zugriff als postgres Benutzer auf dem System, das die Datenbank hostet, so bezweifle ich, dass es auf Heroku möglich ist, es sei denn, sie haben ein Tool zum Ausführen von pg_upgrade für Sie bereitgestellt. Ich kann dazu nicht viele Informationen finden.

Sie müssen wahrscheinlich Slony-I, Bucardo oder eine andere triggerbasierte Replikationslösung verwenden, um das Upgrade durchzuführen, sofern Sie keine Möglichkeit finden, pg_upgrade auf einer Heroku-Datenbankinstanz auszuführen. Die allgemeine Idee ist, dass Sie eine neue 9.2-Instanz einrichten, Slony verwenden, um Daten von der 9.1-Instanz in diese zu klonen. Sobald sie vollständig synchronisiert sind, stoppen Sie die 9.1-Instanz, entfernen die Slony-Trigger und wechseln zu den Clients 9.2 Instanz.

Suche nach weiteren Informationen über "Postgresql Low Downtime Upgrade-Slony" usw., sehen, wie Sie gehen.

+0

Craig ist korrekt, sie streamen Replikate: Sie können diese Route nicht für das Upgrade verwenden. Momentan wäre der beste Weg, den Befehl pgbackups: transfer zu verwenden, der im Plugin pg-extras (https://github.com/heroku/heroku-pg-extras#pgbackuptransfer) verfügbar ist, um die Daten schnell zu übertragen (solange Sie es sind) App ist im Wartungsmodus). In Zukunft werden wir einfachere Upgrade-Optionen unterstützen. – hgmnz

+0

@hgmnz Warum nicht [heroku-pgupgrade] (https://github.com/hgmnz/heroku-pgupgrade) verwenden? – thejaz

+0

@thejaz aha! Nun, weil es derzeit in der Betaversion ist und es bis auf weiteres kaputt ist (Serverseite). Sobald es für die Primetime fertig ist, werde ich darauf achten, es in diesem Repo zu notieren. – hgmnz

Verwandte Themen