최소한의 중단 시간으로 Heroku Postgres 프로덕션 데이터베이스를 9.2로 업그레이드하는 권장 방법은 무엇입니까? 추종자를 사용할 수 있습니까? 아니면 pgbackups/snapshots 경로를 사용해야합니까?Heroku의 postgres로 업그레이드
답변
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 %입니다.)
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"등에 대한 자세한 정보를 찾으십시오. 이동 방법을 참조하십시오.
크레이그가 정확합니다. 스트리밍 복제본입니다. 업그레이드를 위해이 경로를 사용할 수 없습니다. 현재 가장 좋은 방법은 pg-extras 플러그인 (https://github.com/heroku/heroku-pg-extras#pgbackupstransfer)에서 사용할 수있는 pgbackups : transfer 명령을 사용하여 데이터를 신속하게 전송하는 것입니다. 앱이 유지 관리 모드에 있음). 앞으로는 더 쉬운 업그레이드 옵션을 지원할 계획입니다. – hgmnz
@hgmnz 왜 [heroku-pgupgrade] (https://github.com/hgmnz/heroku-pgupgrade)를 사용하지 않습니까? – thejaz
@thejaz aha! 글쎄, 현재 베타 버전이기 때문에 추후 공지가있을 때까지 (서버 측) 문제가 발생합니다. 전성기를 맞이할 준비가되면 해당 리포에서주의해야합니다. – hgmnz
(최고 투표로 표시) 솔루션은 9.2 및 9.3에 적용되므로 질문 제목에서 버전 번호를 제거하는 것이 좋습니다. –