Jak mogę bezproblemowo zaktualizować główną wersję bazy danych postgres AWS RDS?


13

Dziś rano byłem zaangażowany w aktualizację bazy danych PostgreSQL na AWS RDS. Chcieliśmy przejść z wersji 9.3.3 do wersji 9.4.4. „Testowaliśmy” aktualizację bazy danych pomostowych, ale baza pomostowa jest znacznie mniejsza i nie używa Multi-AZ. Okazało się, że ten test był dość nieodpowiedni.

Nasza baza danych produkcji wykorzystuje Multi-AZ. W przeszłości dokonaliśmy drobnych aktualizacji wersji, w takich przypadkach RDS najpierw uaktualni tryb gotowości, a następnie wypromuje go do opanowania. Zatem jedynym przestojem jest ~ 60s podczas przełączania awaryjnego.

Zakładaliśmy, że to samo wydarzy się w przypadku głównej aktualizacji wersji, ale och, jak bardzo się myliliśmy.

Kilka szczegółów na temat naszej konfiguracji:

  • db.m3.large
  • Provisioned IOPS (SSD)
  • 300 GB przestrzeni dyskowej, w tym 139 GB
  • Mieliśmy wyjątkowe aktualizacje RDS OS, chcieliśmy wsadowo z tą aktualizacją zminimalizować przestoje

Oto zdarzenia RDS rejestrowane podczas przeprowadzania aktualizacji:

wprowadź opis zdjęcia tutaj

Procesor bazy danych został maksymalny między około 8:44 a 10:27. Wydaje się, że RDS zajmuje dużo czasu, biorąc migawkę przed aktualizacją i po aktualizacji.

Dokumenty AWS nie ostrzegają przed takimi konsekwencjami, chociaż po ich przeczytaniu widać, że oczywistym błędem w naszym podejściu jest to, że nie stworzyliśmy kopii produkcyjnej bazy danych w konfiguracji Multi-AZ i nie próbowaliśmy jej uaktualnić jako próba próbna

Ogólnie rzecz biorąc, było to bardzo frustrujące, ponieważ RDS dostarczył nam bardzo mało informacji o tym, co robi i jak długo może to potrwać. (Ponownie przeprowadzenie próby byłoby pomocne ...)

Poza tym chcemy wyciągnąć wnioski z tego incydentu, więc oto nasze pytania:

  • Czy jest to coś normalnego podczas aktualizacji głównej wersji RDS?
  • Gdybyśmy chcieli w przyszłości dokonać ważnej aktualizacji wersji przy minimalnym przestoju, jak byśmy to zrobili? Czy istnieje jakiś sprytny sposób użycia replikacji, aby uczynić ją bardziej płynną?

Po aktualizacji zauważyliśmy, że postgres próbował wykonać sekwencyjne skanowanie na niektórych tabelach z milionami rekordów, w których powinien był użyć indeksu (w ten sposób przekraczając limit czasu zapytania). Rozwiązał go podręcznik ANALYZEaktualizacji statystyk. Jeśli ktoś ma wgląd w to, to też byłoby świetnie.
jonleighton

Odpowiedzi:


4

To dobre pytanie,
praca w środowisku chmury jest czasem trudna.

Możesz użyć pg_dumpall -f dump.sqlpolecenia, które zrzuci całą bazę danych do formatu pliku SQL, w sposób, który możesz zrekonstruować od zera, wskazując na inny punkt końcowy. Używam psql -h endpoint-host.com.br -f dump.sqlw skrócie.

Aby to zrobić, potrzebujesz instancji EC2 z odpowiednią ilością miejsca na dysku (aby dopasować zrzut bazy danych). Musisz także zainstalować, yum install postgresql94.x86_64aby móc uruchamiać polecenia zrzutu i przywracania.

Zobacz przykłady w PG Dumpall DOC .

Pamiętaj, że aby zachować integralność danych, zaleca się (w niektórych przypadkach będzie to obowiązkowe) zamknięcie systemów łączących się z bazą danych w tym oknie konserwacji.

Ponadto, jeśli potrzebujesz przyspieszyć, rozważ użycie pg_dumpzamiast tego pg_dumpall, korzystając z -j njobsparametru parallelism ( ), kiedy określasz liczbę procesorów zaangażowanych w proces, na przykład -j 8zużywasz do 8 procesorów. Domyślnie zachowanie pg_dumpalllub pg_dumpjest użycie tylko 1. Jedną z zalet używania pg_dumpzamiast tego pg_dumpalljest to, że musisz uruchomić polecenie dla każdej posiadanej bazy danych, a także zrzucić ROLES (grupy i użytkowników) oddzielnie.

Zobacz przykłady na PG Dump DOC i PG Restore DOC .


Aby korzystać z funkcji równoległej, musisz użyć:pg_dump -h host -U user -W pass -Fc -f output_file.dmp -j 8 database_name
Vinnix 10.09.16

... i przywrócić za pomocą równoległości:pg_restore -h host -d database_name -U user -W pass -C -Fc -j 8 output_file.dmp
Vinnix 10.09.16

Czy nie możesz po prostu utworzyć nowej instancji rds z migawki środowiska produkcyjnego?
Uczeń,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.