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ą?
ANALYZE
aktualizacji statystyk. Jeśli ktoś ma wgląd w to, to też byłoby świetnie.