Избыточность

Мэт Симмонз

Day 13 – Redundancy by Matt Simmons

Original article: http://sysadvent.blogspot.com/2009/12/day-13-redundancy.html
Translated by Ivan Pesin, January 2012

Ну разве вас не бесит, когда посреди полета, пилот вдруг заявляет по громкой связи, что в связи с прискорбным отказом второго двигателя, мы скоро разобьемся, и советует, знаете ли, попробовать найти духовное единение со своим создателем или что-то типа этого?

Но постойте-ка, обычно так не бывает. Что, в общем-то, забавно, потому что двигатели у самолетов отказывает постоянно. Серьезно, это случается так часто, что Федеральное авиационное агентство даже не ведет статистику отказов. Вот тут пилоты прикидывают, что отказы авиадвигателей происходят с частотой от одного раза на каждую тысячу летных часов, до одного раза на каждые десять тысяч часов. Вроде как нечасто. Но так кажется до тех пор, пока вы не примете во внимание, что в любой день, в воздухе над США выполняется около 30 000 коммерческих рейсов. Тем не менее, каждый день, вы просыпаетесь, ходите на работу, читаете новости и не слышите страшных историй про падающие с небес самолеты, хотя есть все шансы, что где-то в этот день у самолета отказал двигатель. Мало того, если вы много летаете, то вполне возможно, что такое случалось и с самолетом на котором вы летели. Только вы про это не узнаете, никто не обязан вам о таком рассказывать.

В этом нет большой проблемы, потому что все самолеты, кроме самых маленьких, имеют несколько двигателей. Даже с отказавшим двигателем, самолет летит как ни в чем не бывало.

Некоторое время назад, авиакомпании обнаружили интересную закономерность. По прихоти статистики, удвоение количества двигателей на самолете ведет к удвоению проблем с ними. Что вполне логично: вы же не улучаете сами двигатели, добавляя их, вы просто увеличиваете вероятность, что один из них откажет. Но, что важно, вы вместе с тем уменьшаете вероятность того, что все двигатели откажут одновременно.

Если бы двигатели переставали работать раз в сто полетов (цифра с потолка и сильно завышенная) и на самолете был только один двигатель, то, понятно, один раз из ста полетов он бы отказывал. К сожалению, этот полет был бы очень захватывающим, не в лучшем значении этого слова, для пассажиров. А вот уже при двух установленных двигателях, хотя отказы двигателей происходили бы каждые 50 полетов, в среднем только один из 10 000 полетов, заканчивался бы трагически. Именно поэтому, большие и тяжелые самолеты, которым для полета требуются два работающих двигателя, имеют целых четыре. Это еще больше уменьшает вероятность возникновения настоящих проблем. Но, как я уже говорил, рейсов-то очень много и, в конце-концов, статистика берет свое. Если вы посмотрите эту ссылку, то узнаете, что в одном из рейсов над Индийским океаном произошло целых пять отказов двигателей. И тем не менее, этот рейс успешно приземлился, благодаря разным бортовым системам безопасности.

Мы, в IT, можем многому поучится у авиационной отрасли. Это одна из немногих областей, где требования к безотказной работе выше, чем у нас. Кроме того, они в деле-то подольше нашего будут. За время своего существования, они кое-чему научились, в том числе тому, что у вас должен быть порядочный запас прочности (читай: избыточность), если вы хотите, чтобы ваш сервис имел действительно высокую доступность.


На самом деле, IT инфраструктура — это набор систем, работающих вместе для предоставления каких-то услуг. Каждая из систем относится к определенной категории, например физической, сетевой или хостовой. Для того, чтобы построить действительно отказоустойчивую инфраструктуру, каждая из категорий должна быть избыточна.К физической категории относятся такие вещи, как местоположение, серверная комната, стойки, электричество. Если вы обратите внимание на последовательность в этом списке, то заметите, что перечисление начинается с самых общих вещей (местоположение) и движется в сторону частного (электричество). Это должно быть отражено в вашем планировании избыточности.

Одного источника питания не достаточно. Любое оборудование зависит от питания, и если происходит отключение — мы приплыли. Для борьбы с этим дата-центры имеют два независимых входа с электричеством от разных подстанций. Каждый сервер имеет по два блока питания, что и обеспечивает избыточность.

Сами дата-центры предоставляют питание от двух отдельных электросистем, каждая со своими аккумуляторными батареями и генераторами. Высококачественные дата-центры для обеспечения надежности используют схемы N+1 и N+2. Это означает, что на каждые N единиц оборудования, необходимого для нормальной работы, у них есть одна (или две) запасная. Самолеты с 2-мя двигателями используют схему N+1, с 4-мя двигателями — N+2.

Если наши системы размещены не в таком дата-центре, нам нужно как-то сымитировать два независимых входа питания. Для этого мы используем источники бесперебойного питания (UPS), которые питаются от обычной электросети и обеспечивают резервное питание от своих батарей в случае отключения электричества в электросети. Это не так хорошо, как два независимых входа питания, но лучше чем ничего.

Сетевая инфраструктура обеспечивает удаленный доступ к нашим ресурсам. Через нее предоставляются сервисы наших организаций, и если сеть ложится, они перестают быть доступны вне зависимости, работают ли сами сервера.

Мы используем многоуровневую защиту, чтобы обеспечить надежное функционирование сети.

Всегда, когда это возможно, нужно использовать два аплинка. В дата-центре это означает дублирование сетевого подключения. В небольших средах это означает, что нужно продублировать минимально необходимые подключения. По возможности, нужно использовать разных провайдеров, чтобы сбой одного из них не влиял на доступность ваших сервисов.

Подключение серверов в локальной сети одним кабелем очень рискованно. Всегда есть риск зацепить и выдернуть провода. Сетевые карты сбоят, а порты на свичах умирают. Сервер станет недоступен в любом из таких случаев. Чтобы избежать возникновения подобных проблем, современные сервера выпускаются с двумя встроенными сетевыми картами. Раньше я не понимал зачем, но потом узнал об объединении интерфейсов (interface bonding).

Конечно, подключить машину двумя кабелями к одному свичу недостаточно. Свичи тоже не слишком надежны. Они иногда сбоят и умирают, а кроме того, все свичи, которые я видел, из низкой и средней ценовой категории, имели только один блок питания, то есть если он умрет (см. выше), то доступ к вашей сети, или серверам, тоже исчезнет. То что покупайте два свича и подключайте сетевые карты одного сервера к разным свичам.

Понятно, что эти советы не ограничиваются ethernet-сетями. Сети хранения данных подвержены тем же проблемам, возможно, даже с более тяжелыми последствиями для ваших данных. Все, известные мне, технологии сетей хранения данных поддерживают функциональность multipath, которая работает аналогично связыванию интерфейсов.

Получив отказоустойчивую инфраструктуру, обеспечивающую функционирование и связывающую наши серверы, нужно задуматься о самих серверах. Как я уже говорил, современные серверы для надежности производятся с дублирующимися частями. Многие BIOS-ы поддерживают зеркалирование ОЗУ, практически любой сервер имеет зеркалирование системного диска. Но, не смотря на все эти предосторожности, сбои все равно происходят. Взрываются конденсаторы на материнских платах, ошибаются люди, а зазеркалированные диски стираются ошибочно введенной командой.

Для защиты от таких происшествий мы дублируем целые системы. Используя подходящее программное обеспечение, можно объединить серверы в кластер так, что они будут работать, как один логический. Это обеспечивает дополнительный уровень избыточности, недоступный для отдельного сервера.

Но даже кластер серверов не поможет в случае катастрофического происшествия.

На картинке выше изображен естественный враг сетевых администраторов. Это оптико-искательный экскаватор, и одного такого достаточно, чтобы разрушить все ваши тщательно продуманные планы. Одним легким движением рычага, его зияющая пасть разрывает самые тяжело бронированные оптические кабеля и лишает интернета целые кварталы города. Пощады не будет ни для какого провайдера. Мыльте веревку.

К счастью, обезопасить себя от этого можно. К несчастью, это непросто и недешево.

Ответом, конечно же, будет второй дата-центр, где-нибудь подальше от вашего основного, с повторением всей вышеописанной инфраструктуры. Похоже на полет в самолете, но с дополнительным самолетом рядом, на всякий случай.

Чтобы построить избыточную и надежную инфраструктуру требуется время и тщательное планирование. Естественно, далеко не каждая организация нуждается в такой инфраструктуре, но если ваша организация в ней нуждается, то ваш долг самому себе и вашей компании построить ее правильно. Потратьте время на то, чтобы изучить варианты, попробовать и поиграться с ними. Это единственный способ стать лучше в том, что вы делаете.

Дополнительное чтение: