Як я можу безперешкодно оновити основну версію післяскресної бази даних AWS RDS?


13

Сьогодні вранці я брав участь у модернізації бази даних 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?
  • Якби ми хотіли в майбутньому зробити основне оновлення версії з мінімальним простоєм, як би ми зробили це? Чи є якийсь розумний спосіб використовувати реплікацію, щоб зробити її більш бездоганною?

Після оновлення ми помітили, що postgres намагається зробити послідовне сканування на деяких таблицях з мільйонами записів, де він повинен був використовувати індекс (таким чином, потрапляючи на час очікування запиту). Посібник ANALYZEдля оновлення статистики вирішив це. Якщо хтось має про це розуміння, це теж було б чудово.
jonleighton

Відповіді:


4

Це гарне питання,
іноді працювати в хмарному середовищі складно.

Ви можете використовувати pg_dumpall -f dump.sqlкоманду, яка скидає всю вашу базу даних у формат файлу SQL. Таким чином, ви можете реконструювати її з нуля, вказуючи на іншу кінцеву точку. Використання psql -h endpoint-host.com.br -f dump.sqlкоротко.

Але для цього вам знадобиться деякий екземпляр EC2 з певним розумним простором на диску (щоб відповідати дампу вашої бази даних). Крім того, вам потрібно буде встановити, yum install postgresql94.x86_64щоб мати змогу запускати команди і відновлювати команди.

Дивіться приклади в PG Dumpall DOC .

Пам’ятайте, що для збереження цілісності ваших даних рекомендується (у деяких випадках це буде обов’язково) вимкнути системи, які підключаються до бази даних під час цього вікна обслуговування.

Крім того, якщо вам потрібно прискорити роботу, подумайте про використання pg_dumpцього pg_dumpall, скориставшись паралелем паралелізму ( -j njobs), коли визначите кількість процесорів, які беруть участь у процесі, наприклад, -j 8буде використовувати до 8 процесорів. За замовчуванням поведінка pg_dumpallабо pg_dumpвикористовується лише 1. Єдина перевага, використовуючи pg_dumpнатомість, pg_dumpallполягає в тому, що вам потрібно буде запустити команду для кожної вашої бази даних, а також скинути ROLES (групи та користувачі).

Дивіться приклади на PG Dump DOC та PG Restore DOC .


Щоб використовувати паралельну функцію, вам знадобиться:pg_dump -h host -U user -W pass -Fc -f output_file.dmp -j 8 database_name
Vinnix

... і відновити, використовуючи паралелізм:pg_restore -h host -d database_name -U user -W pass -C -Fc -j 8 output_file.dmp
Vinnix

Ви не можете просто створити новий екземпляр rds з огляду знімка вашої виробничої програми env?
Учень
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.