Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Как объединить мощность нескольких компьютеров под управлением одной Linux системы?

#linux #сеть #администрирование #железо #ос


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

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


Ответы

Ответ 1



обычно решения строятся от задачи, а не от платформы что конкретно вы хотите делать? из личного опыта -- анализ логов на биллинге, и ретарификация: делал ручным шардингом на уровне приложения (скрипты на Python), на пачке списанных десктопов, аккаунте на конторском IBM eServer, и паре десктопов под windows. если у вас межсоединения на древнем 100mbit ethernet, а не как минимум 1G (не говоря уж о спецжелезе типа Infiniband) -- дешевле будет пойти в магазин, купить самую поганую материнку и набить ее памятью под завязку, съэкономите на дорогом быстром 1G свитче и энергопотреблении ваш вариант конфигурации может быть эффективен только в одном случае: все параллельные потоки полностью независиммы, и каждый блок задачи польностью влазит в ОЗУ и ресурсы одного узла, неплохо решаются вычислительные задачи с полным отсутствием зависимостей в архитектуре "одна нода - один расчетный блок" с другой стороны, в качестве кластерной рабочей станции подобная утилизация вполне интересная и имеет право на жизнь, и может оказаться выигрышным вариантом: на рабочей станции активно не более 2-3 тяжелых задач, остальные ресурсы тратятся на хранение гигабайтных вкладок в браузере, текстовые редакторы и редкие пробежки утилит по файловой системе https://en.wikipedia.org/wiki/Single_system_image https://en.wikipedia.org/wiki/Distributed_operating_system https://en.wikipedia.org/wiki/Multikernel Linux реализаций похоже нет: https://en.wikipedia.org/wiki/OpenMosix (R.I.P 2008, kernel 2.4) так что решение задачи в оригинальной постановке сводится по факту к освоению системного программирования в полном объеме: написать аналог ядра Linux обеспечивающий весь необходимый функционал DOS, адаптировать базовые библиотеки в т.ч. из поставки копиляторов GNU (libc, libatomic, gomp,...) и пересобрать всю систему до состояния, когда сможет работать весь компплект ПО который вы используете возможно более простым решением может оказаться написание слоя виртуализации: переписать только слой всех системных библиотек, который использует ваше прикладное ПО, с реализацией функционала distributed POSIX поверх обычных дистрибутивов, поставленных на каждый узел, или гипервизоров (желаю много весеслья с исходниками Xen и libgcc/libstdc++ 8-) с практической точки зрения: ищите задачи с минимальным объемом обмена данными между потоками, и пишите свое ПО: смотрите в сторону готовых распределенных платформ для веб/микросервисов, требующие для работы минимальных ресурсов перетаскивайте бизнес-процессы в вашей конторе на веб-технологии, чтобы можно было раздать хилое железо юзерам в качестве терминалов/запускалок браузеров к сожалению, насколько знаю бесплатных реализаций распределенного Smalltalk не существует, а то бы в первую очередь посоветовал его -- как вариант, искать библиотеки для программирования на распределенном обмене сообщениями между объектами для mainstream языков

Ответ 2



В таком виде - в котором вы спрашиваете: решения будут неэффективными. Системы из множества компьютеров(серверов) делаются отдельно, под каждую задачу свои, мало того программы - для работы которых и создаётся такая система - тоже пишутся именно под определённые системы серверов. Называются они "высоконагруженные системы", и их создание/использование - это очень дорогой процесс, который называется "масштабирование". Крупнейшие примеры таких систем - социальные сети: например работу VK обеспечивает 10к машин, но сравнимых по мощности с домашним компьютером(как утверждают владельцы). Да и сам StackOverflow конечно работает не на одном сервере. Если вам действительно интересно масштабирование: то стоит на крутом уровне освоить системное администрирование, docker, а также почитать лирику на тему хайлода https://ruhighload.com/scale

Ответ 3



Ответ сводится к тому, что Вам необходимо создать кластер компьютеров под управлением какой-либо Linux-like OS. Вот несколько готовых решений: [useless link: has been removed]. Кластер в домашних условиях. Для справки: Вики (Кластер). Описывать весь процесс в ответе особого смысла нет. Думаю, мой ответ вам полезен.

Ответ 4



Скорее всего энергоэффективность (и, возможно, надежность) такой системы будет слишком низка. Задача кластерных систем - достичь такой вычислительной мощности и отказоустойчивости, которой сложно (или невозможно) достичь средствами одного современного сервера. А для утилизации старого железа лучше применить другие способы ;)

Комментариев нет:

Отправить комментарий