Как объединить компьютеры в кластер

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

  1. состоит из нескольких связанных между собой компьютеров;
  2. используется как единый, унифицированный компьютерный ресурс».

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

  1. отказоустойчивые кластеры (High-availability clusters, HA, кластеры высокой доступности)
  2. кластеры с балансировкой нагрузки (Load balancing clusters)
  3. вычислительные кластеры (High performance computing clusters, HPC)
  4. системы распределенных вычислений

Содержание

Классификация кластеров [ править | править код ]

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

Обозначаются аббревиатурой HA (англ. High Availability — высокая доступность). Создаются для обеспечения высокой доступности сервиса, предоставляемого кластером. Избыточное число узлов, входящих в кластер, гарантирует предоставление сервиса в случае отказа одного или нескольких серверов. Типичное число узлов — два, это минимальное количество, приводящее к повышению доступности. Создано множество программных решений для построения такого рода кластеров.

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

  • с холодным резервом или активный/пассивный. Активный узел выполняет запросы, а пассивный ждет его отказа и включается в работу, когда таковой произойдет. Пример — резервные сетевые соединения, в частности, Алгоритм связующего дерева. Например, связка DRBD и HeartBeat/Corosync.
  • с горячим резервом или активный/активный. Все узлы выполняют запросы, в случае отказа одного нагрузка перераспределяется между оставшимися. То есть кластер распределения нагрузки с поддержкой перераспределения запросов при отказе. Примеры — практически все кластерные технологии, например, Microsoft Cluster Server. OpenSource проект OpenMosix.
  • с модульной избыточностью. Применяется только в случае, когда простой системы совершенно недопустим. Все узлы одновременно выполняют один и тот же запрос (либо части его, но так, что результат достижим и при отказе любого узла), из результатов берется любой. Необходимо гарантировать, что результаты разных узлов всегда будут одинаковы (либо различия гарантированно не повлияют на дальнейшую работу). Примеры — RAID и Triple modular redundancy.

Конкретная технология может сочетать данные принципы в любой комбинации. Например, Linux-HA поддерживает режим обоюдной поглощающей конфигурации (англ. takeover ), в котором критические запросы выполняются всеми узлами вместе, прочие же равномерно распределяются между ними. [1]

Кластеры распределения нагрузки (Network Load Balancing, NLB) [ править | править код ]

Принцип их действия строится на распределении запросов через один или несколько входных узлов, которые перенаправляют их на обработку в остальные, вычислительные узлы. Первоначальная цель такого кластера — производительность, однако, в них часто используются также и методы, повышающие надёжность. Подобные конструкции называются серверными фермами. Программное обеспечение (ПО) может быть как коммерческим (OpenVMS, MOSIX, Platform LSF HPC, Solaris Cluster, Moab Cluster Suite, Maui Cluster Scheduler), так и бесплатным (OpenMosix, Sun Grid Engine, Linux Virtual Server).

Вычислительные кластеры [ править | править код ]

Кластеры используются в вычислительных целях, в частности в научных исследованиях. Для вычислительных кластеров существенными показателями являются высокая производительность процессора в операциях над числами с плавающей точкой (flops) и низкая латентность объединяющей сети, и менее существенными — скорость операций ввода-вывода, которая в большей степени важна для баз данных и web-сервисов. Вычислительные кластеры позволяют уменьшить время расчетов, по сравнению с одиночным компьютером, разбивая задание на параллельно выполняющиеся ветки, которые обмениваются данными по связывающей сети. Одна из типичных конфигураций — набор компьютеров, собранных из общедоступных компонентов, с установленной на них операционной системой Linux, и связанных сетью Ethernet, Myrinet, InfiniBand или другими относительно недорогими сетями. Такую систему принято называть кластером Beowulf. Специально выделяют высокопроизводительные кластеры (Обозначаются англ. аббревиатурой HPC ClusterHigh-performance computing cluster). Список самых мощных высокопроизводительных компьютеров (также может обозначаться англ. аббревиатурой HPC) можно найти в мировом рейтинге TOP500. В России ведется рейтинг самых мощных компьютеров СНГ. [2]

Читайте также:  Как проверить tda2030a на исправность мультиметром

Системы распределенных вычислений (grid) [ править | править код ]

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

Кластер серверов, организуемых программно [ править | править код ]

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

В отличие от аппаратного кластера компьютеров, кластеры организуемые программно, требуют:

  • наличия специального программного модуля (Cluster Manager), основной функцией которого является поддержание взаимодействия между всеми серверами — членами кластера:
  • синхронизации данных между всеми серверами — членами кластера;
  • распределение нагрузки (клиентских запросов) между серверами — членами кластера;
  • от умения клиентского программного обеспечения распознавать сервер, представляющий собой кластер серверов, и соответствующим образом обрабатывать команды от Cluster Manager;
    • если клиентская программа не умеет распознавать кластер, она будет работать только с тем сервером, к которому обратилась изначально, а при попытке Cluster Manager перераспределить запрос на другие серверы, клиентская программа может вообще лишиться доступа к этому серверу (результат зависит от конкретной реализации кластера).
    • Примеры программных кластерных решений

      • IBM Lotus Notes
      • HP MC/ServiceGuard

      Применение [ править | править код ]

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

      Однако, принцип организации кластера серверов (на уровне программного протокола) позволяет исполнять по нескольку программных серверов на одном аппаратном. Такое использование может быть востребовано:

      • при разработке и тестировании кластерных решений;
      • при необходимости обеспечить доступность кластера только с учётом частых изменений конфигурации серверов — членов кластера, требующих их перезагрузки (перезагрузка производится поочерёдно) в условиях ограниченных аппаратных ресурсов.

      Самые производительные кластеры [ править | править код ]

      Дважды в год организацией TOP500 публикуется список пятисот самых производительных вычислительных систем в мире, среди которых в последнее время часто преобладают кластеры. Самым быстрым кластером является IBM Roadrunner (Лос-Аламосская национальная лаборатория, США, созданный в 2008 году), его максимальная производительность (на июль 2008) составляет 1,026 Петафлопс. Самая быстрая система в Европе (на июль 2008) — суперкомпьютер, BlueGene/P находится в Германии, в исследовательском центре города Юлих, земля Северный Рейн-Вестфалия, максимально достигнутая производительность 167,3 Терафлопс.

      Кластерные системы занимают достойное место в списке самых быстрых, при этом значительно выигрывая у суперкомпьютеров в цене. На июль 2008 года на 7 месте рейтинга TOP500 находится кластер SGI Altix ICE 8200 (Chippewa Falls, Висконсин, США).

      Сравнительно дешёвую альтернативу суперкомпьютерам представляют кластеры, основанные на концепции Beowulf, которые строятся из обыкновенных недорогих компьютеров на основе бесплатного программного обеспечения. Один из практических примеров такой системы — Stone Soupercomputer в Национальной лаборатории Ок-Ридж (Теннесси, США, 1997).

      Крупнейший кластер, принадлежащий частному лицу (из 1000 процессоров), был построен Джоном Козой (John Koza).

      История [ править | править код ]

      История создания кластеров неразрывно связана с ранними разработками в области компьютерных сетей. Одной из причин для появления скоростной связи между компьютерами стали надежды на объединение вычислительных ресурсов. В начале 1970-х годов группой разработчиков протокола TCP/IP и лабораторией Xerox PARC были закреплены стандарты сетевого взаимодействия. Появилась и операционная система Hydra для компьютеров PDP-11 производства DEC, созданный на этой основе кластер был назван C.mpp (Питтсбург, штат Пенсильвания, США, 1971 год). Тем не менее, только около 1983 года были созданы механизмы, позволяющие с лёгкостью пользоваться распределением задач и файлов через сеть, по большей части это были разработки в SunOS (операционной системе на основе BSD от компании Sun Microsystems).

      Читайте также:  Как делать эффекты в сони вегас

      Первым коммерческим проектом кластера стал ARCNet, созданный компанией Datapoint в 1977 году. Прибыльным он не стал, и поэтому строительство кластеров не развивалось до 1984 года, когда DEC построила свой VAXcluster на основе операционной системы VAX/VMS. ARCNet и VAXcluster были рассчитаны не только на совместные вычисления, но и совместное использование файловой системы и периферии с учётом сохранения целостности и однозначности данных. VAXCluster (называемый теперь VMSCluster) — является неотъемлемой компонентой операционной системы HP OpenVMS, использующих процессоры DEC Alpha и Itanium.

      Два других ранних кластерных продукта, получивших признание, включают Tandem Hymalaya (1994, класс HA) и IBM S/390 Parallel Sysplex (1994).

      История создания кластеров из обыкновенных персональных компьютеров во многом обязана проекту Parallel Virtual Machine. В 1989 году это программное обеспечение для объединения компьютеров в виртуальный суперкомпьютер открыло возможность мгновенного создания кластеров. В результате суммарная производительность всех созданных тогда дешёвых кластеров обогнала по производительности сумму мощностей «серьёзных» коммерческих систем.

      Создание кластеров на основе дешёвых персональных компьютеров, объединённых сетью передачи данных, продолжилось в 1993 году силами Американского аэрокосмического агентства NASA, затем в 1995 году получили развитие кластеры Beowulf, специально разработанные на основе этого принципа. Успехи таких систем подтолкнули развитие grid-сетей, которые существовали ещё с момента создания UNIX.

      Программные средства [ править | править код ]

      Широко распространённым средством для организации межсерверного взаимодействия является библиотека MPI, поддерживающая языки C и Fortran. Она используется, например, в программе моделирования погоды MM5.

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

      Среди пользователей GNU/Linux популярны несколько программ:

      • distcc, MPICH и др. — специализированные средства для распараллеливания работы программ. distcc допускает параллельную компиляцию в GNU Compiler Collection.
      • Linux Virtual Server, Linux-HA — узловое ПО для распределения запросов между вычислительными серверами.
      • MOSIX, openMosix, Kerrighed, OpenSSI — полнофункциональные кластерные среды, встроенные в ядро, автоматически распределяющие задачи между однородными узлами. OpenSSI, openMosix и Kerrighed создают среду единой операционной системы между узлами.

      Кластерные механизмы планируется встроить и в ядро DragonFly BSD, ответвившуюся в 2003 году от FreeBSD 4.8. В дальних планах также превращение её в среду единой операционной системы.

      Компанией Microsoft выпускается HA-кластер для операционной системы Windows. Существует мнение, что он создан на основе технологии Digital Equipment Corporation, поддерживает до 16 (с 2010 года) узлов в кластере, а также работу в сети SAN (Storage Area Network). Набор API-интерфейсов служит для поддержки распределяемых приложений, есть заготовки для работы с программами, не предусматривающими работы в кластере.

      Windows Compute Cluster Server 2003 (CCS), выпущенный в июне 2006 года разработан для высокотехнологичных приложений, которые требуют кластерных вычислений. Издание разработано для развертывания на множестве компьютеров, которые собираются в кластер для достижения мощностей суперкомпьютера. Каждый кластер на Windows Compute Cluster Server состоит из одного или нескольких управляющих машин, распределяющих задания и нескольких подчиненных машин, выполняющих основную работу. В ноябре 2008 года представлен Windows HPC Server 2008, призванный заменить Windows Compute Cluster Server 2003.

      Novell Open Enterprise Server (OES) — сетевая операционная система, « сплав » Novell NetWare и SUSE Linux Enterprise Server; кроме прочего способная создавать смешанные кластеры, в которых ресурсы при сбое могут перемещаться с сервера NetWare на сервер Linux и наоборот.

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

      Читайте также:  Как отправить фото из контакта в ватсап

      Один из первых архитекторов кластерной технологии Грегори Пфистер (Gregory F. Pfister) дал кластеру следующее определение: «Кластер — это разновидность параллельной или распределённой системы, которая:
      состоит из нескольких связанных между собой компьютеров;
      используется как единый, унифицированный компьютерный ресурс» .

      Итак: берешь свитч (коммутатор) 1000 МБитсек 5-8 портов (стоит от 1000 рублей) . Покупаешь стандартные кабели (витую пару) c разъемом RJ-45 (проще купить готовые, если нужно всего 2-3, потому что обжимать еще нужно научиться, да и скримпер дорого стоит) .

      Далее подключаешь компьютеры к свитчу. Ву-а-ля! Физически кластер готов (принципиально он не отличается от локалки) . Но тут получается самое интересное. Чтобы компьютеры решали одну задачу нужноустаноыить соответствующий софт.
      Если задачи хостинга — то проблем нет, устанавливаешь бесплатную Ubuntu Server (погугли как синхронизировать) и все. А если нужно рендерить 3D, либо осуществлять сверхсложные расчеты — нужно устанавливать Windows Server и специальные софтины.
      К тому же чтобы рендерилось хорошо — видеокарты нужны мощные.

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

      Итог: Мне нужно что бы 5+ коробок работала как одна, при этом я не хочу управлять каждым серваком отдельно, моя цель единая машина состоящая физически из нескольких под управлением одной системы. Что она будет делать? Да что угодно, хоть пусть будет web сервером с ip в интернете или просто рабочей станцией Ubuntu или fedora

      4 ответа 4

      обычно решения строятся от задачи, а не от платформы

      что конкретно вы хотите делать?

      из личного опыта — анализ логов на биллинге, и ретарификация: делал ручным шардингом на уровне приложения (скрипты на Python), на пачке списанных десктопов, аккаунте на конторском IBM eServer, и паре десктопов под windows.

      если у вас межсоединения на древнем 100mbit ethernet, а не как минимум 1G (не говоря уж о спецжелезе типа Infiniband) — дешевле будет пойти в магазин, купить самую поганую материнку и набить ее памятью под завязку, съэкономите на дорогом быстром 1G свитче и энергопотреблении

      ваш вариант конфигурации может быть эффективен только в одном случае: все параллельные потоки полностью независиммы, и каждый блок задачи польностью влазит в ОЗУ и ресурсы одного узла, неплохо решаются вычислительные задачи с полным отсутствием зависимостей в архитектуре "одна нода — один расчетный блок"

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

      Linux реализаций похоже нет:

      так что решение задачи в оригинальной постановке сводится по факту к освоению системного программирования в полном объеме: написать аналог ядра Linux обеспечивающий весь необходимый функционал DOS, адаптировать базовые библиотеки в т.ч. из поставки копиляторов GNU (libc, libatomic, gomp. ) и пересобрать всю систему до состояния, когда сможет работать весь компплект ПО который вы используете

      возможно более простым решением может оказаться написание слоя виртуализации: переписать только слой всех системных библиотек, который использует ваше прикладное ПО, с реализацией функционала distributed POSIX поверх обычных дистрибутивов, поставленных на каждый узел, или гипервизоров (желаю много весеслья с исходниками Xen и libgcc/libstdc++ 😎

      с практической точки зрения:

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

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

      Adblock
      detector