Diskless servers? w00t! ;)
Смотрите че сделал! :)
Есть у меня задача - поднять кластер на нескольких серверах однотипных (старые Tyan 2882 2xOpteron x64).
Основной задачей каждой машины будет обслуживание апликейшин сервера (J2EE) которые между собой собраны в кластер на уровне JVM посредством http://www.terracottatech.com/. Короче - из НЕ Java софта нужны: dhcp (буду СЕРВЕРАМ выдавать ай-пи динамечески, ДА!) + tftp + mdadm(рейд массивы на каждом сервере) + ssh + nfs + kernel ысесьно (вроде ниче не забыл). Короче идея следующая - один из серверов хостит dhcp + nfs + tftp + образ линюха (кернел + root) заниматься выдачей айпи, отдачей кернела на загрузку + NFS server для / в режиме ro. Все поднял довольно быстро (были танцы с бубном вокруг ro root, но все порешал, монтируя все это в память:
/dev/shm /tmp tmpfs size=32M 0 0
/dev/shm /var/lib/init.d tmpfs size=2M 0 0
/dev/shm /var/run tmpfs size=2M 0 0
/dev/shm /var/tmp tmpfs size=2M 0 0
/dev/shm /var/lock tmpfs size=2M 0 0
/dev/shm /var/log tmpfs size=2M 0 0
(кому интересно - в блокнотик - проверено временем - для ro root работает)
не знаю, мож много выделил под /var/run и /var/lock :) но для начала - не жадничаю - на машинах по 4Гб памяти стоит.
Весь "рабочий" софт - на жаве - ставлю НА КАЖДЫЙ СЕРВ В ЛОКАЛЬНЫЙ РЕЙД ручками отдельно, и конфигурю отдельно - к генту это отношения не имеет вообще. Еще раз повторю - никаких серверов баз данный, которые по NFS получают доступ к реальным файлам нет в принципе, как в прочем любого софта что жестко с диском работать будет - (если бы были - перенес бы базы на локальные рейды, а сам серв стартовал бы по NFS как и все остальное).
Короче - на старте у меня каждый сервак из пула получает ай-пи, грузит ТОТ ЖЕ КЕРНЕЛ и монтирует ТОТ ЖЕ рут в рид-онли с одного и того же места. Потом - монтирует локальный рейд, где живет жава. Написал простенький /sbin/runscript скрипт, который вызывается на старте local и делает всю кастом работу (скрипт определяет ай-пи тачки на которой стартует и жует одноимённый файл с кастом логикой, т.е. в принципе можно делать очень кастом вещи на не очень одинаковом железе).
Что получаем - линух реальный - в одном месте - все что связано с конфигами - там же, все апдейты делаю под chroot на локальной машине и они автоматически (ладно, приврал, полу-автоматически - ручками рестартить нужно проапдейченые сервисы на всех серверах) еплаятся на весь кластер (уже неделю все живет в тест режиме - пока тока апдейты гоняю + distcc компиляция - при чем - все сервера компилят апдейты для ОДНОГО, а потом же с него все и грузят - рулез короче полный :))
Теперь самое интересное - кто уже с таким сталкивался? Будет это дело работать или нет в принципе? :) Меня интересует где тут bottle-neck ожидать нужно? Че может вылезти? До того как система пойдет в продакшин я хочу быть уверен что никаких network storms не будет в принципе + трафик генерируемый nfs_root не будет существенно влиять на трафик между app servers (пока не знаю толком как работает terracota и сколько она будет отвешивать, но думаю что не много).
Раньше у меня работала похожая система (несколько упрощенная) для загрузки бездисковых клиентов, с центральным X-сервером построенная на базе LTSP (http://www.ltsp.org/). Сейчас хочу ЖИВУЮ, НОРМАЛЬНУЮ ГЕНТУ для бездисковых серверов. Если получиться, то в принципе, можно создать микс, где и сервера и тонкие клиенты - бездисковые + виртуальные машины бездисковые - все грузиться с одного места - стирается грань между железом и системой - человеку по-барабану где он сидит SSHом/VNC/RDP - на реальном железе или на виртуалке под XEN'ом, virtualbox или чем-то еще. Разворачивание/перенос/бек-ап такой системы - просто сказка - все в одном месте на одном носителе. После деплоймента - ручками назначить подсеть и VPN в центральный офис - все! Выгода на лицо (или на лице - не знаю, третьи сутки не сплю :)) Что скажете, господа?
- Для комментирования войдите или зарегистрируйтесь
Народ, че никто
Народ, че никто такого не делал? Никто ниче сказать не может? :)
.
Я программист. Кластер не поднимал. С уважением смотрю на тех, кто поднимал. :-)
я тоже
я тоже програмер :) тока вот нету у нас админов толковых - патаму сам ковыраю потихоньку :)
Делали и не раз.
Делали и не раз. Только поискать стоит по англоязычным рассылкам.
Кстати вроде были даже удачные попытки по инегрированию ltsp в gentoo.
ltsp это решение
ltsp это решение для тонких клиентов. мы тоже такое делали :)
меня сервера интересуют.
копилефт
Чувак. Это мега-идея. Сам о таком задумывался... Но как-то всё казалось сложным и вряд ли осуществимым. Классная у тебя схема получилась.
А применений такой системе реально куча... Вот только с класстерами небольшая ж, т.к. в малых и средних офисах их нет.
А если модифицировать систему след. образом:
1) один винт "сердце" ставится на сервак: на нём гента с нетбут-сервером. В качестве загружаемой ОС - генту с distcc и необходимыми gcc/glibc и т.д.
2) все машины (от мала до велика) грузятся по сети. При загрузке выполняется скрипт, который кидает на сервак файл с /proc/cpuinfo + lspci + mac-adress. Таким образом мы получаем конфиги железа со всех компов.
3) главный одмин решает, что и как нужно ставить исходя из собранной инфы и запускает компил по distcc новой генты, заточенной уже под данное предприятие/офис.
4) вот компил готов. На загрузочный серв заливается свеже собранная гента. Или заливается на винты локалхостов а винт "сердце" снимается и уносится, чтоб врагам не достался :)
имхо, довольно интересная заготовка получается. Если иметь такой установочный винт, можно в разы ускорить процесс гентунизации контуперного парка, т.к. не будет нужды ждать установки системы по минимуму (+distcc) на каждую машину...
Конкретно по теме топикстартера:
1) достаточно получить доступ к загрузочной генте, и поражены будут все участники класстера (и не обязательна перезагрузка)
2) мучает вопрос: а если кто-то как-то сможет загрузить свою операционку, вместо положенной? тогда получится полный бедлам...
1. Теоретически,
1. Теоретически, враги могут получить доступ к любому важному серверу или группе серверов также, как и этому загрузочному серверу кластера.
Если же имеются в виду проблемы с железом, то можно ж наверняка на время передать роль загрузочного сервера другому серверу кластера. На то и есть период испытаний, чтобы все сценарии отработать.
2. Как можно загрузить "ненужную" ОС, если даже на локальных серверах у меня по нескольку ядер и как-то они не путаются при загрузке? :)
Кстати, вопрос по надежности интересный.
К примеру, насколько надежно держать на одном мощном (много RAM/хороший проц) сервере одновременно LDAP и файлопомойку с почтой, при условии, что LDAP лежит на одном райд-массиве, а файлопомойка+почта на другом.
Я рассуждал так: если упадет LDAP, то доступа как к почте, так и к файлам все равно не будет. Поэтому, неважно, отдельно они будут находиться от LDAP или нет. Ресурсы же сервера в случае такого общего размещения будут расходоваться гораздо лучше.
_______________________________________________________________________
Intel Core2Duo E6600 / 2 Gb RAM / NV GF 8800 GTX / x86_64-pc-linux-gnu
>2) мучает
>2) мучает вопрос: а если кто-то как-то сможет загрузить свою операционку, вместо положенной? тогда получится полный бедлам...
Такие вещи можно порешать на коммутаторе, порезав dhcp 67 от других портов, кроме того, где висит dhcp. Второй вариант, для бута использовать вторые сетевые и отдельную сетку.