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
Antwort
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.)
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.
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
@hgmnz Warum nicht [heroku-pgupgrade] (https://github.com/hgmnz/heroku-pgupgrade) verwenden? – thejaz
@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
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. –