Кластеры что это в компьютере
Перейти к содержимому

Кластеры что это в компьютере

  • автор:

PARALLEL.RU — Информационно-аналитический центр по параллельным вычислениям

Для начинающих пользователей вычислительных кластеров

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

Что такое вычислительный кластер?

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

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

Как запускаются программы на кластере?

Для каждого кластера имеется выделенный компьютер — головная машина (front-end). На этой машине установлено программное обеспечение, которое управляет запуском программ на кластере. Собственно вычислительные процессы пользователей запускаются на вычислительных узлах, причем они распределяются так, что на каждый процессор приходится не более одного вычислительного процесса. Запускать вычислительные процессы на головной машине кластера нельзя.

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

Какая установлена операционная система?

Вычислительный кластер, как правило, работает под управлением одной из разновидностей ОС Unix — многопользовательской многозадачной сетевой операционной системы. В частности, в НИВЦ МГУ кластеры работают под управлением ОС Linux — свободно распространяемого варианта Unix. Unix имеет ряд отличий от Windows, которая обычно работает на персональных компьютерах, в частности эти отличие касаются интерфейса с пользователем, работы с процессами и файловой системы.

Более подробно об особенностях и командах ОС UNIX можно почитать здесь:

  • Инсталляция Linux и первые шаги (книга Matt Welsh, перевод на русский язык А.Соловьева).
  • Учебник по Unix для начинающих.
  • Энциклопедия Linux.
  • Операционная система UNIX (информационно-аналитические материалы на сервере CIT-Forum).
Как хранятся данные пользователей?

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

Какие используются компиляторы?

Никаких специализированных параллельных компиляторов для кластеров не существует. Используются обычные оптимизирующие компиляторы с языков Си и Фортран — GNU, Intel или другие, умеющие создавать исполняемые программы ОС Linux. Как правило, для компиляции параллельных MPI-программ используются специальные скрипты (mpicc, mpif77, mpif90 и др.), которые являются надстройками над имеющимися компиляторами и позволяют подключать необходимые библиотеки.

Как использовать возможности кластера?

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

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

2. Запускать готовые параллельные программы. Для некоторых задач доступны бесплатные или коммерческие параллельные программы, которые при необходимости Вы можете использовать на кластере. Как правило, для этого достаточно, чтобы программа была доступна в исходных текстах, реализована с использованием интерфейса MPI на языках С/C++ или Фортран. Примеры свободно распространяемых параллельных программ, реализованных с помощью MPI: GAMESS-US (квантовая химия), POVRay-MPI (трассировка лучей).

3. Вызывать в своих программах параллельные библиотеки. Также для некоторых областей, таких как линейная алгебра, доступны библиотеки, которые позволяют решать широкий круг стандартных подзадач с использованием возможностей параллельной обработки. Если обращение к таким подзадачам составляет большую часть вычислительных операций программы, то использование такой параллельной библиотеки позволит получить параллельную программу практически без написания собственного параллельного кода. Примером такой библиотеки является SCALAPACK. Русскоязычное руководство по использованию этой библиотеки и примеры можно найти на сервере по численному анализу НИВЦ МГУ. Также доступна параллельная библиотека FFTW для вычисления быстрых преобразований Фурье (БПФ). Информацию о других параллельных библиотеках и программах, реализованных с помощью MPI, можно найти по адресу http://www-unix.mcs.anl.gov/mpi/libraries.html.

4. Создавать собственные параллельные программы. Это наиболее трудоемкий, но и наиболее универсальный способ. Существует два основных варианта. 1) Вставлять параллельные конструкции в имеющиеся параллельные программы. 2) Создавать «с нуля» параллельную программу.

Как работают параллельные программы на кластере?

Параллельные программы на вычислительном кластере работают в модели передачи сообщений (message passing). Это значит, что программа состоит из множества процессов, каждый из которых работает на своем процессоре и имеет свое адресное пространство. Причем непосредственный доступ к памяти другого процесса невозможен, а обмен данными между процессами происходит с помощью операций приема и посылки сообщений. То есть процесс, который должен получить данные, вызывает операцию Receive (принять сообщение), и указывает, от какого именно процесса он должен получить данные, а процесс, который должен передать данные другому, вызывает операцию Send (послать сообщение) и указывает, какому именно процессу нужно передать эти данные. Эта модель реализована с помощью стандартного интерфейса MPI. Существует несколько реализаций MPI, в том числе бесплатные и коммерческие, переносимые и ориентированные на конкретную коммуникационную сеть.

Как правило, MPI-программы построены по модели SPMD (одна программа — много данных), то есть для всех процессов имеется только один код программы, а различные процессы хранят различные данные и выполняют свои действия в зависимости от порядкового номера процесса.

Более подробно об MPI можно почитать здесь:

  • Курс Вл.В.Воеводина «Параллельная обработка данных». Лекция 5. Технологии параллельного программирования. Message Passing Interface.
  • Вычислительный практикум по технологии MPI (А.С.Антонов).
  • А.С.Антонов «Параллельное программирование с использованием технологии MPI».
  • MPI: The Complete Reference (на англ.яз.).
  • Глава 8: Message Passing Interface в книге Яна Фостера «Designing and Building Parallel Programs» (на англ.яз.).
Где можно посмотреть примеры параллельных программ?

Схематичные примеры MPI-программ можно посмотреть здесь:

  • Курс Вл.В.Воеводина «Параллельная обработка данных». Приложение к лекции 5.
  • Примеры из пособия А.С.Антонова «Параллельное программирование с использованием технологии MPI».

Примеры простейших работающих MPI-программ доступны в составе пакета MPICH, свободно распространяемой реализации MPI. Для пользователей НИВЦ МГУ простейшие примеры MPI-программ на Си и Фортране доступны в директории /home/examples/mpi. Примеры использования конструкций MPI в программах на языке Си можно посмотреть в тестах производительности для параллельных компьютеров. Примеры программ на Фортране с комментариями можно посмотреть в англоязычном документе «MPI User’s Guide in Fortran» (формат Word).

Можно ли отлаживать параллельные программы на персональном компьютере?

Разработка MPI-программ и проверка функциональности возможна на обычном ПК. Можно запускать несколько MPI-процессов на однопроцессорном компьютере и таким образом проверять работоспособность программы. Желательно, чтобы это был ПК с ОС Linux, где можно установить пакет MPICH. Это возможно и на компьютере с Windows, но более затруднительно.

Насколько трудоемко программировать вычислительные алгоритмы c помощью MPI и есть ли альтернативы?

Набор функций интерфейса MPI иногда называют «параллельным ассемблером», т.к. это система программирования относительно низкого уровня. Для начинающего пользователя-вычислителя может быть достаточно трудоемкой работой запрограммировать сложный параллельный алгоритм с помощью MPI и отладить MPI-программу. Существуют и более высокоуровневые системы программирования, в частности российские разработки — DVM и НОРМА, которые позволяют пользователю записать задачу в понятных для него терминах, а на выходе создают код с использованием MPI, и поэтому могут быть использованы практически на любом вычислительном кластере.

Как ускорить проведение вычислений на кластере?

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

1. Подбор опций оптимизации компилятора. Подробнее об опциях компиляторов можно почитать здесь:

  • Компиляторы Intel C++ и Fortran (русскоязычная страница на нашем сайте).
  • GCC online documentation.

2. Использование оптимизированных библиотек. Если некоторые стандартные действия, такие как умножение матриц, занимают значительную долю времени работы программы, то имеет смысл использовать готовые оптимизированные процедуры, выполняющие эти действия, а не программировать их самостоятельно. Для выполнения операций линейной алгебры над матричными и векторными величинами была разработана библиотека BLAS («базовые процедуры линейной алгебры»). Интерфейс вызова этих процедур стал уже фактически стандартом и сейчас существуют несколько хорошо оптимизированных и адаптированных к процессорным архитектурам реализаций этой библиотеки. Одной из таких реализаций является свободно распространяемая библиотека ATLAS, которая при установке настраивается с учетом особенностей процессора. Компания Интел предлагает библиотеку MKL — оптимизированную реализацию BLAS для процессоров Intel и SMP-компьютеров на их основе. Тут статья про подбор опций MKL.

Подробнее о библиотеках линейной алгебры (BLAS) можно почитать здесь:

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

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

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

6. Использование наиболее подходящих типов данных. Например, в некоторых случаях вместо 64-разрядных чисел с плавающей точкой двойной точности (double) может быть целесообразным использовать 32-разрядные числа одинарной точности (float) или даже целые числа (int).

Более подробно о тонкой оптимизации программ можно почитать в руководстве по оптимизации для процессоров Intel и в других материалах по этой теме на веб-сайте Intel.

Как оценить и улучшить качество распараллеливания?

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

Важным показателем, который говорит о том, эффективно ли в программе реализован параллелизм, является загрузка вычислительных узлов, на которых работает программа. Если загрузка на всех или на части узлов далека от 100% — значит, программа неэффективно использует вычислительные ресурсы, т.е. создает большие накладные расходы на обмены данными или неравномерно распределяет вычисления между процессами. Пользователи НИВЦ МГУ могут посмотреть загрузку через веб-интерфейс для просмотра состояния узлов.

В некоторых случаях для того, чтобы понять, в чем причина низкой производительности программы и какие именно места в программе необходимо модифицировать, чтобы добиться увеличения производительности, имеет смысл использовать специальные средства анализа производительности — профилировщики и трассировщики. На кластере Ant установлена система для отладки MPI-программ deb-MPI. Краткую информацию по системе можно найти по адресу http://parallel.ru/cluster/deb-MPI-UG.html .—>

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

Вычислительный кластер

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

Серверы кластера обычно соединяются между собой по быстродействующей локальной сети, причем на каждом из серверов работает собственный экземпляр операционной системы. В большинстве случаев все вычислительные узлы кластера используют одинаковое оборудование и одну и ту же операционную систему. Однако в некоторых инсталляциях, например, с использованием платформы приложений для организации кластеров OSCAR (Open Source Cluster Application Resources), могут использоваться различные операционные системы или разное серверное оборудование.

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

Компоненты кластера

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

  • узел доступа;
  • вычислительные узлы;
  • файловый сервер;
  • файловая или объектная СХД с общим доступом;
  • локальная сеть LAN.

Компоненты кластера

Виды кластеров

Различают следующие основные виды кластеров:

  • кластеры высокой доступности (High-availability clusters, HA);
  • кластеры с балансировкой нагрузки (Load balancing clusters);
  • высокопроизводительные кластеры (High performance computing clusters, HPC).

Кластеры высокой доступности

Кластеры высокой доступности НА (high-availability cluster) известны также как отказоустойчивые (failover) кластеры, построенные по схеме сети с большой избыточностью (redundancy). Они применяются для критических серверных приложений, например сервера баз данных. Компьютерный кластер может называться НА-кластером, если он обеспечивает доступность приложений не менее, чем «пять девяток», т. е. приложение должно быть доступно (uptime) в течение 99,999 % времени за год.

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

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

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

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

Кластеры с балансировкой нагрузки

Балансировка нагрузки – это эффективное распределение входящего сетевого трафика в группе (кластере) серверов.

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

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

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

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

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

Работа балансировщика нагрузки

Работа балансировщика нагрузки

Алгоритмы балансировки нагрузки

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

  • Round Robin – запросы распределяются по кластеру серверов последовательно.
  • Least Connections – новый запрос посылается на сервер с наименьшим числом подключений клиентов, однако при этом учитывается и вычислительная мощность каждого сервера.
  • Least Time – запросы посылаются на сервер, выбираемый по формуле, которая комбинирует быстроту ответа и наименьшее число активных запросов.
  • Hash – распределяет запросы на основании определяемого пользователем ключа, например, IP-адреса клиента или URL запрашиваемого сайта.
  • Random with Two Choices – выбираются два сервера по методу произвольного выбора и затем запрос посылается на один из них, который выбирается по критерию наименьшего числа подключений.

Программная и аппаратная балансировка нагрузки

Балансировщики нагрузки бывают двух типов: программные и аппаратные. Программные балансировщики можно установить на любой сервер достаточной для задачи емкости. Поставщики аппаратных балансировщиков просто загружают соответствующее программное обеспечение балансировки нагрузки на серверы со специализированными процессорами. Программные балансировщики менее дорогие и более гибкие. Можно также использовать облачные решения сервисов балансировки нагрузки, такие как AWS EC2.

Высокопроизводительные кластеры (HPC)

Высокопроизводительные вычисления HPC (High-performance computing) – это способность обрабатывать данные и выполнять сложные расчеты с высокой скоростью. Это понятие весьма относительное. Например, обычный лэптоп с тактовой частотой процессора в 3 ГГц может производить 3 миллиарда вычислений в секунду. Для обычного человека это очень большая скорость вычислений, однако она меркнет перед решениями HPC, которые могут выполнять квадриллионы вычислений в секунду.

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

HPC очень важны для прогресса в научных, промышленных и общественных областях.

Такие технологии, как интернет вещей IoT (Internet of Things), искусственный интеллект AI (artificial intelligence), и аддитивное производство (3D imaging), требуют значительных объемов обработки данных, которые экспоненциально растут со временем. Для таких приложений, как живой стриминг спортивных событий в высоком разрешении, отслеживание зарождающихся тайфунов, тестирование новых продуктов, анализ финансовых рынков, – способность быстро обрабатывать большие объемы данных является критической.

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

Чтобы поддерживать высокую скорость вычислений, каждый компонент сети должен работать синхронно с другими. Например, компонент системы хранения должен быть способен записывать и извлекать данные так, чтобы не задерживать вычислительный узел. Точно так же и сеть должна быстро передавать данные между компонентами НРС-кластера. Если один компонент будет подтормаживать, он снизит производительность работы всего кластера.

Существует много технических решений построения НРС-кластера для тех или иных приложений. Однако типовая архитектура НРС-кластера выглядит примерно так, как показано на рисунке ниже.

Архитектура НРС-кластера

Примеры реализации вычислительного кластера

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

Кластер представляет собой сеть из 11 машин с распределенной файловой системой NFS. Общее число ядер CPU в кластере – 61, из них высокопроизводительных – 48. Максимальное число параллельных высокоуровневых задач (потоков) – 109. Общее число ядер графического процессора CUDA GPU – 1920 (NVidia GTX 1070 DDR5 8Gb).

На оборудовании кластера успешно решены задачи анализа больших данных (Big Data): задача распознавания сигнала от процессов рождения суперсимметричных частиц, задача классификации кристаллических структур по данным порошковой дифракции, задача распределения нагрузки электросетей путем определения выработки электроэнергии тепловыми и гидроэлектростанциями с целью минимизации расходов, задача поиска оптимального расположения массива кольцевых антенн и другие задачи.

Архитектура вычислительного кластера

Архитектура вычислительного кластера

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

Графические результаты расчета реактивного двигателя, полученные на НРС-клатере (источник: БГТУ «ВОЕНМЕХ»)

Графические результаты расчета реактивного двигателя, полученные на НРС-клатере (источник: БГТУ «ВОЕНМЕХ»)

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

Вам может быть интересно:

Кластеры: базовые понятия

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

Успехи, достигнутые в кластерных технологиях в последнее десятилетие, позволили использовать для их построения недорогие компьютеры. Экономичность, вычислительная мощность и гибкость таких кластеров сделали их привлекательной альтернативой централизованной модели вычислений на базе традиционных суперкомпьютеров (в дальнейшем под словом «кластер» мы будем понимать массовый продукт, в отличие от «спецзаказа»).

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

Сегодня недорогой кластер из компонентов, находящихся в массовом производстве, может собрать практически любая уважающая себя компьютерная фирма, а с выходом такой кластерной ОС, как Windows Computing Cluster Server 2003, допускающей довольно простую инсталляцию, кластерные решения начального уровня становятся доступными малому и среднему бизнесу. И, пожалуй, не покажется необоснованным предположение, что перманентное снижение цен на аппаратные и программные компоненты и скоростные сетевые технологии вскоре сделают кластеры начального уровня привычным элементом ИС любого масштаба.

Поэтому в Тему недели, посвященную кластерным вычислениям, мы постарались включить не только обзорную часть, но и статьи о конкретных и, несомненно, востребованных в ближайшем будущем украинским бизнесом продуктах. В частности, читатель найдет здесь и практическое занятие, выполненное в нашей Тестовой лаборатории, и описание кластерных ОС Windows Computing Cluster Server 2003/2008, которые имеют все шансы стать популярными.

Прежде всего напомним определение кластера. Так называется локальная (в противоположность распределенной) вычислительная система, состоящая из множества независимых компьютеров, связанных между собой каналами передачи данных. Локальность кластера заключается в том, что все его подсистемы «видны» в едином административном домене, и управление им выполняется как единой вычислительной системой. Компьютеры, входящие в состав кластера, именуются узлами (node). Обычно это серийно выпускаемые универсальные компьютеры, способные работать самостоятельно. Узлы могут быть одно- или мультипроцессорными (конфигурация SMP). В классической схеме все узлы при работе с приложениями разделяют внешнюю память на массиве жестких дисков, используя внутренние HDD для более специальных функций. Для межузлового взаимодействия обычно применяется какая-либо стандартная сетевая технология, хотя это не исключает отдельно разработанных каналов связи. Кластерная сеть является обособленной – она изолирована от внешней сетевой среды.

Классификация

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

Кластеры высокой готовности (High Availability, HA). Иногда их еще называют отказоустойчивыми. Такие кластеры проектируются для обеспечения конечным пользователям бесперебойного доступа к данным или сервисам (в типичном случае – веб-сервисам). Как правило, один экземпляр приложения работает на одном узле, а когда тот становится недоступным, то управление им перехватывается другим узлом (рис. 1). Подобная архитектура позволяет также проводить ремонт и профилактические работы, не останавливая сервисы. Вдобавок, если один узел выходит из строя, сервис может быть восстановлен без ущерба для доступности остальных. Правда, производительность системы понизится.

Кластеры базовые понятия
Рис. 1. Отказоустойчивый кластер

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

Кластеры балансировки нагрузки (Load Balancing). Этот тип кластеров распределяет входящие запросы между множеством узлов, на которых работают одинаковые программы или размещен один и тот же контент (рис. 2). Каждый узел способен обрабатывать запросы к одному и тому же приложению или контенту. Если какой-нибудь из узлов выходит из строя, запросы перераспределяются среди оставшихся. В типичном случае такие кластеры используются для веб-хостинга.

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

Кластеры базовые понятия
Рис. 2. Кластер балансировки нагрузки

Кластеры для высокопроизводительных вычислений (High-Performance Cluster, HPC). Традиционно параллельные вычисления выполнялись на мультипроцессорных системах, специально для этого спроектированных. В них множество процессоров разделяли общую память и шинный интерфейс в пределах одного компьютера. С появлением высокоскоростной коммутационной технологии стало возможным объединять компьютеры в кластеры для параллельных вычислений.

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

Компоненты кластера

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

Узлы

Кластеры базовые понятия
Рис. 3 Кластер для высокопроизводительных вычислений

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

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

В типичном случае узел в кластере может быть управляющим (главным) или вычислительным (подчиненным) (рис. 3). Главный узел может быть только один. Он отвечает за работу кластера, а также является ключевым для кластерного ПО промежуточного слоя, процессов маршрутизации, диспетчеризации и мониторинга состояния каждого вычислительного узла. Последние выполняют вычисления и операции с системой хранения данных. Эти узлы, по сути, представляют собой полнофункциональные автономные компьютеры и, как правило, продаются как десктопы или серверы «из коробки».

Программное обеспечение

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

Типичный эскиз проекта ОС приведен в таблице. На нем показаны базовые блоки традиционного узла. Основная роль кластерной ОС заключается в первую очередь в том, чтобы мультиплексировать множество пользовательских процессов на единый набор аппаратных компонентов (управление ресурсами) и обеспечить пригодные абстракции для высокоуровневого ПО. Некоторые из этих абстракций включают защиту границ памяти, координацию процессов/потоков и коммуникаций и управление устройствами. Нужно отметить, что большинство специфических для кластера функций выполняется ПО промежуточного слоя. И для этого есть основания. Действительно, ОС кластера достаточно сложна, и не всегда ясно, как произведенные изменения повлияют на остальные системы. Поэтому необходимые модификации лучше проводить на уровне ПО промежуточного слоя, причем добавленная в него новая функциональность может быть портирована на другие ОС.

В приведенном определении кластера было упомянуто, что он виден администратору и пользователю как единая вычислительная система. Это достигается с помощью образа единой системы (Single System Image, SSI). Именно он скрывает неоднородную и распределенную природу имеющихся ресурсов и представляет их пользователям и приложениям как единый вычислительный ресурс. SSI может быть реализован на одном или нескольких из следующих уровней: аппаратном, ОС, ПО промежуточного слоя или/и приложения. Вот пример нескольких ключевых сервисов, предоставляемых SSI кластера:

  • единая точка входа;
  • единый пользовательский интерфейс;
  • единое пространство процессов;
  • единое пространство памяти и ввода-вывода;
  • единая иерархия файлов;
  • единая точка контроля и управления.

Такие системы, как Digital/Compaq Memory Channel и Distributed Shared Memory обеспечивают SSI на аппаратном уровне и позволяют пользователям видеть кластер как систему с разделяемой памятью. ОС SCO UnixWare NonStop Cluster, Sun Solaris-MC, GLUNIX и MOSIX поддерживают SSI на уровне ядра.

Реализация SSI на каждом из вышеперечисленных уровней имеет свои pro и contra. Так, аппаратный уровень может предоставить наивысшую степень прозрачности, но из-за жесткой архитектуры он не менее гибок, чем требуется для расширений и улучшений системы. Уровень ядра предоставляет SSI как разработчикам, так и конечным пользователям, однако он слишком дорог и его трудно модифицировать. Основное преимущество уровня приложений по сравнению с уровнем ядра заключается в том, что на первом SSI реализуется поэтапно, и пользователь получает предоставляемые возможности немедленно, тогда как при втором подходе продукт не может выйти на рынок, пока все компоненты ядра не будут поддерживать SSI. Уровень ПО промежуточного слоя является компромиссным между двумя вышеупомянутыми механизмами реализации SSI.

Сетевое оборудование и протоколы

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

Сегодня у разработчиков кластеров имеются широкие возможности для выбора сетевой технологии. Поскольку стоимость сетевого оборудования для кластеров варьируется от «почти даром» до нескольких тысяч долларов на один узел, то таковой может быть не последней составляющей в формировании цены продукта. Практика дает примеры построения весьма эффективных кластеров с использованием недорогого сетевого оборудования, которое можно увидеть в обычной ЛВС. В то же время отдельные сетевые продукты, специально разработанные для кластерных коммуникаций, сравнимы по стоимости с рабочими станциями. Выбор сетевой технологии зависит от ряда факторов: цены, производительности, совместимости с другим кластерным оборудованием и ПО, а также от коммуникационных характеристик приложений, которые будут выполняться на кластере.

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

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

Для кластерных коммуникаций применяются как традиционные сетевые протоколы, разработанные первоначально для Интернета (IP), так и созданные специально. Помимо этого, имеются два относительно новых стандарта, также специально предназначенных для кластеров. Мы не будем останавливаться на достаточно знакомом нашим читателям протоколе IP, равно как и на остальных, поскольку все они довольно специфичны. Перечислим лишь их названия, чтобы интересующиеся могли обратиться либо к литературе, либо к «всезнающему» Интернету. Это, в частности, протоколы Active Messages, Fast Messages, Virtual Memory-Mapped Communication system, U-net и Basic Interface for Parallelism. Обратимся к двум стандартам.

К 1997 г. исследования в области протоколов с низкой латентностью продвинулись настолько, что в итоге привели к созданию нового стандарта для кластерных коммуникаций Virtual Interface Architecture (VIA). Одновременно индустрия работала над стандартами для разделяемых подсистем хранения. Результатом этих усилий явился InfiniBand.

VIA – это коммуникационный стандарт, объединяющий лучшие достижения различных проектов. Он был создан консорциумом академических и индустриальных партнеров, включающим Intel, Compaq и Microsoft. Версия VIA 1.1 с поддержкой гетерогенных аппаратных средств стала доступной в начале 2001 г. Как следует из названия, базируется VIA на концепции виртуального сетевого интерфейса. Стандарт предусматривает, что перед отправкой сообщения приемный и посылающий буфера должны быть выделены и привязаны к физической памяти. После того как буфера и связанные с ними структуры данных сформированы, никаких системных вызовов не требуется. Операции приема и отправки в пользовательском приложении состоят из записи дескриптора в очередь. Приложение может выбирать, ждать ли ему подтверждения завершения операции или продолжать основную работу, пока сообщение обрабатывается.

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

Стандарт InfiniBand был поддержан консорциумом индустриальных партнеров, в том числе Compaq, Dell, HP, IBM, Intel, Microsoft и Sun Microsystems. Архитектура InfiniBand заменяет разделяемую шину, которая является стандартом для системы ввода-вывода в современных компьютерах, высокоскоростной последовательной, базированной на механизме каналов коммутационной фабрикой. Все системы и устройства подключаются к фабрике посредством канального адаптера хоста (Host Channel Adaptor, HCA), который обеспечивает соединение центрального процессора хоста со структурой InfiniBand, или канального адаптера целевого узла (Target Channel Adaptor, TCA), соединяющего InfiniBand с другими устройствами ввода-вывода типа Ethernet, Fibre Channel или с системами хранения данных. Канал InfiniBand дуплексный и работает с пропускной способностью 2,5 Гб/с в одном направлении в топологии «точка-точка». Данные посылаются пакетами, имеется шесть режимов передачи: надежное и ненадежное соединение, надежная и ненадежная дейтаграмма, многоадресная рассылка и необработанные пакеты («сырой» режим). Вдобавок InfiniBand поддерживает удаленный прямой доступ к памяти, который позволяет одному процессору читать или писать в память другого.

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

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

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

Помимо этого, существуют гибридные системы, которые комбинируют особенности нескольких категорий, скажем, InfiniBand позволяет посылать как данные на диск, так и сообщения другим узлам. Аналогично Scalable Coherent Interface (SCI) может также использовать оба механизма обмена.

Кластерные сети

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

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

Giganet (cLAN). Технология cLAN (collapsed LAN), сегодня принадлежащая компании Emulex, была разработана с целью аппаратной поддержки VIA. Это была первая в индустрии нативная аппаратная реализация стандарта VIA. Ключевые особенности сети следующие.

На самом низком уровне коммуникационной модели находится некогерентная распределенная разделяемая память (Distributed Shared Memory, DSM). Часть виртуального адресного пространства приложения логически отображается поверх сети на физическую память в другом узле. Данные передаются между приложениями посредством записи в разделяемую область памяти с помощью стандартных инструкций записи процессора. Буфер в удаленном узле представляется посредством cookie Remote Direct Memory Access, узел-владелец которого получает право доступа к буферу.

Myrinet. Эта дуплексная сеть поставляется компанией Myricom. Она широко используется во многих академических проектах, в частности в Berkeley Network of Workstations (NOW). Физически сеть состоит из двух оптоволоконных кабелей (для нисходящего и восходящего потоков), подключаемых к хосту через общий коннектор. Компьютеры объединяются с помощью маршрутизаторов или коммутаторов (их можно конфигурировать для получения избыточных путей). Поддерживается коммутация без буферизации пакетов (cut-through), которая позволяет передавать сообщения из конца в конец с минимальной задержкой. Myrinet имеет внутриплатный программируемый процессор – он дает возможность экспериментировать со многими коммуникационными протоколами.

В Myrinet реализован ряд механизмов, обеспечивающих отказоустойчивость. К ним относятся управление потоком, контроль ошибок, проверка работоспособности каналов (heartbeat).

Последняя версия, так называемая четвертая генерация Myrinet 10G, поддерживает скорость передачи данных 10 Гб/с в каждом из направлений и совместима с 10 GE на уровне PHY. Латентность сети очень низкая – всего 5 мкс.

QsNet. Эта высокоскоростная с низкой латентностью сеть разработана компанией Quadrics Supercomputers World (QSW). Конструктивно QsNet включает две подсистемы:

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

Сетевой интерфейс базируется на заказных микросхемах, именуемых Elan. Модификация Elan III объединяет выделенный процессор ввода-вывода для разгрузки ЦП, шину PCI (66 МГц, 64 бита), дуплексный канал (400 МГц, 8 бит), устройство управления памятью (MMU), кэш и интерфейс локальной памяти. Микросхема выполняет три типа базовых операций:

  • удаленные чтение и запись;
  • прямую передачу данных из пользовательского виртуального адресного пространства одного процессора другому без необходимости синхронизации;
  • управление протоколом.

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

Модификация сети, выпущенная в 2003 г., основана на шине PCI-X 133 МГц и имеет латентность 1,22 мкс.

Scalable Coherent Interface (SCI). Это первая технология взаимосвязи, разработанная специально для кластерных вычислений, которая была доведена до уровня стандарта. Архитектура SCI базируется на соединениях «точка-точка», пакетах малого размера и расщепленных транзакциях. Стандарт IEEE 1596 был опубликован в 1992 г. и специфицировал физический уровень сети и выше для распределенной по сети разделяемой кэш-когерентной (опциональной) памяти. На более высоких уровнях стандарт описывает распределенную базированную на указателях схему когерентной кэш-памяти. Такая схема позволяет кэшировать удаленную SCI-память: всякий раз, когда данные, расположенные в удаленной памяти, модифицируются, все строки кэша на всех узлах, на которых они хранятся, становятся недействительными. Кэширование удаленной SCI-памяти увеличивает производительность и допускает непосредственное прозрачное программирование разделяемой памяти.

Конечно, это далеко не все технологии, на основе которых можно построить довольно мощный кластер. В кластерах начального уровня, как правило, применяются неспециализированные решения, использующие традиционные сетевые технологии, такие как Ethernet, ATM или Fibre Channel.

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

Базовый эскиз проекта ОС

Userspace System Processes User Processes
not using
the middleware
User Processes using the middleware
Middleware
System Services User Libraries
Kernel Middleware-related Kernel Extentions
Filesystems / Communication / Programmatic Interface
Memory Manager Scheduler Drivers
Hardware Abstraction Layer
Hardware Resourses Timers & Interrupts
RAM CPUs Disks Network Cluster Interconnect Others

Кластеры

Андрей Борзенко По мере развития компьютерной техники и ее интеграции в бизнес-процесс предприятий проблема увеличения времени, в течение которого доступны вычислительные ресурсы, приобретает все большую актуальность. Надежность серверов становится одним из ключевых факторов успешной работы компаний с развитой сетевой инфраструктурой, например, электронных магазинов, ведущих продажи через Интернет, крупных предприятий, в которых специальные системы осуществляют поддержку производственных процессов в реальном времени, банков с разветвленной филиальной сетью или центров обслуживания телефонного оператора, использующих систему поддержки принятия решений. Всем таким предприятиям жизненно необходимы серверы, которые работают и предоставляют информацию 24 часа в день семь дней в неделю (24в7 в 365). Стоимость поломок и простоя оборудования постоянно растет. Она складывается из стоимости потерянной информации, потерянной прибыли, стоимости технической поддержки и восстановления, неудовлетворенности клиентов и т. д. Имеются методики, позволяющие вычислить стоимость минуты простоя и затем на основе этого показателя выбрать наиболее выгодное решение с наилучшим соотношением функциональности и цены. Существует немало средств для построения надежной системы. Дисковые массивы RAID, например, позволяют не прерывать обработку запросов к информации, хранящейся на дисках, при выходе из строя одного или нескольких элементов массива. Резервные блоки питания в ряде случаев позволят в какой-то степени застраховаться на случай отказа других компонентов. Источники бесперебойного питания поддержат работоспособность системы в случае сбоев в сети энергоснабжения. Многопроцессорные системные платы обеспечат функционирование сервера в случае отказа одного процессора. Однако ни один из этих вариантов не спасет, если из строя выйдет вся вычислительная система целиком. Вот тут на помощь приходит кластеризация. Пожалуй, первым шагом к созданию кластеров можно считать широко распространенные в пору расцвета мини-компьютеров системы «горячего» резерва. Одна или две такие системы, входящие в сеть из нескольких серверов, не выполняют никакой полезной работы, но готовы начать функционировать, как только выйдет из строя какая-либо из основных систем. Таким образом, серверы дублируют друг друга на случай отказа или поломки одного из них. Но при объединении компьютеров желательно, чтобы они не просто дублировали друг друга, но и выполняли другую полезную работу, распределяя нагрузку между собой. Для этого во многих случаях как нельзя лучше подходят кластеры. Изначально кластеры использовались для мощных вычислений и поддержки распределенных баз данных, особенно таких, для которых требуется повышенная надежность. В дальнейшем их стали применять для сервиса Web. Однако снижение цен на кластеры привело к тому, что подобные решения все активнее используют и для других нужд. Кластерные технологии наконец-то стали доступны рядовым организациям — в частности, благодаря использованию в кластерах начального уровня недорогих серверов Intel, стандартных средств коммуникации и распространенных ОС. Кластерные решения на платформах Microsoft ориентированы прежде всего на борьбу с отказами оборудования и ПО. Статистика отказов подобных систем хорошо известна: только 20% из них непосредственно вызвано отказами оборудования, ОС, питания сервера и т. п. Для исключения этих факторов применяются различные технологии повышения отказоустойчивости серверов (резервируемые и заменяемые в горячем режиме диски, источники питания, платы в разъемах PCI и т. д.). Однако 80% оставшихся инцидентов вызваны обычно отказами приложений и ошибками оператора. Кластерные решения — действенное средство для решения этой проблемы. В ряде случаев привлекательность кластера во многом определяется возможностью построить уникальную архитектуру, обладающую достаточной производительностью, устойчивостью к отказам аппаратуры и ПО. Такая система к тому же должна легко масштабироваться и модернизироваться универсальными средствами, на основе стандартных компонентов и за умеренную цену (несравненно меньшую, чем цена уникального отказоустойчивого компьютера или системы с массовым параллелизмом). Термин «кластер» имеет множество определений. Одни во главу угла ставят отказоустойчивость, другие — масштабируемость, третьи — управляемость. Классическое определение кластера звучит примерно так: «кластер — параллельная или распределенная система, состоящая из нескольких связанных между собой компьютеров и при этом используемая как единый, унифицированный компьютерный ресурс». Таким образом, кластер представляет собой объединение нескольких компьютеров, которые на определенном уровне абстракции управляются и используются как единое целое. На каждом узле кластера (по сути, узел в данном случае — компьютер, входящий в состав кластера) находится своя собственная копия ОС. Напомним, что системы с архитектурой SMP и NUMA, имеющие одну общую копию ОС, нельзя считать кластерами. Впрочем, узлом кластера может быть как однопроцессорный, так и многопроцессорный компьютер, причем в пределах одного кластера компьютеры могут иметь различную конфигурацию (разное количество процессоров, разные объемы ОЗУ и дисков). Узлы кластера соединяются между собой либо с помощью обычных сетевых соединений (Ethernet, FDDI, Fibre Channel), либо посредством нестандартных специальных технологий. Такие внутрикластерные, или межузловые соединения позволяют узлам взаимодействовать между собой независимо от внешней сетевой среды. По внутрикластерным каналам узлы не только обмениваются информацией, но и контролируют работоспособность друг друга. Более широкое определение кластера предложили эксперты Aberdeen Group (http://www.aberdeen.com ): кластер в их понимании — это система, действующая как одно целое, гарантирующая высокую надежность, имеющая централизованное управление всеми ресурсами и общую файловую систему и, кроме того, обеспечивающая гибкость конфигурации и легкость в наращивании ресурсов.

Преимущества кластеризации

  • базы данных;
  • системы управления ресурсами предприятия (ERP);
  • средства обработки сообщений и почтовые системы;
  • средства обработки транзакций через Web и Web-серверы;
  • системы взаимодействия с клиентами (CRM);
  • системы разделения файлов и печати.

Как устроен кластер

Итак, кластер объединяет несколько серверов, соединенных между собой специальным коммуникационным каналом, часто называемым системной сетью. Узлы кластера контролируют работоспособность друг друга и обмениваются специфической информацией, например, о конфигурации кластера, а также передают данные между общими накопителями и координируют их использование. Контроль работоспособности осуществляется с помощью специального сигнала heartbeat («сердцебиение», или «пульс»), который узлы кластера передают друг другу, чтобы подтвердить свое нормальное функционирование. Если в небольших кластерах heartbeat-сигналы передаются по тем же каналам, что и данные, то в крупных системах для этого выделяются специальные линии, так как кластерное ПО должно получать сигнал «сердцебиения» каждого сервера с определенным временным интервалом — в случае его неполучения сервер считается неработающим и кластер автоматически переконфигурируется. Также автоматически разрешаются конфликты между серверами, когда при запуске кластера возникает проблема выбора «ведущего» сервера или группы серверов, задача которых — сформировать новый кластер.

В качестве коммуникационного канала кластера могут использоваться обычные сетевые технологии (Ethernet, Token Ring, FDDI, АТМ), разделяемые шины ввода/вывода (SCSI или PCI), высокоскоростной интерфейс Fibre Channel или специализированные технологии CI (Computer Interconnect), DSSI (Digital Storage System Interconnect) или Memory Channel. DSSI-интерфейс предназначен для доступа к накопителям и для взаимодействия систем между собой. Он похож на мультихостовый протокол SCSI-2, но обладает большей производительностью и возможностью организации взаимодействия компьютеров. DSSI-кластеры поддерживают средства повышения надежности системы, разделение ресурсов, распределенную файловую систему и прозрачность. С точки зрения управления и обеспечения безопасности DSSI-кластер представляется единым доменом.

CI-интерфейс — двойная последовательная шина со скоростью обмена до 70 Мбит/с. Он подключен к системе ввода-вывода компьютера посредством интеллектуального контроллера, способного поддерживать работу как с двойной, так и с одинарной шиной, в зависимости от требований к надежности доступа для конкретного компьютера. Все линии связи CI-интерфейса одним концом соединены с CI-интегратором — специальным устройством, отслеживающим соединения с узлами и конфигурации кластера.

Высокоэффективная коммуникационная технология Memory Channel обеспечивает высокоскоростной (до 100 Мбайт/с) обмен сообщениями между серверами в кластере.

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

Кластерные конфигурации

Кластерных конфигураций существует огромное количество. Некоторые решения представляют собой объединение нескольких кластеров, да еще вместе с дополнительными устройствами. Разные варианты отвечают требованиям разных приложений и, естественно, различаются по стоимости и сложности реализации. Известны такие топологии кластеров, как звезда, кольцо, N-N и т. п. Тем не менее, каким бы экзотическим ни был кластер, его можно квалифицировать в соответствии с двумя критериями. Первый из них характеризует оперативную память узлов кластера. Здесь возможны два варианта: либо все узлы кластера имеют независимую оперативную память, либо у них существует общая разделяемая память. Второй критерий характеризует степень доступности устройств ввода-вывода, прежде всего — дисков. Понятие кластеров с разделяемыми дисками подразумевает, что любой узел имеет прозрачный доступ к файловой системе общего дискового пространства. Разумеется, помимо разделяемой дисковой подсистемы на узлах кластера могут иметься локальные диски, но в этом случае они используются главным образом для загрузки ОС на узле. Такой кластер должен иметь специальную подсистему, называемую распределенный менеджер блокировок (Distributed Lock Manager, DLM), для устранения конфликтов при одновременной записи в файлы с разных узлов кластера.

Рис. 1. Кластер из двух узлов.

Рис. 2. Кластер «активный — резервный».

В системах, где нет DLM, приложения не могут параллельно работать с одними и теми же данными, и общая дисковая память, если таковая имеется, назначается одному из узлов в конкретный момент времени. Таким образом, в кластерах, которые не поддерживают одновременного доступа к внешней памяти, все узлы представляют собой полностью автономные серверы. В случае двух узлов доступ к общей памяти на дисках осуществляется с помощью разделенной шины ввода-вывода (рис. 1). Для каждого узла такая шина заканчивается в дисковом массиве. В каждый момент времени только один узел владеет общей файловой системой. Если один из серверов выйдет из строя, контроль над шиной и разделяемыми дисками переходит к другому узлу.

Схема построения кластера «активный — резервный» (рис. 2) представляет собой решение для компании, имеющей интегрированную информационную систему, где лишь часть ресурсов задействована для выполнения критичных по надежности приложений. В такую систему в простейшем случае входят активный сервер, выполняющий наиболее важные приложения, и резервная машина, которая решает менее ответственные задачи. При сбое активного сервера все его приложения автоматически переносятся на резервный, где приложения с низшим приоритетом прекращают функционировать. Такая конфигурация позволяет исключить замедление работы критичных приложений — пользователи просто не заметят никаких изменений. Частный случай этой схемы — конфигурация «пассивный — резервный», в которой резервный сервер не несет никакой нагрузки и находится в режиме ожидания.

Конфигурация «активный — активный» подразумевает исполнение всеми серверами кластера отдельных приложений одинаково высокого приоритета. Иными словами, вычислительные ресурсы резервного сервера используются в повседневной работе. Преимущество такого подхода состоит в том, что пользователь имеет в своем распоряжении высокодоступную систему (сервер продублирован) и в то же время может использовать все вычислительные ресурсы кластера. Это позволяет уменьшить общую стоимость системы, отнесенную к единице вычислительной мощности. Приложения при сбое переносятся с неработающей машины на оставшиеся, что, конечно, сказывается на общей производительности. Кластеры «активный — активный» могут существовать только в качестве выделенных систем, на которых нельзя запускать низкоприоритетные задачи типа поддержки офисной работы.

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

Рис. 3. Кластер без разделяемых ресурсов.

Рис. 4. Кластер с разделяемыми ресурсами.

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

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

В случае полного разделения ресурсов (рис. 4) все серверы в кластере имеют одновременный доступ к одному и тому же диску. Этот подход подразумевает наличие тщательно разработанного ПО, обеспечивающего множественный доступ к одному носителю. Как и в предыдущем случае, диски здесь могут быть единой точкой сбоя, поэтому без RAID-массивов и здесь не обойтись. В данном варианте отпадает необходимость в постоянной синхронизации данных между серверами. Тем самым высвобождаются дополнительные вычислительные и сетевые ресурсы.

Программное обеспечение

Все выполняемые кластером программы можно условно подразделить на несколько категорий. На любом узле кластера можно запустить практически любую обычную программу. Более того, одну и ту же программу можно запускать на разных узлах кластера. Однако каждая копия программы должна использовать свой собственный ресурс (файловую систему), поскольку файловая система закрепляется за конкретным узлом. Помимо обычного ПО для кластеров существуют так называемые истинно кластерные приложения. Такие программы как бы разносятся по узлам кластера, а между частями программы, функционирующими на разных узлах, организуется взаимодействие. Истинно кластерные программы позволяют распараллелить нагрузку на кластер. Промежуточную позицию занимают приложения, рассчитанные на работу в кластере. В отличие от истинно кластерных программ, в них явный параллелизм не используется; фактически программа является обычной, но она может задействовать некоторые возможности кластера, в первую очередь связанные с миграцией ресурсов.

Специальное ПО — вот что объединяет серверы в кластеры. Многие современные корпоративные приложения и ОС имеют встроенную поддержку кластеризации, но бесперебойное функционирование и прозрачность кластера может гарантировать специальное ПО промежуточного уровня. Оно отвечает в первую очередь за слаженную работу всех серверов и разрешение возникающих в системе конфликтов, обеспечивая формирование и реконфигурацию кластера после сбоев. Кроме того, ПО промежуточного уровня обеспечивает распределение нагрузки по узлам кластера, восстановление работы приложений сбойных серверов на доступных узлах (failover — процедура миграции), а также мониторинг состояния аппаратной и программной сред. Существует и еще одно важное достоинство этого ПО: оно позволяет запускать на кластере любое приложение без предварительной адаптации к новой аппаратной архитектуре.

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

Основные требования к кластерным решениям

Кроме повышенной надежности и быстродействия, есть еще несколько дополнительных требований, предъявляемых к кластерам в современных вычислительных системах. Они, в частности, должны обеспечивать единое внешнее представление системы, высокую скорость резервного копирования и восстановления данных и параллельный доступ к БД, обладать возможностями переноса нагрузки с аварийных узлов на исправные, иметь средства настройки высокого уровня готовности, гарантировать восстановление после аварии. По понятным причинам использование нескольких узлов кластера, которые одновременно обращаются к одним и тем же данным, увеличивает сложность процедуры резервного копирования и последующего восстановления информации. Перенос нагрузки с аварийного узла на исправный — это основной механизм обеспечения непрерывной работы приложений при условии оптимального использования ресурсов кластера. Для эффективной совместной работы кластерных систем и СУБД система должна иметь распределенный менеджер блокировок, обеспечивающий непротиворечивое изменение базы данных при поступлении последовательности запросов с разных узлов кластера. Настроить конфигурацию кластера и обеспечить высокую доступность приложений также непросто. Это связано в первую очередь со сложностью определения правил, по которым те или иные приложения переносятся с аварийных узлов кластера на исправные. Кластерная система должна позволять легко переносить приложения с одного узла кластера на другой, а также восстанавливать аварийное приложение на другом узле.

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

Предложения на рынке

Сегодня практически все ведущие компьютерные компании, такие как Compaq, Dell, Hewlett-Packard, IBM, Sun Microsystems, предлагают собственные кластерные решения. В частности, лидирующие позиции в сегменте UNIX-кластеров занимает IBM, которая активно продвигает свою базу данных DB2. Уверенно чувствует себя на этом рынке и Sun со своим решением Sun Cluster.

По мнению экспертов компании D.H. Brown Associates (http://www.dhbrown.com), проводящей тестирование кластерных решений, в прошлом году одним из наиболее активных игроков — как по числу сертифицированных для кластеров платформ, так и по разнообразию самих кластерных решений — была корпорация Compaq (http://www.compaq.com). Она предлагала практически полный ассортимент кластеров на платформах Windows NT/2000 — для отдела или удаленного филиала, для применений в инфраструктуре корпорации и для крупных центров обработки данных. Кроме того, исследования D.H. Brown Associates показали, что кластерное решение Compaq TrueCluster Server максимально удовлетворяет современным требованиям, предъявляемым компаниями к подобной технологии.

Пионером создания кластерных архитектур вообще и кластеров БД в частности была корпорация Digital Equipment (позже ставшая частью Compaq), в начале восьмидесятых предложившая коммерческую реализацию кластеров мини-компьютеров под управлением ОС DEC VMS. Кроме того, Compaq достаточно долгое время вела совместные с Oracle работы по созданию и использованию инфраструктур высокой доступности, реализующих характерные для мэйнфреймов возможности обработки баз данных при более низкой цене. Например, еще в 1988 г . они выпустили продукт Oracle Parallel Server (OPS), работающий на кластерах VAXcluster и обеспечивающий уровень масштабируемости, надежности и целостности данных, которого раньше можно было добиться только на мэйнфреймах. В рамках этого пионерского партнерства были созданы технологии, ставшие затем объектом широкого подражания. Сегодня они доступны во всех основных версиях UNIX, а также в Windows. В 2001 г . это долгосрочное партнерство вновь активизировалось с выпуском Oracle9i RAC (Real Application Cluster). Новое ПО позволяет устанавливать базу данных на нескольких связанных вместе серверах. Необходимость в таком объединении возникает, например, если требуется большая емкость или нужно сократить время простоя в случае сбоя на сервере, что достигается за счет переноса операций на другой сервер кластера. RAC позволяет значительно сократить затраты на аппаратные платформы, делая экономически оправданным построение кластеров из недорогих серверов стандартной архитектуры даже для относительно небольших предприятий.

Compaq и Oracle объявили о рассчитанном на несколько лет партнерском соглашении в области технологий и бизнеса. Оно предусматривает тесную интеграцию нескольких компонентов технологии кластеризации Compaq Tru64 UNIX в ПО Oracle9i RAC, что позволит создать более масштабируемую, управляемую, надежную и экономичную кластерную платформу баз данных. Совместно разработанное ПО кластеризации Oracle9i Portable Clusterware сможет обеспечить единый интерфейс ПО кластеризации для всех кластеров Oracle9i RAC (за исключением небольшого уровня, зависящего от ОС). Ожидается, что он будет охватывать кластеры на базе ОС Tru64 UNIX, HP-UX, AIX, Windows 2000, Solaris и Linux. Oracle начала достаточно плотно сотрудничать с Dell и Sun Microsystems, которые предлагают заказчикам предварительно сконфигурированные и протестированные системы, работающие с ПО кластеризации от Oracle. Решения Sun, использующие эту технологию, основаны на серверах Sun Fire 280R и дисковых массивах StorEdge T3. Dell поставляет кластерное программное обеспечение на протестированных серверах с ОС Windows и Linux.

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

Статья опубликована в журнале BYTE № 5(46), май 2002 г.
Перепечатывается с разрешения автора.
Статья помещена в музей 06.03.2009

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *