У цьому питанні є щось цікаве - конкретно щодо ідеї простоїв. Частина ідеї полягає в тому, що якщо програма чутлива до простоїв, тоді також потрібно враховувати час відновлення. (Як крайній аргумент, жодне резервне копіювання не вимагає простоїв, якщо вам не потрібні ці резервні копії, і в цьому випадку час простою може наближатися до нескінченності ).
Трохи про EBS
Обсяги та знімки EBS працюють на рівні блоку - наслідок цього дозволяє робити знімки під час запуску екземпляра, навіть якщо використовується обсяг EBS. Однак у знімок будуть включені лише дані, які є фактично на диску (тобто не є кеш-файлами). Саме остання причина породжує ідею послідовних знімків.
- Рекомендований спосіб - відокремити гучність, зробити знімок і повторно приєднати його - зазвичай це не практично.
- Наступний найкращий варіант передбачає вимивання кеш-пам'яті запису на диск, заморожування файлової системи та знімок
Цікавим моментом є те, що в обох випадках вище, вам не потрібно чекати, коли знімок закінчиться, щоб повторно приєднати / розморозити та відновити запис на диск - після того, як знімок буде ініційований, ваші дані будуть відповідати цьому моменту часу. Зазвичай для цього потрібно лише кілька секунд, протягом яких ваш запис записується заблокованим. Крім того, оскільки більшість баз даних структурують свої файли на диску розумним чином - є велика ймовірність, що вставки мають мінімальний ефект від існуючих блоків - що мінімізує дані, додані до знімка.
Розглянемо пункт резервного копіювання
Томи EBS вже копіюються в зоні доступності - тому вбудована ступінь надмірності. Якщо ваш примірник припиняється, ви можете просто приєднати том EBS до нового екземпляра і (після того, як ви пройдете відсутність узгодженості) відновіть місце, де ви залишився позаду. Багато в чому це робить об'єм EBS дуже схожим на непослідовний знімок, за умови, що ви можете отримати доступ до нього. Зважаючи на це, більшість користувачів EC2, ймовірно, згадують каскадні збої обсягів EBS з початку 2011 року - томи були недоступними протягом декількох днів, а деякі користувачі також втратили дані.
RAID1
Якщо ви намагаєтеся захистити себе від відмови диска EBS (це все-таки трапляється), ви можете розглянути можливість установки RAID1. Оскільки томи EBS є блоковими пристроями, ви можете легко використовувати mdadm для їх налаштування у потрібній конфігурації. Якщо один з ваших томів EBS не виконує технічних характеристик, досить просто його вручну відмовити (а пізніше замінити на інший об'єм EBS). Звичайно, це має і недоліки - збільшений час для кожного запису, більша сприйнятливість до змінної продуктивності, подвоєння вартості вводу / виводу (монетарілія, не ефективність роботи), відсутність реального захисту від більш поширених збоїв AWS (поширена проблема минулого року була неможливість відокремлення томів EBS, які були в заблокованому стані), і звичайно, непослідовний стан диска при відмові.
S3FS
Варіант для певних додатків (безумовно НЕ для баз даних) полягає в монтажі S3 як локальної файлової системи (наприклад, через s3fs). Це повільно, не вистачає деяких функцій, яких можна було б очікувати від файлової системи, і може не вести себе так, як очікувалося (можлива послідовність). Однак, для такої простої мети, як надання завантажених файлів доступними для різних примірників, це може бути заслугою. Очевидно, що це не для нічого, що вимагає гарної продуктивності читання / запису.
MySQL бін-журнал
Ще одним варіантом, характерним для MySQL, може бути використання бін-журналу. Ви можете налаштувати другий том EBS, який буде зберігати ваш бін-журнал (щоб мінімізувати ефект доданих записів на вашу базу даних), і використовувати його в поєднанні з будь-якими скидами баз даних. Ви можете навіть зробити це за допомогою s3fs, що може насправді мати користь, якщо продуктивність буде терпимою (rsync, мабуть, краще, ніж намагатися використовувати s3fs безпосередньо, і ви обов'язково захочете стиснути все, що можете).
Однак ми знову повертаємось до ідеї мети. Поміркуйте, що буде з наведеними вище пропозиціями:
- Обсяги EBS недоступні:
- RAID1 - марний, оскільки ви не можете отримати дані
- bin-log - марний, якщо ви не експортували його в S3 - ймовірно, затримка, хоча якщо ви це зробили
- Примірник припиняється несподівано:
- RAID1 - ваші диски доступні, але не несумісні, ваша база даних може самостійно відновитись від невідповідності
- bin-log - ваші дані повинні бути доступними, хоча вам може знадобитися переглянути останні кілька подій
- Хтось запускає DROP DATABASE як корінь:
- RAID1 - у вас є дві ідеальні копії неіснуючої бази даних
- bin-log - ви повинні мати можливість відтворювати події лише до початку команди, тому вам повинно бути добре
Тож насправді RAID1 здебільшого марний, і bin-log займає занадто багато часу - вони можуть мати заслуги за певних обставин, але вони далекі від резервного копіювання ідеї.
Знімки
Важливо зауважити, що знімки різняться, і зберігають лише фактичні блоки, які містять дані (та стискаються). На відміну від обсягу EBS, де, якщо ви маєте об'єм 20 ГБ, але використовуєте лише 1 ГБ, ви все одно платите за "передбачене" сховище (20 ГБ). За оснащення вам стягується плата лише за те, що ви використовуєте. Якщо дані не змінюються між знімками, плата (теоретично) не стягується. (Знімки стягуються за PUTS / GETS та використані сховища).
На відміну від цього, я настійно рекомендую ваші дані програми (включаючи бази даних) не зберігатись у кореневому томі (який, можливо, ви вже встановили). Однією з переваг є те, що, сподіваємось, ваш кореневий обсяг бачить мінімум змін - це означає, що його знімки можуть бути рідше (або матимуть мінімум змін), зменшуючи вартість та простоту використання.
Також важливо згадати, що ви можете видалити старі знімки в будь-який час - навіть якщо вони відрізняються, вони не вплинуть на інші знімки. Однак, кожен блок, виділений на знімок, не буде відмовлений, поки не буде зроблено знімок, який би посилався на цей блок.
Проблема з періодичними скиданнями - це спочатку час між скидами (можливо, вирішено за допомогою бін-журналу MySQL), а також труднощі відновлення. Потрібен час, щоб імпортувати великий дамп і відтворити всі події з бін-журналу. Крім того, створення дампа не має наслідків для його продуктивності. Можливо, такі сміттєзвалища, ймовірно, потребують набагато більше місця, ніж знімок. Налаштування обсягу EBS виключно для баз даних та знімків, що було б кращим у більшості аспектів (якщо говорити, зроблений знімок також має певний вплив на продуктивність).
Краса знімків та обсягів EBS полягає в тому, що їх можна використовувати в інших випадках. Якщо ваш примірник не завантажується, ви можете приєднати кореневий том до іншого екземпляра, щоб діагностувати та виправити проблему - або просто скопіювати свої дані з неї - і зможете перемикати тони кореня лише за кілька хвилин простою (зупиніть примірник, відключіть кореневий том, додайте новий кореневий том, запустіть екземпляр). Ця ж ідея стосується наявності ваших даних на другому томі EBS. По суті, ви просто розкручуєте новий екземпляр зі свого користувацького AMI і додаєте до нього свій поточний об'єм EBS - це допомагає мінімізувати час простою.
(Можна зробити аргумент (і я, мабуть, не рекомендував би це), що ви можете встановити дві копії MySQL на одному сервері (Master-slave), використовуючи два томи EBS, а потім вимкнути свого раба, щоб зробити його короткий знімок. Обсяг EBS - це буде послідовно, без простоїв - але витрати на продуктивність, мабуть, не варті).
У AWS є автоматичне масштабування - яке зможе підтримувати постійну кількість примірників (навіть якщо це число 1) - однак ви будете розгортатись із знімка - тому, якщо ваш знімок не корисний, то приміщення не має великої користі .
Ще пара пунктів - ви можете розгорнути стільки екземплярів, скільки вам потрібно, з одного знімка (на відміну від тома EBS, який можна приєднати до одного екземпляра в будь-який момент часу). Також обсяги EBS обмежені для використання в зоні доступності, тоді як знімки можна використовувати в межах регіону.
В ідеалі за допомогою знімка, якщо ваш сервер знизиться, ви можете просто запустити новий, використовуючи останній знімок - особливо, якщо ви відокремлюєте кореневий об'єм від своїх даних, погане оновлення повинно призвести до мінімального простою (оскільки ви просто перенесіть об'єм EBS, що містить ваші дані, і зробіть його короткий знімок, щоб зберегти все, що може бути пошкоджено через невідповідність).
В якості додаткового зауваження Amazon заявляє, що рівень відмов обсягів EBS збільшується зі зміною кількості даних, що були змінені на них з моменту останнього знімка.
Заключні рекомендації
- Використовуйте знімки - вони чудові - вони скорочують час простою набагато більше, ніж вони викликають
- Окремі дані та кореневий об'єм, можливо, навіть розміщення баз даних на власному томі та знімок перед необхідними оновленнями, якщо це необхідно
- Використовуйте bin-log, щоб залишатися максимально "гарячим" - завантажте це (стиснуте) на S3
- Переконайтеся, що ви фактично отримуєте дані з екземпляра (навіть якщо дані недоторкані на томі EBS, сам том може бути тимчасово недоступним).
Рекомендоване читання:
(Я вірю, що я написав занадто багато, але недостатньо сказав - але, сподіваюся, ви знайдете щось, що варто прочитати).