Який оптимальний спосіб оновити виробничий екземпляр RDS?


33

У мене є невеликий екземпляр RDS MySQL як частина моєї виробничої системи, і я хочу оновити його до середнього екземпляра за умови IOPS.

Як DBA старої школи я знаю про метод "додати slave; сприяти майстру; переключити клієнтів", але AWS обіцяє надати магічний шлях оновлення одним клацанням, тобто "екземпляр оновлення", "додати наданий IOPS".

Спробував це на тестовому екземплярі RDS, час простою занадто довгий, IMHO: близько 5 хв для невеликого> середнього оновлення та 30 хв (!!!) для переходу на наданий IOPS.

  • Це нормальна поведінка?
  • Чи є спосіб запустити оновлення на виробництво RDS без простоїв?
  • Чи рекомендуєте ви «зупинити; створити знімок; відновити зі знімка до більшого екземпляра»?

Відповіді:


37

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

Здається, є спосіб уникнути цього порушення: розгортання Multi-AZ, яке створює невидиму та недоступну (для вас) репліку в іншій зоні доступності в регіоні.

У разі оновлення системи, наприклад, виправлення ОС або масштабування інстанції БД, ці операції застосовуються спочатку в режимі очікування, перед автоматичним відмовою. Як результат, ваше вплив на доступність обмежується лише часом, необхідним для автоматичного завершення аварійної відмови.

- http://aws.amazon.com/rds/multi-az/

Це повинно забезпечити швидкий та безперебійний шлях міграції, хоча я не мав приводу перевірити цю здатність. З'являється "Змінити" в консолі, щоб ви могли конвертувати екземпляр в Multi-AZ. Імовірно, це призведе до короткого заморожування вводу / виводу, коли клопірується екземпляр, тому я, звичайно, рекомендую протестувати всю цю функціональність, перш ніж спробувати.

Крім того, RDS підтримує внутрішній механізм, який повинен дозволяти емулювати операцію "додати ведений; сприяти створенню; перемикати клієнтів", і це також повинно дозволити вам досягти конверсії часу простою в просторі:

  • Створіть реальну репліку зчитування з RDS з потрібним класом примірника
  • Зачекайте, коли репліка вийде в Інтернет і синхронізується з майстром
  • Змініть конфігурацію репліки, щоб додати передбачений IOPS
  • Зачекайте, коли репліка вийде в Інтернет і синхронізується з майстром
  • Переконайтесь, що обидві системи мають однакові дані за допомогою інструментів сторонніх виробників
  • Відключіть свою програму від старого майстра
  • Перевірте відповідність координат бінарного файлу на master та репліках, щоб переконатися, що всі записи програми повторювалися
  • Розділіть системи за допомогою "Promote Read Replica" на новій репліку в RDS
  • Підключіть свою програму до нового ведучого

http://aws.amazon.com/about-aws/whats-new/2012/10/11/amazon-rds-mysql-rr-promotion/


Михайле, велике спасибі за детальну відповідь! Віталій
Віталій

просування репліки читання до майстра призведе до простою (оскільки екземпляр повинен буде повідомити) ДОГОВІР!
Махмуд Хатеєб

@MahmoudKhateeb дякую Це правильно. Незважаючи на те, що немає технічної причини, чому це необхідно, RDS перезавантажує екземпляр, коли ви просуваєте його для управління. Дійсно, я дізнався набагато більше про те, як працює RDS протягом майже 4-х років (!?), Коли я спочатку написав це. Я буду редагувати зміни.
Майкл - sqlbot

Я роблю це на виробництві в понеділок, тому я можу додати ще щось. Я в основному зміню репліку, щоб вона стала читатись / писати, тоді я збираюся вказати на неї всі свої сервіси, потім буду оновити майстер.
Махмуд Хатеєб

@MahmoudKhateeb з RDS, коли ви рекламуєте репліку, з'єднання з ведучим постійно розривається. Ви не можете знову повернутися до використання старого майстра як майстра. Стара репліка тепер є головним і повинна залишатися таким. Створіть репліку існуючої репліки зараз (RDS підтримує каскади) ... потім оновіть нову та стару репліку за потребою ... потім почніть використовувати нову репліку як виробничу репліку ... потім просувайте свою оригінальну репліку і почніть використовувати його як нового майстра. Викиньте старого господаря.
Майкл - sqlbot

4

Навіть у середовищі з декількома AZ у вас буде відключення 60-120s. Так було, коли я неодноразово потрапляв до наших екземплярів RDS, виконуючи оновлення з PostgreSQL db.m3.medium до db.m3.large.


2

Можливо також уникати простоїв під час оновлення. Спосіб це зробити, коротко запустивши новий RDS із знімка репліки читання та налаштуйте його як активну / активну реплікацію Master на Master. Після налаштування ви можете перемикати трафік додатків на один сервер APP одночасно без простоїв. Ми використовуємо підхід щоразу, коли AWS оголошує технічне обслуговування RDS, щоб уникнути простоїв, а також під час планового обслуговування.

https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2

Ось деталі:

М1 - оригінальний майстер

R1 - Прочитайте репліку M1

SNAP1 - Знімок R1

М2 - новий майстер

Послідовність створення M2: M1 → R1 → SNAP1 → M2

  • Оскільки ми не можемо використовувати привілей SUPER на RDS, ми не використовуємо mysqldump з — master_data2опцією на M1. Замість цього ми запускаємо R1, щоб отримати з нього бінлогічне положення M1 . Потім створіть знімок (SNAP1) з R1, а потім запустіть M2 з SNAP1.

  • Створіть дві окремі групи параметрів RDS із наступними зрушеннями, щоб уникнути конфліктів ПК:

    M1: auto_increment_ increment = 4 and auto_increment_offset = 1

    M2: auto_increment_ increment = 4 and auto_increment_offset = 2

  • Створіть користувача реплікації на M1

    GRANT EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘repl’@’%’ IDENTIFIED BY PASSWORD <secret>;

1. Створіть R1 з M1

-- Connect to the R1 and stop replication
   CALL mysql.rds_stop_replication;
-- Obtain M1’s (!!) current binlog file and position 
        `mysql> show slave status\G
             Master_Log_File: mysql-bin.000622
             Exec_Master_Log_Pos: 9135555

2. Створіть SNAP1 з R1

  • Створіть M2 з SNAP1 з атрибутами, отриманими від M1

  • Призначте групі параметрів M2 з іншим зміщенням auto_increment_ від M1, щоб уникнути конфліктів ключів M / M реплікації

4. Налаштування M / M тиражування

-- Configure M2 as a slave of M1
CALL mysql.rds_set_external_master (‘m1.xyxy24.us-east-1.rds.amazonaws.com’, 3306, repl’, mypassword’, mysql-bin.000622, 9135555, 0);
CALL mysql.rds_start_replication;
-- Connect to M2 and obtain its current binlog file and position
         mysql> show master status\G
            File: mysql-bin.004444
            Position: 6666622
-- Connect to M1 and configure it to be a slave of the M2
CALL mysql.rds_set_external_master (‘m2.xyxy24.us-east-1.rds.amazonaws.com’, 3306 , repl’, mypassword’, mysql-bin.004444, 6666622, 0);
CALL mysql.rds_start_replication;

5. Видаліть R1 та SNAP1, оскільки вони більше не потрібні

6. Оновіть M2 за допомогою консолі AWS

Використовуйте стандартну процедуру, щоб змінити Екземпляр відповідно до ваших потреб.

7. Виконайте витончений перехід на M2

По мірі того, як реплікація M / M налаштована успішно, ми готові продовжувати обслуговування БД без простоїв, граціозно перемикаючи один на один сервери додатків.

Ось докладніше про те, як це працює.

https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2


1

Це буде працювати, однак ви повинні переконатися, що кінцеві точки екземпляра RDS не налаштовані у вашій програмі як статична запис. Заміна RDS змінить кінцеві точки.


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