Привіт, DreamHosters!
Нещодавно DreamObjects зазнав тривалого збою. Сервіс був в основному недоступний протягом приблизно шести годин у п’ятницю, 13 червня, і знову протягом другого періоду приблизно чотири години у суботу, 14 червня. Ми хотіли б дати вам деяке уявлення про те, що і чому сталася аварія.
Спочатку, для контексту, давайте обговоримо, як працює DreamObjects. DreamObjects існує як кластер серверів, де кожен сервер має кілька дисків. Більшість серверів у кластері використовують програмне забезпечення під назвою Ceph, яке є розподіленою системою зберігання даних з високим ступенем відмовостійкості.
Розподілена система зберігання — це система, яка зберігає дані на декількох дисках, причому ці диски часто розміщені на різних серверах. Система зберігання, стійка до відмов, здатна впоратися з втратою одного або кількох дисків, або навіть цілих серверів чи стійок серверів, без втрати даних. Ceph (а отже і DreamObjects) є водночас розподіленою та стійкою до відмов. В двох словах, все, що ви надсилаєте нам, записується на трьох дисках, щоб захистити цілісність і довговічність ваших даних.
Це не означає, що кожна машина в кластері має завдання зберігати ваші дані. Деякі – шлюзи – це машини, з якими ви фактично спілкуєтесь через S3 або Swift HTTP API. Ці шлюзи потім відправляють запити від вашого імені машинам, які фактично зберігають дані.
І це призводить нас до кореневої причини збою: коротко кажучи, шлюзи не могли зв’язатися з серверами місця зберігання, і тому сервіс здавався “неактивним”, незважаючи на те, що система місця зберігання активно працювала; зайнята тим, що ваші дані залишались у безпеці.
У п’ятницю була змінена “Карта CRUSH”, яка вказує Ceph, як дані слід розподіляти між серверами та дисками, що становлять DreamObjects. Ці зміни були необхідні, але їх не слід було проводити одразу. Це призвело до того, що так багато даних переміщувалося всередині backend кластера, що запити з шлюзів не могли бути оброблені вчасно. Заради безпеки даних – що є першочерговим завданням будь-якої системи зберігання – Ceph надає пріоритет внутрішньому переміщенню даних над запитами з шлюзів. Наші інженери фактично, і цілком несвідомо, створили внутрішню атаку відмови в обслуговуванні проти DreamObjects. Зміна карти була здійснена в результаті нагальної проблеми з самим кластером Ceph. Однак ця зміна була зроблена поспішно і мала б бути впроваджена повільніше під час запланованого (та анонсованого) технічного обслуговування.
Поломка у п’ятницю погіршилася через помилку в версії Ceph, яку ми використовували в той час. Ця помилка призводила до того, що окремі диски ставали недоступними на повторній основі, що значно збільшувало час відновлення після зміни карти. Близько середини перерви ми вирішили оновити Ceph. Саме це в кінцевому підсумку дозволило кластеру швидше повернутися до нормального стану, ніж це могло бути зазвичай.
У суботу через постійне відновлення кластера було виявлено ще один баг, який також призвів до повторних втрат доступу до окремих дисків. Наші друзі з Inktank люб’язно підготували для нас спеціальну збірку Ceph, щоб вирішити цю проблему.
У короткому підсумку, перебої в роботі DreamObjects були результатом надмірно агресивних змін у налаштуванні Ceph, що ще погіршилися через приховані помилки в Ceph. Врешті-решт, ми змогли швидко вирішити всі проблеми за допомогою Inktank та сам Ceph був покращений завдяки нашим відкриттям. Важливо також відзначити, що базова система зберігання працювала відповідно до розробки, забезпечуючи безпеку даних клієнтів, які ніколи не були під загрозою.
Ми абсолютно зобов’язані забезпечувати високу якість та доступність усіх наших послуг. Команда DreamObjects визначила низку змін у нашому коді, процесах та процедурах, щоб забезпечити, що такі відключення більше не повторяться. Зокрема, інженери з експлуатації будуть проводити аудит змін у “CRUSH map” за допомогою більш строгого процесу перегляду, включаючи зовнішній огляд компанією Inktank, творцями Ceph. Крім того, зміни такого масштабу будуть анонсовані заздалегідь та проводитися у непікові години, щоб зменшити ризик.
Останнє зауваження.
Усі клієнти DreamObjects отримають 10% знижки на свій рахунок за червень 2014 року.
Велика подяка нашим колегам з DreamHost у відділах Центр обробки даних, Технічної підтримки та Хмарних операцій; а також чудовим людям з Inktank, які не втомлювалися відновлювати доступність та захищати дані клієнтів.