2012-12-28 1 views
12

최소한의 중단 시간으로 Heroku Postgres 프로덕션 데이터베이스를 9.2로 업그레이드하는 권장 방법은 무엇입니까? 추종자를 사용할 수 있습니까? 아니면 pgbackups/snapshots 경로를 사용해야합니까?Heroku의 postgres로 업그레이드

+0

(최고 투표로 표시) 솔루션은 9.2 및 9.3에 적용되므로 질문 제목에서 버전 번호를 제거하는 것이 좋습니다. –

답변

18

logical followers in 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 %입니다.)

1

Heroku 추종자는 AFAIK, 단지 PostgreSQL 스트리밍 복제본 서버입니다. 즉, 여러 버전에서 사용할 수 없으므로 바이너리 호환 데이터베이스가 있어야합니다.

Heoku에서 pg_upgrade을 사용할 수 없다는 점을 제외하고는 일반 PostgreSQL과 동일한 기술을 적용해야합니다. 데이터베이스를 호스팅하는 시스템에서 postgres 사용자로 쉘 (ssh 등) 액세스가 필요하므로 pg_upgrade을 실행하는 도구를 제공하지 않으면 Heroku에서 가능하지 않을 수 있습니다. 이것에 대한 많은 정보를 찾을 수 없습니다.

pg_upgrade을 Heroku 데이터베이스 인스턴스에서 실행하는 방법을 찾을 수 없으면 Slony-I, Bucardo 또는 다른 트리거 기반 복제 솔루션을 사용하여 업그레이드를 수행해야합니다. 일반적인 아이디어는 새 9.2 인스턴스를 설정하고 Slony를 사용하여 9.1 인스턴스의 데이터를 복제 한 다음 완전히 동기화되면 9.1 인스턴스를 중지하고 Slony 트리거를 제거하고 클라이언트를 9.2 인스턴스.

"postgresql low downtime upgrade slony"등에 대한 자세한 정보를 찾으십시오. 이동 방법을 참조하십시오.

+0

크레이그가 정확합니다. 스트리밍 복제본입니다. 업그레이드를 위해이 경로를 사용할 수 없습니다. 현재 가장 좋은 방법은 pg-extras 플러그인 (https://github.com/heroku/heroku-pg-extras#pgbackupstransfer)에서 사용할 수있는 pgbackups : transfer 명령을 사용하여 데이터를 신속하게 전송하는 것입니다. 앱이 유지 관리 모드에 있음). 앞으로는 더 쉬운 업그레이드 옵션을 지원할 계획입니다. – hgmnz

+0

@hgmnz 왜 [heroku-pgupgrade] (https://github.com/hgmnz/heroku-pgupgrade)를 사용하지 않습니까? – thejaz

+0

@thejaz aha! 글쎄, 현재 베타 버전이기 때문에 추후 공지가있을 때까지 (서버 측) 문제가 발생합니다. 전성기를 맞이할 준비가되면 해당 리포에서주의해야합니다. – hgmnz