По мере развития проекта появилась потребность в распределении 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
Для добавления новой ноды надо просто поставить сервер и загрузить его из сети.
Строилось все на 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
Для добавления новой ноды надо просто поставить сервер и загрузить его из сети.