升级Heroku上的PostgreSQL

11

如何以最小化停机时间的方式升级Heroku Postgres生产数据库到9.2版本?是否可以使用follower,还是应该采用pgbackups/snapshots方法?


因为(得票最高的)解决方案适用于9.2和9.3,您可以考虑从问题标题中删除版本号。 - Jared Beck
2个回答

17

直到9.4版本中的逻辑关注者出现,您将不得不进行转储和恢复(原因如Craig所述)。您可以使用pgbackups:transfer来简化此过程。直接传输速度比转储和恢复快,但要知道您将没有快照可供保留。

下面的脚本基本上是Heroku的使用PG Backups升级Heroku Postgres数据库,并针对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%。)

1

据我所知,Heroku 跟随者只是 PostgreSQL 流式复制服务器。这意味着您不能在不同版本之间使用它们,必须拥有兼容的二进制数据库。

与普通 PostgreSQL 相同的技术应该适用,除了您可能无法在 Heroku 上使用 pg_upgrade。这需要作为托管数据库系统的 postgres 用户,在 shell(ssh 等)访问权限下进行。因此,除非他们提供了一个运行 pg_upgrade 的工具,否则在 Heroku 上可能不可能。我找不到太多关于这个问题的信息。

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

搜索更多关于“postgresql低停机时间升级slony”等的信息,看看您能否找到更多信息。


Craig是正确的,它们是流式副本:您无法使用此路线进行升级。目前,最好的方法是使用pg-extras插件中可用的pgbackups:transfer命令(https://github.com/heroku/heroku-pg-extras#pgbackupstransfer)快速传输数据(同时您的应用程序处于维护模式)。在将来,我们计划支持更简单的升级选项。 - hgmnz
@hgmnz 为什么不使用 heroku-pgupgrade - thejaz
@thejaz 哦!因为它目前处于测试版,并且由于服务器端出现问题,直到另行通知才能修复。一旦它准备好投入使用,我会确保在那个仓库上注明。 - hgmnz
逻辑复制在PostgreSQL 9.3中得到了跟进。https://twitter.com/MattRogish/status/279625792877641730 - Turadg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接