Привет, DreamHosters!
Недавно DreamObjects столкнулся с продолжительным отключением. Сервис был в основном недоступен в течение приблизительно шести часов в пятницу, 13 июня, и вновь на период приблизительно четырех часов в субботу, 14 июня. Мы хотели бы дать вам некоторое представление о том, что и почему произошло это отключение.
Для начала, чтобы понять контекст, давайте обсудим, как работает DreamObjects. DreamObjects представляет собой кластер серверов, где каждый сервер оснащен несколькими дисковыми накопителями. Большинство серверов в кластере используют программное обеспечение под названием Ceph, которое является распределенной системой хранения данных с возможностью толерантности к ошибкам.
Распределенная система хранения — это система, которая хранит данные на нескольких дисках, причем эти диски часто распределены по нескольким серверам. Отказоустойчивая система хранения — это система, которая может перенести потерю одного или нескольких дисков, или даже целых серверов или стоек серверов, без потери данных. Ceph (и, следовательно, DreamObjects) является одновременно распределенной и отказоустойчивой. Вкратце, все, что вы отправляете нам, записывается на трех дисках для защиты целостности и долговечности ваших данных.
Это не означает, что каждая машина в кластере занимается хранением ваших данных. Некоторые из них — шлюзы — это машины, с которыми вы на самом деле взаимодействуете через HTTP API S3 или Swift. Эти шлюзы затем отправляют запросы от вашего имени машинам, которые на самом деле хранят данные.
И это приводит нас к истокам причины перебоя: в двух словах, шлюзы не могли связаться с серверами backend хранилища, и поэтому сервис казался «недоступным», несмотря на то, что основная система хранения активно работала, заботясь о безопасности ваших данных.
В пятницу было внесено изменение в «Карту 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, которые неустанно работали над восстановлением доступности и защитой данных клиентов.