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

7 Авг
2012

По мере развития проекта появилась потребность в распределении 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

Для добавления новой ноды надо просто поставить сервер и загрузить его из сети.
По материалам Хабрахабр.



загрузка...

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

Наверх