如何以最小化停机时间的方式升级Heroku Postgres生产数据库到9.2版本?是否可以使用follower,还是应该采用pgbackups/snapshots方法?
如何以最小化停机时间的方式升级Heroku Postgres生产数据库到9.2版本?是否可以使用follower,还是应该采用pgbackups/snapshots方法?
直到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
据我所知,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”等的信息,看看您能否找到更多信息。