Опубликовано

Уважаемые читатель, сегодня я Вам расскажу, как я делал кластер для управляющей ноду в ISPManager Cluster. Идея создания сего чуда появилась после появления некоторых проблем с сервером, где у нас установлен ISPManager Cluster. Для начала я поднял на двух серверах Debian 6, установленный сервер с данными у меня уже был. Поэтому после установки OS я заказал лицензию на IP адрес, который будет плавать между нодами. Выставил этот IP на первую ноду и установил ISPManager Cluster в /storage. Далее ставим пакет heartbeat.
apt-get install heartbeat

после чего создаем вот такой вот ha.cfg
logfile /var/log/ha-log
logfacility local0
keepalive 1
#warntime 2
deadtime 10
initdead 30
bcast ethX
udpport 694
auto_failback on
node ispcp-2
node ispcp-3

где X — номер интерфейса, где будет броадкаст
node ispcp-2
node ispcp-3
названия нод полученное через uname -n
так же нужно прописать в /etc/hosts
IP ispcp-2
IP ispcp-3

файл haresources
ispcp-2 IP/24/eth0/85.115.208.255 gw cluster

ispcp-2 это нода, которая можно сказать будет главное
IP — плавающий IP, на который выдана лицензия
gw — скрипт расположенный в resource.d
cluster — скрипт расположенный в resource.d

так же нужно создать файл authkeys
auth 1
1 md5 pharse

данный файл необходим для авторизации между нода.

так как при старте серверов на eth0 нет ни IP ни чего, то мы создаем файл gw в resource.d
#!/bin/bash
act=$1
if [ «$act» = «start» ]
then
ifc=`ifconfig eth0:0 | grep «inet addr»`
if [ -n «$ifc» ]
then
gw=`route -n | grep «ip_gateway»`
if [ -z «$gw» ]
then
route add default gw ip_gateway
fi
fi
elif [ «$act» = «stop» ]
then
ifc1=`ifconfig eth0:0 | grep «inet addr»`
if [ -n «$ifc1» ]
then
route del default gw ip_gateway
fi
fi

файл cluster

cat resource.d/cluster

#!/bin/bash
act=$1
if [ «$act» = «start» ]
then
/bin/mount —bind /dev /storage/dev
/bin/mount —bind /dev/pts /storage/dev/pts
/bin/mount —bind /proc /storage/proc
/bin/mount —bind /tmp /storage/tmp
/bin/mount —bind /lib/modules /storage/lib/modules
/bin/mount —bind /var/run-cluster /storage/var/run
/bin/mount —bind /var/cache/debconf /storage/var/cache/debconf
/bin/mount —bind /var/cluster/spool/exim4 /storage/var/spool/exim4
/bin/mount —bind /var/cluster/log/account /storage/var/log/account
/bin/mount —bind /var/cluster/lib/exim4 /storage/var/lib/exim4
# /usr/local/ispmgr/sbin/ihttpd -k -f 85.115.208.27 1500

#test
/usr/sbin/chroot /storage /etc/init.d/ntp start
/usr/sbin/chroot /storage /usr/local/ispmgr/etc/cluster_roles/init.d/ntpdate start
/usr/sbin/chroot /storage /etc/init.d/exim4 start
/usr/sbin/chroot /storage /etc/init.d/acct start
/usr/sbin/chroot /storage /etc/init.d/networking start
/usr/sbin/chroot /storage /etc/init.d/bind9 start
/usr/sbin/chroot /storage /etc/init.d/ssh start
/usr/sbin/chroot /storage /etc/init.d/dovecot start
/usr/sbin/chroot /storage /etc/init.d/proftpd start
/usr/sbin/chroot /storage /etc/init.d/cron start
/usr/sbin/chroot /storage /etc/init.d/nginx start
##

chroot /storage /usr/local/ispmgr/sbin/ihttpd -f 85.115.208.27 1500
chroot /storage wget -q http://lic.ispsystem.com/ispmgr.lic?ip=85.115.208.27 -O /usr/local/ispmgr/etc/ispmgr.lic

elif [ «$act» = «stop» ]
then
killall -9 ihttpd
killall -9 ispmgr
/usr/sbin/chroot /storage /usr/local/ispmgr/etc/cluster_roles/init.d/ntpdate start
/usr/sbin/chroot /storage /etc/init.d/ntp stop
/usr/sbin/chroot /storage /etc/init.d/exim4 stop
/usr/sbin/chroot /storage /etc/init.d/acct stop
/usr/sbin/chroot /storage /etc/init.d/networking stop
/usr/sbin/chroot /storage /etc/init.d/bind9 stop
/usr/sbin/chroot /storage /etc/init.d/ssh stop
/usr/sbin/chroot /storage /etc/init.d/dovecot stop
/usr/sbin/chroot /storage /etc/init.d/proftpd stop
/usr/sbin/chroot /storage /etc/init.d/cron stop
/usr/sbin/chroot /storage /etc/init.d/nginx stop

chroot /storage rm -f /usr/local/ispmgr/var/ispmgr.pid
umount /storage/dev/pts -lf
umount /storage/dev -lf
umount /storage/proc -lf
umount /storage/tmp -lf
umount /storage/lib/modules -lf
umount /storage/var/run -lf
umount /storage/var/cache/debconf -lf
umount /storage/var/spool/exim4 -lf
umount /storage/var/log/account -lf
umount /storage/var/lib/exim4 -lf
fi

он необходим для правильной миграции сервисов между нодами.

суть такая при старте создаются bind диркторий, запускаются сервисы и ihttp для панели
при запуски сервисы останаливаются и делаются umount

заметьте, что эти файлы должны быть одинаковыми и присутствовать на обоих нодах. в /etc/rc.local остаются всего две строки
/usr/bin/sshfs 192.168.15.102:/storage/etc /var/lib/extrausers
/bin/mount /storage

Тестировал только на тестовой среде и все работает на 5+. Остался вопрос с доп. IP — но это решается просто прописываем в /etc/networking/interface алиасов и запуском скрипта
/usr/sbin/chroot /storage /etc/init.d/networking start
в файле cluster

Share and Enjoy:
  • Мой Мир
  • Facebook
  • Twitter

Добавить комментарий