2012-12-28 15 views
12

Jaki jest zalecany sposób aktualizacji bazy produkcyjnej Heroku Postgres do wersji 9.2 z minimalnym przestojem? Czy możliwe jest użycie obserwatora, czy też powinniśmy wybrać trasę pgbackups/snapshots?aktualizacja do PostgreS na Heroku

+0

Ponieważ (najwyżej ocenione) rozwiązanie ma zastosowanie do wersji 9.2 i 9.3, można rozważyć usunięcie numeru wersji z tytułu pytania. –

Odpowiedz

18

Do logical followers in 9.4 będziesz musiał zrzucić i przywrócić (z powodów opisanych przez Craiga). Możesz to uprościć za pomocą pgbackups: transfer. Bezpośredni transfer jest szybszy niż zrzutu i przywracania, ale pamiętaj, że nie będziesz mieć migawki, którą chcesz zachować.

Poniższy scenariusz to w zasadzie Heroku z Using PG Backups to Upgrade Heroku Postgres Databases z modyfikacją dla pgbackups:transfer. (Jeśli istnieje wiele instancji, powiedzmy serwera testowego, należy dodać „-a” lub „--remote” do każdej linii Heroku, aby określić, który serwer.)

# 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 

Zauważ, że jeśli porównać swój rozmiar danych pomiędzy nimi , nowy może być znacznie mniejszy ze względu na wydajność w wersji 9.2. (Moje 9,2 stanowiło około 70% liczby 9.1).

1

Obserwatorzy Heroku to, AFAIK, serwery replikacji strumieniowej PostgreSQL. Oznacza to, że nie możesz ich używać w różnych wersjach, musisz mieć bazy danych kompatybilne z binarnymi.

Te same techniki powinny być stosowane jako zwykłe PostgreSQL, z tym wyjątkiem, że możesz nie być w stanie używać pg_upgrade na Heroku. Wymaga to dostępu do powłoki (ssh, itp.) Jako użytkownika postgres w systemie, który hostuje bazę danych, więc wątpię, czy jest to możliwe na Heroku, chyba że dostarczyłeś narzędzie do uruchomienia dla ciebie pg_upgrade. Nie mogę znaleźć wielu informacji na ten temat.

Najprawdopodobniej będziesz musiał skorzystać z Slony-I, Bucardo lub innego rozwiązania replikacji opartego na wyzwalaczach, aby dokonać aktualizacji, chyba że możesz znaleźć sposób na uruchomienie pg_upgrade w instancji bazy danych Heroku. Ogólną ideą jest skonfigurowanie nowej instancji 9.2, użycie Slony do sklonowania danych z instancji 9.1 do niej, a po ich pełnej synchronizacji zatrzymaj instancję 9.1, usuń wyzwalacze Slony i przełącz klientów na 9.2 wystąpienie.

Wyszukaj więcej informacji na temat "sloganu aktualizacji postgresql" itp., Zobacz, jak idziesz.

+0

Craig ma rację, są to repliki strumieniowe: nie możesz użyć tej trasy do aktualizacji. Obecnie najlepszym podejściem byłoby użycie polecenia pgbackups: transfer dostępnego w wtyczce pg-extras (https://github.com/heroku/heroku-pg-extras#pgbackupstransfer) w celu szybkiego transferu danych (gdy jesteś aplikacja jest w trybie konserwacji). W przyszłości planujemy wspierać łatwiejsze opcje aktualizacji. – hgmnz

+0

@ hgmnz Dlaczego nie używać [heroku-pgupgrade] (https://github.com/hgmnz/heroku-pgupgrade)? – thejaz

+0

@thejaz aha! Cóż, ponieważ jest obecnie w wersji beta i zdarza się, że jest zepsuty (po stronie serwera) aż do odwołania. Gdy będzie gotowy na najlepszy czas, dopilnuję, aby był on zapisany na tym repo. – hgmnz

Powiązane problemy