11

以最少的停机时间将 Heroku Postgres 生产数据库升级到 9.2 的推荐方法是什么?是否可以使用追随者,或者我们应该采取 pgbackups/snapshots 路线?

4

2 回答 2

17

9.4 中的逻辑追随者之前,您必须转储和恢复(出于 Craig 描述的原因)。您可以使用 pgbackups:transfer 简化此操作。直接传输比转储和恢复要快,但要知道您没有要保留的快照。

下面的脚本基本上是 Heroku 的Using PG Backups to Upgrade Heroku Postgres Databases ,并修改了pgbackups:transfer。(如果你有多个实例,比如说一个登台服务器,在每个 Heroku 行添加“-a”或“--remote”来指定哪个服务器。)

# 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

请注意,如果您比较它们之间的数据大小,由于 9.2 中的效率,新的可能要小得多。(我的 9.2 大约是 9.1 的 70%。)

于 2013-03-05T14:01:25.127 回答
1

Heroku 追随者是,AFAIK,只是 PostgreSQL 流复制服务器。这意味着您不能跨版本使用它们,您必须拥有二进制兼容的数据库。

与普通 PostgreSQL 相同的技术应该适用,只是您可能无法pg_upgrade在 Heroku 上使用。这需要以托管数据库的系统上的用户身份访问 shell(ssh 等)postgres,所以我怀疑 Heroku 上是否有可能,除非他们提供了pg_upgrade为您运行的工具。我找不到太多这方面的信息。

您可能不得不考虑使用 Slony-I、Bucardo 或其他基于触发器的复制解决方案来进行升级,除非您能找到pg_upgrade在 Heroku 数据库实例上运行的方法。一般的想法是你设置一个新的 9.2 实例,使用 Slony 将数据从 9.1 实例克隆到其中,然后一旦它们完全同步,你就停止 9.1 实例,删除 Slony 触发器,并将客户端切换到9.2 实例。

搜索有关“postgresql 低停机时间升级 slony”等的更多信息,看看你的进展如何。

于 2012-12-31T05:22:33.830 回答