Время - это деньги. Если сервер простаивает, его владелец теряет прибыль. Современные компании не могут позволить себе простои серверов даже в течение нескольких минут, поскольку это негативно сказывается на их конкурентоспособности. Именно поэтому большинство серверных решений сегодня базируются на отказоустойчивых системах.
Отказоустойчивая кластеризация - это объединение нескольких серверов в группу или кластер. Если один из серверов выходит из строя, его задачи перераспределяются между другими частями кластера. Помимо устранения угрозы неожиданного отказа, системы обхода отказа полезны в случаях, когда необходимо отключить один из серверов для технического обслуживания или других регламентных работ.
В этой статье мы затронем тему отказоустойчивых систем и отказоустойчивости в целом, что позволит улучшить работу с серверами в будущем.
Отказоустойчивость - это способность системы продолжать работу, несмотря на отказ одного или нескольких ее компонентов. В отказоустойчивой системе используются избыточные компоненты, чтобы гарантировать постоянное функционирование системы.
Отказоустойчивость необходима любой системе, к которой предъявляются высокие требования по надежности, например, банковской системе или телекоммуникационной сети. Благодаря использованию методов отказоустойчивые системы могут свести к минимуму риск простоя и потери данных.
Лишь соблюдая конкретные принципы, отказоустойчивые системы могут обеспечить высокую доступность и устойчивость к сбоям. Они позволяют критически важным системам продолжать работу и минимизируют время простоя. Такого уровня надежности можно достичь, следуя следующим принципам:
В силу всех этих особенностей отказоустойчивость подразумевает наличие сложных систем, которые требуют комплексного подхода как к проектированию, так и к содержанию.
Достичь отказоустойчивости системы можно как путем создания резервных компонентов сервера, так и сформировав систему серверов, которые смогут заменять друг друга. То есть разделяют два типа отказоустойчивых систем по уровню резервирования:
Резервирование на уровне узлов сервера менее дорогостоящее и менее сложное, чем создание кластеров. Тем не менее, обеспечение отказоустойчивости на уровне узлов сервера обеспечивает меньшую доступность по сравнению с резервированием сервера (кластеры). Лучший выбор типа отказоустойчивой системы для приложения или проекта будет зависеть от конкретных требований.
Высокая доступность и отказоустойчивость - не одно и то же понятие.
Под высокой доступностью понимается конструкция системы, направленная на минимизацию времени простоя, независимо от причин его возникновения. Отказоустойчивые системы, в свою очередь, могут продолжать работать даже при проявлении определенного количества неисправностей.
При высокой доступности используются многочисленные резервные элементы и системы управления для их активизации и координации. А при отказоустойчивости в работе задействовано множество дублированных элементов и систем управления, чтобы они работали все вместе.
Наличие отказоустойчивой системы не обязательно означает наличие высокодоступной системы, так и наоборот. Однако высокая доступность и отказоустойчивость хорошо сочетаются для создания надежных систем и сервисов.
В отказоустойчивой системе несколько узлов работают вместе, распределяя рабочую нагрузку и выполняя задачи совместно. Если один из узлов или компонентов выходит из строя, кластер должен обнаружить отказ и автоматически передать рабочую нагрузку отказавшего узла другим исправным узлам, тем самым обеспечивая бесперебойную работу. Именно эта способность противостоять сбоям и восстанавливаться после них и делает систему отказоустойчивым.
Отказоустойчивость достигается за счет сочетания избыточности оборудования, программных механизмов и архитектуры системы. Избыточные аппаратные компоненты, такие как серверы, источники питания и сетевые подключения, используются для устранения единых точек отказа, а программные методы, такие как балансировка нагрузки, репликация данных и автоматические механизмы обхода отказа, обеспечивают распределение и репликацию задач между несколькими узлами.
Однако даже имея в своем арсенале отказоустойчивый кластер не стоит забывать о других обязательных техниках защиты данных и всей инфраструктуры.
Отказоустойчивость и аварийное восстановление - это разные понятия, которые довольно тесно связаны. Работая с группой серверов вы должны сохранять способность возобновить работу после прерывания обслуживания.
Это же касается и резервного копирования, которое никогда не бывает лишним при работе с данными. Создавая копии критически важной информации вы можете обеспечить себе своеобразную подушку безопасности, которая избавит вас от повторения работы или даже потери прибыли.
Существует несколько основных схем построения отказоустойчивых кластеров, каждый из которых различается по сложности применения и по распределению нагрузки:
Все вычисления производятся на основном сервере, а дублирующий сервер включается в работу в случае аварии на основном. Такая конфигурация является затратной, так как каждый узел дублируется.
Нагрузка отключенного сервера распределяется между другими активными узлами, которые должны быть идентичны по программному и аппаратному обеспечению. Это обеспечивает более высокую доступность, чем Active/passive кластер, но также является более сложным и дорогим в управлении.
Каждый серверный узел имеет собственное выделенное хранилище. Это обеспечивает еще более высокую доступность, чем традиционный активный/активный кластер, но при этом является более сложным и дорогим в управлении.
В кластере есть один активный серверный узел и один пассивный серверный узел. Активный серверный узел выполняет всю рабочую нагрузку, а пассивный используется для обхода отказа. Однако пассивный серверный узел может также использоваться для обработки части нагрузки. После выполнения своей задачи он снова переходит в статус резервного.
Это вариант схемы кластеризации A+1, в котором пассивный серверный узел не предназначен для обхода отказа. Вместо этого он может использоваться для любых целей, например для выполнения пакетных заданий или предоставления дополнительной мощности.
Важно отметить, что выбор конфигурации зависит от конкретных требований, масштабируемости, бюджетных ограничений и желаемого уровня отказоустойчивости.
Для создания отказоустойчивых систем (кластеров) вам потребуется несколько ключевых компонентов:
Это означает наличие нескольких копий каждого критически важного компонента, например серверов, устройств хранения данных и сетевых соединений. Для перераспределения задач на другие серверы необходимы свободные мощности, и в кластере максимальная нагрузка должна быть ниже, чем доступные ресурсы. Например, если в группу объединены 12 серверов, она не может превышать рабочие возможности 11-ти из них. Это позволит перераспределить задачи отключенного узла без потери мощностей. Важной задачей остается мониторинг производительности серверов.
Без него невозможно организовать отказоустойчивый кластер. При выходе из строя одного сервера задачи должны мгновенно распределиться между остальными. При этом необходимо обеспечить точно такой же (или предусмотреть резервный) канал к базе данных и к конечным пользователям.
Еще на стадии разработки приложений надо учитывать возможность их использования в отказоустойчивых кластерах. Приложения должны уметь работать с общим распределенным хранилищем данных, и перезапускаться на другом узле в состоянии, при котором были в момент сбоя, отсечения сервера внутри кластера.
С помощью некоторых методов распределения рабочей нагрузки между несколькими серверами или ресурсами можно значительно повысить производительность и надежность всей отказоустойчивой системы. В отказоустойчивом кластере балансировка нагрузки необходима для того, чтобы ни один сервер не был перегружен и не вышел из строя.
Горизонтальное масштабирование предполагает увеличение мощности системы за счет добавления дополнительных серверов или ресурсов. В отказоустойчивом кластере горизонтальное масштабирование можно использовать для повышения производительности и надежности путем добавления в кластер большего количества узлов.
Мы расскажем подробнее о балансировке и масштабировании, которые хоть и расположены последними в списке, но также важны как и другие компоненты.
Балансировка нагрузки может работать одновременно с отказоустойчивой кластеризацией. При использовании большого числа серверов важно распределять задачи таким образом, чтобы все узлы были загружены примерно одинаково. Иначе одни будут перегружены и не справятся с потоком задач, а другие – наоборот, будут простаивать.
Статическая балансировка нагрузки - это простой метод балансировки нагрузки, при котором каждому серверу в отказоустойчивом кластере назначается фиксированное количество запросов.
Статические алгоритмы балансировки:
Статическую балансировку легко реализовать, но она может быть неэффективной, если рабочая нагрузка распределена между серверами неравномерно.
Идеальное решение для масштабных проектов. Безупречная защита, высокая производительность и гибкая настройка.
Динамическая балансировка нагрузки уже более сложный метод балансировки нагрузки, который учитывает текущую нагрузку на каждый сервер в кластере и соответствующим образом распределяет запросы.
Алгоритмы динамической балансировки нагрузки:
Динамическая балансировка нагрузки более эффективна, чем статическая, но данный метод также более сложен в реализации, что следует учитывать при создании отказоустойчивых систем.
Развертывание отказоустойчивого кластера осложняется при работе с открытыми или непрерывно изменяемыми файлами. Чтобы избежать отсекания отключенных узлов, используется горизонтально-масштабируемый файловый сервер (SOFS, Scale-Out File Server). В случае, если он выходит из строя, кластер продолжает полноценно функционировать.
SOFS обеспечивает высокодоступное файловое хранилище для приложений и общего использования, и они особенно хорошо подходят для хранилища Hyper-V. Масштабируемые файловые узлы позволяют предоставлять общий доступ к одной и той же папке и файлу на нескольких узлах кластера.
Файловые ресурсы работают по схеме active-active - то есть все узлы кластера могут принимать и обслуживать запросы клиентов.
Пропускная способность и, соответственно, производительность файловых ресурсов с поддержкой SOFS линейно зависят от количества узлов, добавленных в кластер. Вы можете увеличить пропускную способность, просто добавив узлы в кластер.
Вам не нужно создавать несколько кластерных файловых серверов с отдельными кластерными дисками, а затем разрабатывать политики размещения. Достаточно создать SOFS, а затем добавить CSV и файловые ресурсы.
Тем не менее, SOFS подходит не для всех рабочих нагрузок. Он лучше всего подходит для Hyper-V и данных приложений SQL. Общий файловый ввод-вывод, как в случае с обычными действиями с файлами конечных пользователей общего назначения, не очень подходит для синхронной записи в SOFS.
RAID (Redundant Array of Independent Disks) - это технология хранения данных, использующая несколько дисков для повышения производительности и надежности. Система RAID может использоваться для создания отказоустойчивых систем хранения данных, способных выдержать отказ одного или нескольких дисков.
RAID использует методы зеркалирования и чередования дисков. При зеркалировании идентичные данные копируются на несколько дисков, а чередование помогает распределить данные по нескольким дискам.
Можно сказать, что отказоустойчивая система RAID - это разновидность резервирования на уровне узлов сервера, так как она затрагивает именно систему хранения. Поскольку использование большого количества дисков увеличивает среднее время, зарегистрированное между сбоями системы, избыточное хранение данных повышает отказоустойчивость.
В то время как резервное копирование служит страховкой, но требует длительного времени на восстановление, RAID-массив выручает и предоставляет необходимые данные в случае отказа одного или нескольких дисков, исключая время простоя.
Но и у такой системы есть недостатки. Поскольку практически все диски в массиве установлены одновременно, износ оборудования происходит равномерно. Поэтому, если один диск выходит из строя, скорее всего, вскоре выйдут из строя и другие диски. Также RAID является более дорогостоящим решением по сравнению с системами хранения данных с одним диском. Однако вопрос стоимости стоит для любой системы с избыточными ресурсами.
Несмотря на то, что отказоустойчивые системы созданы для продолжения работы даже в случае сбоя, они могут оказывать негативное влияние на общую производительность системы. Избыточность, обнаружение ошибок и системы обхода отказа связаны с дополнительными ресурсными затратами, которые могут привести к снижению пропускной способности. В данном случае необходимо тщательно балансировать между отказоустойчивостью и производительностью.
Для выявления и восстановления после сбоев отказоустойчивые системы часто опираются на сложные программные алгоритмы и протоколы. Кроме того, в отказоустойчивых системах взаимодействие между различными программными компонентами может приводить усложнять процесс устранения неисправностей. Соответственно, на это уходят не только программные и аппаратные ресурсы, но и временные.
На производительность и безопасность отказоустойчивых систем влияет сложность их конструкции. Например, обеспечение отказоустойчивости значительно усложняется в распределенных системах, охватывающих несколько центров обработки данных в различных географических локациях, из-за таких факторов, как сетевая задержка и синхронизация.
Поскольку отказоустойчивая система поддерживает работоспособность всех компонентов и гарантирует их правильную архитектуру, она помогает избежать бреши в системе безопасности. Однако это работает лишь для правильно построенных систем, которые поддерживаются в оптимальном состоянии. Злоумышленник может быстро вывести из строя небрежно сконструированную систему, что будет стоить денежных средств, клиентов и доверия.
Создавая отказоустойчивые системы, организации могут минимизировать время простоя, обеспечить непрерывность бизнеса и предоставить надежные услуги своим пользователям или клиентам. Отказоустойчивость особенно важна для критически важных систем, таких как центры обработки данных, облачные вычислительные среды, финансовые учреждения, телекоммуникационные сети и другие приложения, для которых важна бесперебойная работа.
Постройте серверную инфраструктуру для своего проекта, которая будет устойчива к любым сбоям и отказам компонентов. Достаточно начать с выбора подходящей конфигурации серверов и локаций.