Pull to refresh

PXE и загрузка бездисковых систем

По мере развития проекта появилась потребность в распределении http запросов по нескольким разным серверам. Обдумав ситуацию, решили использовать бездисковые сервера. В результате схема получилась следующая: запрос приходит на сервер под управлением Nginx который перенаправляет его на ноды с Apache и php.
Строилось все на CentOS.


Выключим SElinux и установим необходимые пакеты:

setenforce 0
yum -y install dracut-network install syslinux xinetd tftp-server dhcp

Сделаем «образ» системы которая будет загружаться по PXE:

yum -y groupinstall «Base» --installroot=/var/lib/tftpboot/centos6/root/

Немного «допилим»:

cp -f -R /root /var/lib/tftpboot/centos6/root/

chmod 600 /var/lib/tftpboot/centos6/root/etc/shadow

Отредактируем fstab:

vi /var/lib/tftpboot/centos6/root/etc/fstab

none /tmp tmpfs defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

Копируем ядро:

cp /boot/vmlinuz-2.6.32-279.el6.x86_64 /var/lib/tftpboot/centos6/

Сформируем новый initramfs:

dracut initramfs-2.6.32-279.el6.x86_64.img 2.6.32-279.el6.x86_64

Перенесем его в нашу новую систему:

mv initramfs-2.6.32-279.el6.x86_64.img /var/lib/tftpboot/centos6/

Настраиваем PXE:

mkdir /var/lib/tftpboot/pxelinux.cfg
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

Создадим меню загрузчика:

vi /var/lib/tftpboot/pxelinux.cfg/default

default centos6

label centos6
kernel centos6/vmlinuz-2.6.32-279.el6.x86_64
append initrd=centos6/initramfs-2.6.32-279.el6.x86_64.img root=nfs:192.168.0.1:/var/lib/tftpboot/centos6/root rw selinux=0

Настроим NFS экспорт:

vi /etc/exports

/var/lib/tftpboot/centos6/root your_nrtwork(rw,sync,no_root_squash,no_all_squash)

где your_nrtwork — сеть, из которой мы будем подключаться к нашему nfs разделу (к примеру, — 192.168.0.0/24)

Запускаем NFS:

/etc/rc.d/init.d/rpcbind start
/etc/rc.d/init.d/nfslock start
/etc/rc.d/init.d/nfs start

Теперь настроим dhcp-сервер для того, чтобы он нам отдавал pxelinux.0. Для этого добавим в конце dhcpd.conf:

vim /etc/dhcp/dhcpd.conf

filename «pxelinux.0»;
next-server 192.168.0.1;# ip нашего PXE сервера

/etc/rc.d/init.d/dhcpd restart

В /etc/xinetd.d/tftp изменим параметр disable:

vim /etc/xinetd.d/tftp

disable = no

Запускаем tftp сервер:

/etc/rc.d/init.d/xinetd start

Добавим его в автозагрузку:

chkconfig xinetd on

Установим пароль root в новой ОС:

chroot /var/lib/tftpboot/centos6/root

passwd

Теперь при загрузке через PXE у нас грузиться «голая» CentOS.

Грузимся по PXE и устанавливаем любое нужное ПО. В моём случае это apache и php. Возможно установить X-сервер и использовать для загрузки офисных рабочих мест, либо поставить xen/qemu (вообщем можно ставить все, что душе угодно)

После окончательной доработки «напильником» меняем в /etc/exports права на чтение раздела:

/var/lib/tftpboot/centos6/root 192.168.0.0/24(ro,sync,no_root_squash,no_all_squash)

Перезапустим службы:
/etc/rc.d/init.d/rpcbind restart
/etc/rc.d/init.d/nfslock restart
/etc/rc.d/init.d/nfs start

Для добавления новой ноды надо просто поставить сервер и загрузить его из сети.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.