Хостинг

Отказоустойчивые системы: Принципы работы и практическое применение

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

Команда is*hosting 16 июл 2024 7 мин
Отказоустойчивые системы: Принципы работы и практическое применение

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

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

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

Что такое отказоустойчивость?

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

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

Главные принципы отказоустойчивых систем

Главные принципы отказоустойчивых систем

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

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

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

Типы отказоустойчивых систем

Достичь отказоустойчивости системы можно как путем создания резервных компонентов сервера, так и сформировав систему серверов, которые смогут заменять друг друга. То есть разделяют два типа отказоустойчивых систем по уровню резервирования:

  1. Резервирование на уровне узлов сервера. Этот тип отказоустойчивости предполагает дублирование критически важных компонентов в одном серверном узле. Например, серверный узел может иметь два блока питания, две сетевые карты и два жестких диска. Если один из этих компонентов выходит из строя, серверный узел может продолжить работу с помощью резервного компонента.
  2. Резервирование серверов. Данный тип отказоустойчивости предполагает использование нескольких серверных узлов для создания отказоустойчивого кластера. Если один серверный узел в кластере выходит из строя, другие серверные узлы могут взять на себя его рабочую нагрузку.

Резервирование на уровне узлов сервера менее дорогостоящее и менее сложное, чем создание кластеров. Тем не менее, обеспечение отказоустойчивости на уровне узлов сервера обеспечивает меньшую доступность по сравнению с резервированием сервера (кластеры). Лучший выбор типа отказоустойчивой системы для приложения или проекта будет зависеть от конкретных требований.

В чем разница между отказоустойчивостью и высокой доступностью?

Высокая доступность и отказоустойчивость - не одно и то же понятие.

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

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

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

Что такое отказоустойчивый кластер?

Что такое отказоустойчивый кластер?

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

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

Однако даже имея в своем арсенале отказоустойчивый кластер не стоит забывать о других обязательных техниках защиты данных и всей инфраструктуры.

Отказоустойчивость и аварийное восстановление - это разные понятия, которые довольно тесно связаны. Работая с группой серверов вы должны сохранять способность возобновить работу после прерывания обслуживания.

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

Основные схемы построения отказоустойчивых кластеров

Основные схемы построения отказоустойчивых кластеров

Существует несколько основных схем построения отказоустойчивых кластеров, каждый из которых различается по сложности применения и по распределению нагрузки:

  • Active/passive

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

  • Active/active

Нагрузка отключенного сервера распределяется между другими активными узлами, которые должны быть идентичны по программному и аппаратному обеспечению. Это обеспечивает более высокую доступность, чем Active/passive кластер, но также является более сложным и дорогим в управлении.

  • A+A

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

  • A+1

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

  • A+B

Это вариант схемы кластеризации A+1, в котором пассивный серверный узел не предназначен для обхода отказа. Вместо этого он может использоваться для любых целей, например для выполнения пакетных заданий или предоставления дополнительной мощности.

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

Что нужно для построения отказоустойчивых кластеров?

Что нужно для построения отказоустойчивых кластеров?

Для создания отказоустойчивых систем (кластеров) вам потребуется несколько ключевых компонентов:

  • Избыточная производительность.

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

  • Совместный доступ к данным каждого узла.

Без него невозможно организовать отказоустойчивый кластер. При выходе из строя одного сервера задачи должны мгновенно распределиться между остальными. При этом необходимо обеспечить точно такой же (или предусмотреть резервный) канал к базе данных и к конечным пользователям.

  • Соответствие программного обеспечения.

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

  • Балансировка нагрузки.

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

  • Горизонтальное масштабирование.

Горизонтальное масштабирование предполагает увеличение мощности системы за счет добавления дополнительных серверов или ресурсов. В отказоустойчивом кластере горизонтальное масштабирование можно использовать для повышения производительности и надежности путем добавления в кластер большего количества узлов.

Мы расскажем подробнее о балансировке и масштабировании, которые хоть и расположены последними в списке, но также важны как и другие компоненты.

Балансировка нагрузки

Балансировка нагрузки

Балансировка нагрузки может работать одновременно с отказоустойчивой кластеризацией. При использовании большого числа серверов важно распределять задачи таким образом, чтобы все узлы были загружены примерно одинаково. Иначе одни будут перегружены и не справятся с потоком задач, а другие – наоборот, будут простаивать.

Статическая балансировка нагрузки

Статическая балансировка нагрузки - это простой метод балансировки нагрузки, при котором каждому серверу в отказоустойчивом кластере назначается фиксированное количество запросов.

Статические алгоритмы балансировки:

  1. Балансировка по кругу. Трафик распределяется на серверы по очереди с помощью системы доменных имен (DNS). Авторитетный сервер имен содержит список различных записей A для домена и предоставляет разные записи в ответ на каждый DNS-запрос.
  2. Взвешенная ротация. Администратор может назначить разный вес для каждого сервера. Серверы, которые считаются способными обрабатывать больший трафик, получат немного больше. Весовые коэффициенты можно настроить в записях DNS.
  3. IP-хэш. Алгоритм объединяет IP-адреса источника и назначения входящего трафика и с помощью математической функции преобразует их в хэш. На основе хэша соединение назначается определенному серверу.

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

Выделенный сервер

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

Подробнее

Динамическая балансировка нагрузки

Динамическая балансировка нагрузки уже более сложный метод балансировки нагрузки, который учитывает текущую нагрузку на каждый сервер в кластере и соответствующим образом распределяет запросы.

Алгоритмы динамической балансировки нагрузки:

  1. Наименьшее количество соединений. При этом алгоритме проверяется, на каких серверах в данный момент меньше всего соединений, и направляет трафик на эти серверы. При этом предполагается, что все соединения требуют примерно одинаковой вычислительной мощности.
  2. Взвешенное наименьшее соединение. Дает администраторам возможность назначать различные веса для каждого сервера, предполагая, что некоторые серверы могут обрабатывать больше соединений, чем другие.
  3. Взвешенное время отклика. Время отклика каждого сервера усредняется и комбинируется с количеством активных соединений на каждом сервере, чтобы определить, куда направлять трафик. Направляя трафик на серверы с самым быстрым временем отклика, алгоритм обеспечивает более быстрое обслуживание пользователей.
  4. На основе ресурсов. Алгоритм распределяет нагрузку в зависимости от того, какие ресурсы доступны каждому серверу в данный момент.

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

Горизонтальное масштабирование файлового сервера

Горизонтальное масштабирование файлового сервера

Развертывание отказоустойчивого кластера осложняется при работе с открытыми или непрерывно изменяемыми файлами. Чтобы избежать отсекания отключенных узлов, используется горизонтально-масштабируемый файловый сервер (SOFS, Scale-Out File Server). В случае, если он выходит из строя, кластер продолжает полноценно функционировать.

SOFS обеспечивает высокодоступное файловое хранилище для приложений и общего использования, и они особенно хорошо подходят для хранилища Hyper-V. Масштабируемые файловые узлы позволяют предоставлять общий доступ к одной и той же папке и файлу на нескольких узлах кластера.

Особенности SOFS

Файловые ресурсы работают по схеме active-active - то есть все узлы кластера могут принимать и обслуживать запросы клиентов.

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

Вам не нужно создавать несколько кластерных файловых серверов с отдельными кластерными дисками, а затем разрабатывать политики размещения. Достаточно создать SOFS, а затем добавить CSV и файловые ресурсы.

Тем не менее, SOFS подходит не для всех рабочих нагрузок. Он лучше всего подходит для Hyper-V и данных приложений SQL. Общий файловый ввод-вывод, как в случае с обычными действиями с файлами конечных пользователей общего назначения, не очень подходит для синхронной записи в SOFS.

Отказоустойчивость RAID

RAID (Redundant Array of Independent Disks) - это технология хранения данных, использующая несколько дисков для повышения производительности и надежности. Система RAID может использоваться для создания отказоустойчивых систем хранения данных, способных выдержать отказ одного или нескольких дисков.

RAID использует методы зеркалирования и чередования дисков. При зеркалировании идентичные данные копируются на несколько дисков, а чередование помогает распределить данные по нескольким дискам.

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

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

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

Вопросы производительности и безопасности отказоустойчивых систем

Вопросы производительности и безопасности отказоустойчивых систем

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

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

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

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

Заключение

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

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

VPS

Выбирайте конфигурацию и пользуйтесь всеми преимуществами виртуального приватного сервера.

От $5.00/месяц