Как объединить мощность нескольких компьютеров под управлением одной Linux системы?
В офисе валяется куча ненужных, рабочих системных блоков. Вот я и решил объединить их в единую вычислительную сеть, а по сути в обычный компьютер управляемый единой ОС, но представляющий собой 3+ системных блока. Итог: Мне нужно что бы 5+ коробок работала как одна, при этом я не хочу управлять каждым серваком отдельно, моя цель единая машина состоящая физически из нескольких под управлением одной системы. Что она будет делать? Да что угодно, хоть пусть будет web сервером с ip в интернете или просто рабочей станцией Ubuntu или fedora
5 ответов 5
Ответ сводится к тому, что Вам необходимо создать кластер компьютеров под управлением какой-либо Linux-like OS.
Вот несколько готовых решений:
Описывать весь процесс в ответе особого смысла нет. Думаю, мой ответ вам полезен.
Эта статья про «кластер убунту» лишь говорит о написании парралельной программы на языке Fortran (господи прости) с использованием нескольких серверов, а никак не про объединение ресурсов разных серверов в одну linux систему.
@Dillinger è morto , не, но вторая статья то полезна — MOSIX действительно позволяет сделать кластер: в простом виде — перекидывать некоторые процессы на другую машину, и выполнять их там. Конечно до «объединения» мощности далековато — то есть это не совсем эффективно, но работает, факт. Первая конечно не по теме)
В таком виде — в котором вы спрашиваете: решения будут неэффективными. Системы из множества компьютеров(серверов) делаются отдельно, под каждую задачу свои, мало того программы — для работы которых и создаётся такая система — тоже пишутся именно под определённые системы серверов.
Называются они «высоконагруженные системы», и их создание/использование — это очень дорогой процесс, который называется «масштабирование». Крупнейшие примеры таких систем — социальные сети: например работу VK обеспечивает 10к машин, но сравнимых по мощности с домашним компьютером(как утверждают владельцы). Да и сам StackOverflow конечно работает не на одном сервере.
Если вам действительно интересно масштабирование: то стоит на крутом уровне освоить системное администрирование, docker, а также почитать лирику на тему хайлода https://ruhighload.com/scale
Мне нужно что бы 5 коробок работала как одна, при этом я не хочу управлять каждым серваком отдельно, моя цель единая машина состоящая физически из нескольких под управлением одной системы
@Gybernaty тогда попробуйте mosix — из другого ответа. Или это классическая задача сисадмина — сделать систему серверов: например один сервер выделяется под БД, один под кеш, один под файловое хранилище — а на центральном сервере делаются правильное проксирование портов, алиасы, редиректы.
обычно решения строятся от задачи, а не от платформы
что конкретно вы хотите делать?
из личного опыта — анализ логов на биллинге, и ретарификация: делал ручным шардингом на уровне приложения (скрипты на 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 языков
Как создать кластер из двух ноутбуков?
У меня родилась «гениальная» идея: создать соединить мощности двух компов.
Погуглил, такая технология есть, существует и активно используется людьми со всего мира.
Погуглил ещё, оказывается, что это можно сделать на Windows Server и Linux
Ну и соответственно, вопросы:
1.1 Можно ли комфортно работать на Сервере — играть в игры, отвечать на Тостере, смотреть кино? В том числе на кластеризированном?
1.2 Будет ли на кластеризированном линуксе нормально работать Wine и\или подобные средства запуска windows — программ?
Погуглил еще — оказывается, что скорости моего инета для нормального функционирования кластера не хватит, а надо для таких вещей кабельного сообщения компьютеров.
Ну и вопросы:
2.1 Можно ли просто напрямую соединить два компа каким-нибудь таким lan кабелем?
2.2 Если я захочу к этой бандуре подключить еще нетбук, то можно ли просто всё присоединить к подобному свитчу и радоваться жизни?
Хар-ки компьютеров:
2.40 Ghz | 2.27 Ghz — оба двухядерные, от intel
4 Gb RAM- одинаково
512 Mb GPU — одинаково, от nvidia
Dell|Asus
Для того, для чего вы хотите — никак не создать.
Кластер — это даже согласно статье из Википедии, которую вы приводите — это слабо связанная вычислительная система.
Попробую объяснить, используя аналогию.
Вы считаете, что компьютеры можно объединять также, как можно объединять усилия людей, наполняющих бочку водой, таская ее ведрами. Один человек наполнит за час, два — за полчаса, и так далее. Но это процесс, который распараллеливается элементарно.
А на самом деле, кластер работает подобно команде сценаристов, которые пишут сценарий сериала из двадцати серий, работая удаленно по бумажной почте: сначала главный сценарист придумывает персонажей и общий сюжет, записывает это, потом ему нужно разбить его на серии и отослать каждому из сценаристов, указав, какую серию тому нужно прописать в подробностях. Если бы он писал все сам, ему бы понадобилось по неделе на серию, итого — двадцать недель. А съемки можно начинать, когда готова первая серия (через неделю). Поскольку съемки одной серии занимают три дня, съемочная группа будет простаивать четыре дня из каждой недели, пока не будет готова следующая серия (деньги во время простоя тоже расходуются, хотя ничего не производится). Съемки будут, таким образом, завершены через 20*7+3=143 дня.
Наемным сценаристам тоже нужно по неделе на написании серий, но начальная работа главного сценариста тоже занимает неделю, плюс — три дня на доставку «каркаса сценария» наемным сценаристам, три дня на доставку сценария серий обратно, еще пять дней на проверку и исправление нестыковок. Итог — начинать съемки можно только через 25 дней, а не через семь, но продолжать их можно уже непрерывно. Съемки будут завершены через 25+3*20=85 дней.
Ровно как здесь нельзя ускорить процесс еще больше, заставив больше сценаристов писать по половине серии (потому что при этом растет сложность стыковки кусков сюжета, которые написаны разными людьми, потому им придется переписываться, теряя время), так и пытаясь запустить на кластере условную игру, придется просадить кучу времени на медленное общение узлов между собой по сети.
Чтобы всё «летало» в реальном времени в игре, вам нужен один мощный компьютер с многоядерным процессором, мощной видеокартой и быстрой шиной, которая всех их объединяет. А собрать кластер из сотни древних ноутов на медленном Ethernet и получить производительность в сто раз больше в играх — это фантастика из дурацких фильмов про хакеров.