четверг, 17 февраля 2011 г.

Строим кластер DRBD+Pacemaker+Corosync+KVM+Nginx+PHP-FPM+Zabbix


DRBD+Pacemaker+Corosync+KVM+Nginx+PHP-FPM+Zabbix
(позже дооформлю...)
Чисти обязательно!!!
> /root/.ssh/known_hosts
> /home/borodatych/.ssh/known_hosts
Или сразу удаляем!!!
rm -rf /root/.ssh/known_hosts
rm -rf /home/borodatych/.ssh/known_hosts
Pre-Installation
aptitude update
aptitude upgrade
Правим хост файл
cat /etc/hosts
echo '192.168.8.11 sifon' >> /etc/hosts
echo '192.168.8.12 boroda' >> /etc/hosts
echo '192.168.8.20 nodez' >> /etc/hosts
echo '10.10.10.11 drbd1' >> /etc/hosts
echo '10.10.10.12 drbd2' >> /etc/hosts
Конфигурируем сетевые интерфейсы
> /etc/network/interfaces
echo 'auto lo' >> /etc/network/interfaces
echo 'iface lo inet loopback' >> /etc/network/interfaces
echo '' >> /etc/network/interfaces
echo 'auto eth0' >> /etc/network/interfaces
echo 'iface eth0 inet manual' >> /etc/network/interfaces
echo '' >> /etc/network/interfaces
echo 'auto br0' >> /etc/network/interfaces
echo 'iface br0 inet static' >> /etc/network/interfaces
echo ' address X.Y.Z.x1' >> /etc/network/interfaces
echo ' network X.Y.z.x2' >> /etc/network/interfaces
echo ' netmask 255.255.255.x3' >> /etc/network/interfaces
echo ' broadcast X.Y.Z.x4' >> /etc/network/interfaces
echo ' gateway X.Y.Z.x5' >> /etc/network/interfaces
echo ' bridge_ports eth0' >> /etc/network/interfaces
echo ' bridge_stp off' >> /etc/network/interfaces
echo ' bridge_fd 0' >> /etc/network/interfaces
echo ' bridge_maxwait 0' >> /etc/network/interfaces
echo '' >> /etc/network/interfaces
echo 'auto eth1' >> /etc/network/interfaces
echo 'iface eth1 inet static' >> /etc/network/interfaces
echo ' address 10.10.10.12' >> /etc/network/interfaces
echo ' netmask 255.255.255.0' >> /etc/network/interfaces
/etc/init.d/networking restart
Проверяем. На всех машинах
ping sifon -c 1
ping boroda -c 1
ping nodez -c 1
ping drbd1 -c 1
ping drbd2 -c 1
Добавим гугловский ДНС
cat /etc/resolv.conf
echo 'nameserver 8.8.8.8' >> /etc/resolv.conf
KVM
Устанавливаем необходимые пакеты
apt-get install virtinst
aptitude install qemu-kvm
aptitude install libvirt-bin
Это гуи для дескопа
aptitude install virt-manager
Проверяем все ли установилось
При положительном результате, вернет пустую строчку
virsh -c qemu:///system list --all
DRBD
Устанавливаем
apt-get install drbd8-utils
Приступаем к конфигурации
Тут мы правим глобальные переменные
cp /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.2
> /etc/drbd.d/global_common.conf
nano /etc/drbd.d/global_common.conf
global { usage-count yes; }
common { protocol C;
syncer { rate 3072M; }
handlers {
out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";
}
startup { wfc-timeout 15; degr-wfc-timeout 60; }
disk { fencing resource-only; on-io-error detach; no-disk-flushes; no-md-flushes; }
net { cram-hmac-alg sha1; shared-secret "amAteIcHik"; ping-timeout 20; max-buffers 8000; max-epoch-size 8000; sndbuf-size 0; }
}
Проверяем наличие ниже приведенных строчек в
nano /etc/drbd.conf
include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/\*.res";
Это блочное устройство у нас отведено под тестовый KVM машины
nano /etc/drbd.d/drbd0.res
resource drbd0 {
on sifon {
device /dev/drbd0;
disk /dev/md2;
address 10.10.10.11:25600;
meta-disk internal;
}
on boroda {
device /dev/drbd0;
disk /dev/md2;
address 10.10.10.12:25600;
meta-disk internal;
}
Это наш релиз. Запоминаем и осторожничаем в будущем))))
nano /etc/drbd.d/drbd5.res
resource drbd5 {
on sifon {
device /dev/drbd5;
disk /dev/sdc5;
address 10.10.10.11:25605;
meta-disk internal;
}
on boroda {
device /dev/drbd5;
disk /dev/sdc5;
address 10.10.10.12:25605;
meta-disk internal;
}
Создаем необходимы каталоги
Первый для релиза, остальные два под тестовые KVM-ки
mkdir /mnt/rkvm
mkdir -p /mnt/skvm/sys
mkdir -p /mnt/skvm/iso
Не знаю как обозвать эту секцию, помогайте
/etc/init.d/drbd start
dd if=/dev/zero of=/dev/sdc5 bs=1M count=128
drbdadm create-md drbd0
drbdadm create-md drbd5
drbdadm up drbd0
drbdadm up drbd5
mkfs.ext4 /dev/drbd0
mkfs.ext4 /dev/drbd5
drbdadm -- --overwrite-data-of-peer primary drbd0
drbdadm -- --overwrite-data-of-peer primary drbd5
drbdadm connect drbd5
watch cat /proc/drbd
watch /etc/init.d/drbd status
/etc/init.d/drbd stop
update-rc.d -f drbd remove
Corosync
apt-get install pacemaker
Разрешаем запуск
cat /etc/default/corosync
> /etc/default/corosync
echo 'START=yes' >> /etc/default/corosync
Генерируем ключ и копируем его на остальные сервера
Тут соль в том что в момент генерации нужно топтать батон или дергать маус, хз почему так
corosync-keygen
scp -i ~/.ssh/amatei /etc/corosync/authkey root@192.168.8.12:/etc/corosync/authkey
scp -i ~/.ssh/amatei /etc/corosync/authkey root@192.168.8.20:/etc/corosync/authkey
chmod 400 /etc/corosync/authkey
Правим конфиг
nano /etc/corosync/corosync.conf
token: 5000
token_retransmits_before_loss_const: 20
join: 1000
consensus: 7500
bindnetaddr: 192.168.8.0 (На свою подсеть)
Что бы не проделывать монотонную работу, просто скопируем конфиг на оставшиеся машины
scp -i ~/.ssh/amatei /etc/corosync/corosync.conf root@192.168.8.12:/etc/corosync/corosync.conf
scp -i ~/.ssh/amatei /etc/corosync/corosync.conf root@192.168.8.20:/etc/corosync/corosync.conf
Перезагружаем corosync
/etc/init.d/corosync stop
/etc/init.d/corosync start
Если идут блуды с автозагрузкой, то переназначим старт
update-rc.d -f corosync remove
update-rc.d corosync start 90 S . stop 07 0 1 6 .
CRM
Сперва рекомендую произвести очистку, если остались следы от прошлых конфигов
Или если хотите сделать переконфигурацию примитив, но сперва тормозните corosync
cd /var/lib/heartbeat/crm
rm -rf ./cib
Устанавливаем редактор по умолчанию nano, дефолтный vi, мне не нра)))
export EDITOR=/bin/nano
echo "export EDITOR=/bin/nano" >> .bashrc
crm configure edit
!!! Самое главное, если убрали сервер из кластера, удалите его примитивы, что бы не было глюков!!!
Обратить внимание!!! - target-role="started"
В каком порядке добавляете примитивы в таком они выводятся в crm_mon

Создаем примитив для релиза
Тут даем команду на поднятия мастер блока сперва на sifon, потом на boroda, но ни в коем случае не на nodez
crm configure
primitive DRBD ocf:linbit:drbd params drbd_resource="drbd5" drbdconf="/etc/drbd.conf" op start timeout=240s op stop timeout=120s
ms msDRBD DRBD meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
location loc_msDRBD_sifon msDRBD 200: sifon
location loc_msDRBD_boroda msDRBD 100: boroda
location loc_msDRBD msDRBD -inf: nodez
property stonith-enabled=false
configure property no-quorum-policy="ignore"
bye
Тут по аналогии только для другого блока, отведенного под тесты
crm configure
primitive DRBD0 ocf:linbit:drbd params drbd_resource="drbd0" drbdconf="/etc/drbd.conf" op start timeout=240s op stop timeout=120s
ms msDRBD0 DRBD0 meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
location loc_msDRBD0_sifon msDRBD0 100: sifon
location loc_msDRBD0_boroda msDRBD0 200: boroda
location loc_msDRBD0 msDRBD0 -inf: nodez
bye
Создадим примитив для автоматического поднятия релизной KVM-ки на мастер блоке, отведенного для этих нужд
СПЕРВА СОЗДАЕМ KVM-ку, а потом уже примитив!!!
Так что отвлекаемся на раздел **KVM**, после возвращаемся
crm configure
primitive rKVM ocf:heartbeat:VirtualDomain params config="/etc/libvirt/qemu/rKVM.xml" hypervisor="qemu:///system" meta allow-migrate="false" op start timeout="120s" op stop timeout="120s" op monitor depth="0" timeout="30" interval="10"
colocation rKVM_on_drbd inf: rKVM msDRBD:Master
order rKVM_after_drbd inf: msDRBD:promote rKVM:start
bye
Делаем маунт нашего тест раздела
crm configure
primitive mount_sKVM ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mnt/skvm" fstype="ext4" op monitor interval=40s timeout=40s op start timeout=240s op stop timeout=120s
colocation mount_sKVM_on_master inf: mount_sKVM msDRBD0:Master
order mount_sKVM_after_master inf: msDRBD0:promote mount_sKVM:start
bye
Рестартуем демон и проверяем
/etc/init.d/corosync stop
/etc/init.d/corosync start
ps -afe | grep coro
killall -9 corosync
Nginx
apt-get install gcc make
apt-get install libpcre3-dev
apt-get install libssl-dev
wget http://sysoev.ru/nginx/nginx-0.8.53.tar.gz
tar -xzvf nginx-0.8.53.tar.gz
cd nginx-0.8.53
http://sysoev.ru/nginx/docs/install.html
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz
tar -xzvf pcre-8.10.tar.gz
wget http://prdownloads.sourceforge.net/libpng/zlib-1.2.5.tar.gz
tar -xzvf zlib-1.2.5.tar.gz
apt-get install openssl
cd ..
mkdir -p /PATH/nginx
Подсмотреть опции можно так:
./configure --help > configure-man
cat configure-man
./configure --prefix=/PATH/nginx --sbin-path=/PATH/nginx/nginx --conf-path=/PATH/nginx/nginx.conf --pid-path=/PATH/nginx/nginx.pid --error-log-path=/PATH/nginx/error.log --http-log-path=/PATH/nginx/access.log --with-http_ssl_module --with-pcre=/SRC/pcre-8.10 --with-zlib=/SRC/zlib-1.2.5
make clean
make
make install
PATH/nginx/sbin/nginx
killall -9 nginx
ps axu | grep nginx
php-fpm
Не юзал. У Николая есть информация. Никола, с тебя данные!!!

KVM
aptitude install virtinst
aptitude install qemu-kvm libvirt-bin
Это для дэскопа!
apt-get install virt-manager
virsh -c qemu:///system list --all
virsh net-list --all
virt-install --help
Вход в систему
virsh --connect qemu:///system
Показать имеющиеся KVM
virsh -c qemu:///system list --all
Посмотреть имеющиеся хранилища
virsh --connect qemu:///system pool-list --all
Посмотреть образы в выбраном хранилище
virsh --connect qemu:///system vol-list sKVM
Команды для создание KVM
Сперва качаем образ нужной нам системы
ХОТЬ КУДА ТОЛЬКО НЕ В ROOT!!!
cd /home
wget http://mirror.yandex.ru/ubuntu-releases/10.10/ubuntu-10.10-server-amd64.iso
Создание KVM в существующее хранилище
virt-install --name=rKVM --ram=8192 --vcpus=4 --disk path=/dev/drbd5 --accelerate --noautoconsole --connect=qemu:///system --vnc --hvm --os-type=linux --os-variant=generic26 -w bridge:br0 --import
Создание с автозапуском с cdrom-а
virt-install --name=rKVM --ram=8192 --vcpus=4 --disk path=/dev/drbd5 --accelerate --noautoconsole --connect=qemu:///system --vnc --hvm --os-type=linux --os-variant=generic26 --cdrom=/home/ubuntu-10.10-server-amd64.iso -w bridge:br0
Создание шаблона с образом жесткого диска в 4Gb и ОЗУ 1Gb
virt-install --name=tmplKVM --ram=1024 --vcpus=1 --disk path=/mnt/skvm/sys/tmpl.img,size=4 --accelerate --noautoconsole --connect=qemu:///system --vnc --hvm --os-type=linux --os-variant=generic26 --cdrom=/mnt/skvm/iso/ubuntu-10.10-server-amd64.iso -w bridge:br0
Моя KVM-ка отведенная под изучение Gentoo, тут идет сразу создание самого образа
virt-install --name=brdKVM --ram=2047 --vcpus=1 --disk path=/mnt/skvm/sys/brd.img,size=8 --accelerate --noautoconsole --connect=qemu:///system --vnc --hvm --os-type=linux --os-variant=generic26 --cdrom=/mnt/skvm/iso/install-amd64-minimal-20101118.iso -w bridge:br0 --prompt
Создаем под Zabbix
На том сервере, где у нас mount_sKVM
Копия делается с tpmlKVM, tmpl.img дублируется в zabbix.img
Поэтому ни tmplKVM.xml ни tmpl.img как файлы не трогаем и не редактируем
Соответственно без полного осознания, что оно надо)))
virt-clone -o tmplKVM -n zabbix --file=/mnt/skvm/sys/zabbix.img
virsh --connect qemu:///system vol-list sKVM
> /etc/hostname
echo 'zabbix' >> /etc/hostname
passwd root
**********
userdel tmplkvm
useradd zabbix
passwd zabbix
**********
nano /etc/network/interface
static
address 192.168.8.101
/etc/init.d/networking restart
ssh root@192.168.8.101
cat /etc/resolv.conf
echo 'nameserver 8.8.8.8' >> /etc/resolv.conf
Манипуляция с ключами SSH в ручную, пока не автоматизировал)))
И моно уже так:
ssh -i ~/.ssh/amatei root@192.168.8.101
...Дальше zabbix...

Zabbix
Server configuration
apt-get install zabbix-server-mysql zabbix-agent zabbix-frontend-php
MySQL root password
Правим конфиг:
nano /usr/share/zabbix/conf/zabbix.conf.php
$DB["SERVER"] = "127.0.0.1";
$ZBX_SERVER = '192.168.8.101';
admin/zabbix

nano /etc/php5/apache2/php.ini
date.timezone = "Asia/Yekaterinburg"
max_execution_time = 600
max_input_time = 600
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 16M
/etc/init.d/apache2 restart
Настройка web:
nano /etc/zabbix/apache.conf
ps axu | grep zabbix

/etc/init.d/zabbix-server restart

Настраиваем уведомление на почту:
nano /etc/zabbix/zabbix_server.conf
ListenPort=10051
DBHost=127.0.0.1
cd /etc/zabbix/alert.d
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar -xvzf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56
mv ./sendEmail /etc/zabbix/alert.d/
cd ..
rm -rf /etc/zabbix/alert.d/sendEmail-v1.56
rm -rf /etc/zabbix/alert.d/sendEmail-v1.56.tar.gz
clear
touch /etc/zabbix/alert.d/zabbix_sendemail
chmod 755 /etc/zabbix/alert.d/zabbix_sendemail
nano /etc/zabbix/alert.d/zabbix_sendemail
#!/bin/sh
export smtpemailfrom=КОМУ@ДОМЕН.ru
export zabbixemailto="$1"
export zabbixsubject="$2"
export zabbixbody="$3"
export smtpserver=smtp.gmail.com
export smtplogin=ОТ_КОГО@ДОМЕН.ru
export smtppass=ПАРОЛЬ

export metod="tls=yes"
#export metod="ssl=yes"
export port=587
#export port=465
/etc/zabbix/alert.d/sendEmail -f $smtpemailfrom -t $zabbixemailto -u $zabbixsubject -m $zabbixbody -s $smtpserver:$port -xu $smtplogin -xp $smtppass -o $metod
Agent configuration
apt-get install zabbix-agent
nano /etc/zabbix/zabbix_agent.conf
Server=192.168.8.101
nano /etc/zabbix/zabbix_agentd.conf
Server=192.168.8.101
ServerPort=10051
Hostname=192.168.8.101
/etc/init.d/zabbix-agent restart

4 комментария: