Я планирую создать небольшой кластер Hadoop, в котором подчиненные узлы загружаются и запускаются с центрального PXE-сервера, чтобы упростить развертывание и обновления, а также чтобы все диски на подчиненных устройствах были (почти) монополизированы HDFS.
Однако я полагаю, что мне все равно придется зарезервировать место на подчиненных узлах для / tmp и / var / log, я не хочу просто помещать их на ramdisk, потому что я хотел бы, чтобы они были там для отладки после сбоев ( и потому что оперативной памяти меньше, чем на диске).
Таким образом, машины могут загружаться с удаленного PXE-сервера, монтировать оттуда их / только для чтения, затем монтировать / dev / sda1 через sdd1 для разделов данных HDFS, / dev / sda2 для / tmp и / dev / sdb2 для / var /журнал.
У меня вопрос, есть ли еще какие-нибудь каталоги, которые нужно будет записывать? Предполагая, что мы получим Hadoop и т. Д. Для входа в / var / log.
(И это вообще разумная архитектура?)
РЕДАКТИРОВАТЬ: не беспокойтесь об обмене, я планирую сделать их без обмена, убийца OOM предпочтительнее, чем взлом.
«(И это вообще разумная архитектура?) ....»
Я бы не сказал, что ваша идея ошибочна, но кажется интересной. Короче говоря, вы настраиваете бездисковую архитектуру, но все еще используете локальный диск. Мне ваше добавление лишних петель.
"для упрощения развертывания и обновления .."
Если ваша цель - сделать его более централизованным и управляемым. Я бы использовал какой-то автоматизированный механизм распространения. Как и в моем случае, я использую марионетку. Код уже доступен на github. Просто настройте под свои нужды. Это должно позаботиться о вашем упрощении и управляемости. Я быстро построил пару кластеров, используя свои марионеточные манифесты.
Вы можете изучить макет livecd своего дистрибутива, но, вероятно, вам понадобится / var вместо / var / log, а в некоторых дистрибутивах в / etc есть файлы, которые должны быть доступны для записи. / home, если вы не разместили домашний каталог в другом месте.
Вот простое решение для загрузки Slackware 14.2 (BSD init, а не systemd) через PXE с корневой файловой системой, обслуживаемой только для чтения через NFS.
Я просто модифицировал /etc/rc.d/rc.S
для копирования папок, которые должны быть доступны для записи (/etc
и /var
) в файловую систему tmpfs, смонтируйте временные файловые системы поверх исходных папок и переместите копии во временные файловые системы:
# Copy /etc and /var as tmpfs prior to starting any processes.
echo "Creating volatile copies of /etc and /var in memory..."
mount -t tmpfs -o size=256m tmpfs /tmp
cp -a /etc /tmp/etc
mount -t tmpfs -o size=16m tmpfs /etc
mv /tmp/etc/* /etc/
rmdir /tmp/etc
cp -a /var /tmp/var
mount -t tmpfs -o size=16m tmpfs /var
mv /tmp/var/* /var/
rmdir /tmp/var
Вышеупомянутое было вставлено в верхнюю часть rc.S
, которому предшествует только строка, задающая PATH
переменная. Это выполняется в самом начале init, до монтирования любых других разделов или запуска служб.
Любые изменения этих копий в памяти просто сбрасываются при перезагрузке.