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:
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ą?

ANALYZEaktualizacji statystyk. Jeśli ktoś ma wgląd w to, to też byłoby świetnie.