Сьогодні вранці я брав участь у модернізації бази даних PostgreSQL на AWS RDS. Ми хотіли перейти від версії 9.3.3 до версії 9.4.4. Ми "протестували" оновлення на базі даних, але база даних поетапних робіт значно менша, і не використовує Multi-AZ. Виявилося, цей тест був досить неадекватним.
У нашій виробничій базі використовується Multi-AZ. У минулому ми робили незначні оновлення версій, і в цих випадках RDS спочатку оновить режим очікування, а потім просуне його до майстра. Таким чином, єдиний час простою - 60 років під час відмови.
Ми припускали, що те ж саме станеться і з основним оновленням версії, але о, як ми помилилися.
Деякі деталі про нашу настройку:
- db.m3.large
- Забезпечений IOPS (SSD)
- 300 Гб пам’яті, з них 139 Гб
- У нас були видатні оновлення RDS для ОС, ми хотіли провести збірку з цим оновленням, щоб мінімізувати час простою
Ось RDS події, що реєструються під час оновлення:
CPU бази даних було розміщено приблизно з 08:44 до 10:27. Значну частину цього часу здавалося, що RDS займає знімки попереднього оновлення та після оновлення.
Документи AWS не попереджають про такі наслідки, хоча з їх читання видно, що очевидним недоліком у нашому підході є те, що ми не створили копію виробничої бази в програмі Multi-AZ та намагаємось оновити її як пробний цикл
Загалом, це було дуже неприємно, оскільки RDS дав нам дуже мало інформації про те, що він робить, і скільки часу це може зайняти. (Знову ж, пробний пробіг допоміг би ...)
Крім цього, ми хочемо дізнатися з цього інциденту, ось ось наші питання:
- Це нормально таке, коли робиться велика оновлення версії RDS?
- Якби ми хотіли в майбутньому зробити основне оновлення версії з мінімальним простоєм, як би ми зробили це? Чи є якийсь розумний спосіб використовувати реплікацію, щоб зробити її більш бездоганною?
ANALYZE
для оновлення статистики вирішив це. Якщо хтось має про це розуміння, це теж було б чудово.