2012-12-28 105 views
12
什麼

是升級的Heroku Postgres的生產數據庫到9.2停機時間最短的推薦方法?是否有可能使用追隨者,或者我們應該採取pgbackups /快照路線?升級到在Heroku Postgres的

+0

因爲(最高投票)的解決方案,適用於9.2和9.3,你可以考慮從你的問題標題刪除的版本號。 –

回答

18

直到logical followers in 9.4,你就必須轉儲和恢復(克雷格描述的原因)。你可以用pgbackups來簡化它:transfer。直接傳輸比轉儲和恢復要快,但知道你不會有快照保留。

下面的腳本基本上是Heroku的Using PG Backups to Upgrade Heroku Postgres Databases ,修改爲pgbackups:transfer。 (如果您有多個實例,說臨時服務器,加上「-a」或「--remote」每個Heroku的行指定的服務器。)

# 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。這需要在承載數據庫的系統上以shell(ssh等)的身份作爲postgres用戶訪問,所以我懷疑在Heroku上是可能的,除非他們已經提供了一個工具來爲您運行pg_upgrade。我無法找到關於此的很多信息。

除非您可以找到在Heroku數據庫實例上運行pg_upgrade的方法,否則您可能必須查看使用Slony-I,Bucardo或其他基於觸發器的複製解決方案來執行升級。總的想法是,你設置了一個新的9.2實例,使用Slony將來自9.1實例的數據克隆到它中,然後一旦它們完全同步,就停止9.1實例,刪除Slony觸發器,並將客戶端切換到9.2實例。

搜尋有關「PostgreSQL的低停機升級Slony聚」的更多信息等等,看你怎麼走。

+0

Craig是正確的,他們是流式複製品:您不能使用此路線進行升級。目前,最好的方法是使用pg-extras插件中提供的pgbackups:transfer命令(https://github.com/heroku/heroku-pg-extras#pgbackupstransfer)來快速傳輸數據(當你應用程序處於維護模式)。未來,我們計劃支持更容易的升級選項。 – hgmnz

+0

@hgmnz爲什麼不使用[heroku-pgupgrade](https://github.com/hgmnz/heroku-pgupgrade)? – thejaz

+0

@thejaz aha!那麼,因爲它目前處於測試階段,並且恰好會被破壞(服務器端),直到另行通知。一旦它準備好黃金時間,我會確保在回購上注意它。 – hgmnz