Построение учебного кластера

Цель работы: Изучение кластерной технологии, а также понимание всех взаимосвязей виртуальных серверов кластерной системы. Конфигурирования кластерной системы и проверка отказоустойчивости.
Необходимо знать при выполнении лабораторной работы: Linux, работа в консольной строке, конфигурация веб-сервера, установка любой из CMS-систем, установка базы данных MySQL и создание таблиц с данными, конфигурирование сети, теоретическая часть по теме кластерные системы.
Среда виртуализации: VirtualBox
Названия файла для импорта: cluster-ha, cluster-ha_5, cluster-ha_4, cluster-ha_3
Дополнительная информация: На cluster-ha_5, cluster-ha_4, cluster-ha_3 установлено

На cluster-ha установлено:

На cluster-ha_5, cluster-ha_4, cluster-ha_3 установлено:

Ход выполнения: Лабораторная работа разбиты на 4 части.

Первая часть: ознакомление с кластерной системой

Задание 1: Импортируйте виртуальные машину – cluster-ha в VirtualBox и запустите её, после чего перейдите на IP-адрес 192.168.10.160 и убедитесь, что кластерная система работает.
Задание 2: Попробуйте выключить одну из виртуальных машин под названием apache-app1 или apache-app2, после чего проверить работает ли веб-сайт.
Задание 3: После того как вам удалось произвести манипуляции с проверкой отказоустойчивости, необходимо детально рассмотреть архитектуру сети Рисунок 2.

Рисунок 1 Схема кластерной системы.
Кластерная система состоит из 5 виртуальных машин:

Сервера apache-app1 и apache-app2 образуют отказоустойчивую кластерную систему, при отключении одного из серверов его заменит второй.
Сервера loadbalancer-app1 и loadbalancer-app2 образуют кластера балансировки нагрузки, все запросы к веб-серверу распределяются между двумя серверами.
Сервер mysql-app является MySQL базой данных, CMS система на Drupal хранит там опубликованные данные.

Вторая часть: оценка 5

Задание: Импортируйте виртуальные машину – cluster-ha_5 в VirtualBox и запустите её. На Рисунке 3. представлена схема сети учебного кластера, вы импортировали 5 виртуальных машин, каждая из машин не имеет никакой конфигурации. Ваша задача сконфигурировать все 5 виртуальных машин, чтобы в результате получить рабочую кластерную систему.

Рисунок 2 Схема кластерной системы - оценка 5
Этапы Выполнение:

Необходимо самостоятельно настроить NTP – сервер для синхронизации внутренних часов компьютера.

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
apache-app1
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
nano /etc/hosts
Добавляем ip-адреса и имена хостов.
Также необходимо установить необходимые пакеты:
apt-get install update
apt-get install php5 libapache2-mod-php5 php5-mcrypt apache2 mysql-client heartbeat

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
apache-app2
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
nano /etc/hosts
Добавляем ip-адреса и имена хостов.
Также необходимо установить необходимые пакеты:
apt-get install update
apt-get install php5 libapache2-mod-php5 php5-mcrypt apache2 mysql-client heartbeat

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
mysql-app
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
Также необходимо установить необходимые пакеты.
apt-get install mysql-client mysql-server mysql-core

Создаем файл /etc/ha.d/ha.cf со следующим содержанием:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth0
auto_failback on
node apache-app1
node apache-app2
Создаем файл /etc/ha.d/haresources со следующим содержанием:
apache-app1 IPaddr::shared-ip/24/eth0/broadcast
Создадим файл авторизации:
touch  /etc/ha.d/authkeys
Сгенерируем ключ для синхронизации двух серверов
echo -ne "# automatically generated authkeys file \n auth 1 \n 1 sha1 $(dd if=/dev/urandom count=4 2>/dev/null | md5sum | cut -c1-32) \n" >> /etc/ha.d/authkeys
Выставим ему правильные права доступа:
chmod 600 /etc/ha.d/authkeys
Теперь копируем все на второй сервер:
rsync -hogva /etc/ha.d root@ apache-app2:/etc/
Перезагружаем heartbeat на обоих серверах:
/etc/init.d/heartbeat restart
Выполняем ifconfig обнаруживаем, что вот такой вот интерфейс появился – eth0:0.
Для проверки можно отправить apache-app1 в перезагрузку и удостовериться, что eth0:0 с shared-ip поднялся на apache-app2.

Указанные ниже действия нужно провести на обоих серверах.
Для работы Lsyncd нужно, чтобы был предоставлен доступ к каждому из серверов по ключу друг для друга.
Сгенерируем ключ ssh (на вопросы можно просто нажимаем enter):
ssh-keygen
После чего необходимо скопировать сгенерированные ключи на сервера:
С apache-app1 добавляем ключ на apache-app2
ssh-copy-id root@apache-app2
С apache-app2 добавляем ключ на apache-app1
ssh-copy-id root@apache-app1
Создайте директорию для хранения логов и временных файлов lsyncd:
mkdir -p /var/log/lsyncd && mkdir -p /var/www/temp
Создайте файл конфигурации lsyncd по адресу: /etc/lsyncd.conf
Settings {
  logfile    = "/var/log/lsyncd/lsyncd.log",
  statusfile = "/var/log/lsyncd/lsyncd.status",
  nodaemon   = false
}
Sync {
  default.rsyncssh,
  source="/var/www/html",
  host="apache-app1 ",
  targetdir="/var/www/html",
  rsync = {
    archive=true,
    compress=true,
    temp_dir="/var/www/temp",
    update=true,
    links=true,
    times=true,
    protect_args=true
  },
  delay=3,
  ssh = {
    port = 22
  }
}
Запускаем Lsyncd вручную для проверки, что все корректно синхронизируется.
lsyncd /etc/lsyncd.conf
Необходимо написать init-скрипт для для запуска и остановки демона:
Создаем или открываем файл /etc/init.d/lsyncd:
nano /etc/init.d/lsyncd
И вставляем туда следующие:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          lsyncd
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: lsyncd daemon init script
# Description:       This script launches the lsyncd daemon.
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="synchronization daemon"
NAME=lsyncd
DAEMON=/usr/bin/$NAME
CONFIG=/etc/lsyncd.conf
DAEMON_ARGS="${CONFIG}"
PIDFILE=/var/run/${NAME}/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DAEMONUID='root'
 
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
 
# Exit if config file does not exist
[ -r "$CONFIG" ] || exit 0
 
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
[ -d "${PIDFILE}/${NAME}" ] || { mkdir -p "/var/run/${NAME}" && chown "${DAEMONUID}" "/var/run/${NAME}" ; }
 
case "$1" in
  start)
        logger "Starting $DESC" "$NAME"
        echo "Starting $DESC" "$NAME"
        su -l "${DAEMONUID}" -c "${DAEMON} -pidfile ${PIDFILE} ${DAEMON_ARGS}"
        ;;
  stop)
        logger "Stopping $DESC" "$NAME"
        echo "Stopping $DESC" "$NAME"
        kill -TERM "$(cat ${PIDFILE})"
        ;;
  restart|force-reload)
        logger "Restarting $DESC" "$NAME"
        echo "Stopping $DESC" "$NAME"
        kill -TERM "$(cat ${PIDFILE})"
        echo "Starting $DESC" "$NAME"
        su -l "${DAEMONUID}" -c "${DAEMON} -pidfile ${PIDFILE} ${DAEMON_ARGS}"
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac
:
Также необходимо создать задание чтобы он проверял каждую минуту активность демона Lsyncd
Для этого необходимо добавить следящее в crontab:
*/1     *       *       *       *       kill -0 $(cat /var/run/lsyncd/lsyncd.pid 2>/dev/null) 2>/dev/null || { /etc/init.d/lsyncd restart | mail -s 'S' adminmail@gmail.com ; }  
Добавляем Lsyncd в автозагрузку и запустите сервис:
systemctl start lsyncd.service
systemctl enable lsyncd.service

Вам необходимо самостоятельно подготовить сервер с удалённой базой данных, в последствии для установки на него CMS-системы.

Далее ваша задача самостоятельно выбрать CMS-систему для установки её на веб-сервере.

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces и задаём статически ip-адрес:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
loadbalancer-app1
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
nano /etc/hosts
Также необходимо установить необходимые пакеты:
apt-get install php5 libapache2-mod-php5 php5-mcrypt mysql-client heartbeat haproxy

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces и задаём статически ip-адрес:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
loadbalancer-app2
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
nano /etc/hosts
Также необходимо установить необходимые пакеты:
apt-get install php5 libapache2-mod-php5 php5-mcrypt mysql-client heartbeat haproxy

Задача самостоятельно настроить HeartBeat между loadbalancer-app1 и loadbalancer-app2, не забудьте, что два кластера не смогут использовать один порт, который обеспечивает проверку активности другого сервера.

В скрипте init по адресу /etc/default/haproxy присвоим значению enabled 1:
enabled=1
Для проверки, выполним скрипт init без каких-либо параметров. Результат должен быть следующий:
service haproxy restart
Создадим резервную копию оригинального файла, для этого переименуем его:
mv /etc/haproxy/haproxy.cfg.old
Создадим файл haproxy.cfg. С помощью текстового редактора создадим файл в /etc/haproxy/haproxy.cfg следующего содержания:
nano /etc/haproxy/haproxy.cfg
Добавим следующие:
global
    log /dev/log   local0
    log 127.0.0.1   local1 notice
    maxconn 4096
    user haproxy
    group haproxy
    daemon
defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option redispatch
    maxconn 2000
    contimeout     5000
    clitimeout     50000
    srvtimeout     50000
listen webfarm ip-адрес shared-ip кластерабалансировкинагрузки:80
   mode http
   stats enable
   stats uri /haproxy?stats
   balance roundrobin
   option httpclose
   option forwardfor
   server apache ip-адрес shared-ip веб-кластера:80 check
   server apache-app2 ip-адрес apache-app2:80 check
   server apache-app1 ip-адресapache-app1:80 check
Также необходимо сделать на другом балансировки нагрузки:
rsync -hogva /etc/haproxy/haproxy.cfg root@loadbalancer-app2:/etc/haproxy/
Необходимо разрешить HAproxy привязать общий ip адрес, необходимо добавить следующее /etc/sysctl.conf:
net.ipv4.ip_nonlocal_bind=1
И запустить:
sysctl -p
После завершения настройки запустим службу HAproxy на обоих балансировщиках нагрузки:
service haproxy restart
На этом настройка кластерной системы окончена.

Третья часть: оценка 4

Задание: Импортируйте виртуальные машину – cluster-ha_4 в VirtualBox и запустите её. На Рисунке 10. представлена схема сети учебного кластера, вы импортировали 5 виртуальных машин, loadbalancer-app1 и loadbalancer-app2 сконфигурированы и образуют кластер балансировки нагрузки. Ваша задача сконфигурировать 3 виртуальных машин: apache-app1, apache-app2 и mysql-app, чтобы в результате получить рабочую кластерную систему с рабочим веб-сайтом в виде CMS-системы.

Рисунок 10 Схема кластерной системы - оценка 4
Этапы Выполнение:

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
apache-app1
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
nano /etc/hosts
Добавляем ip-адреса и имена хостов.
Также необходимо установить необходимые пакеты:
apt-get install update
apt-get install php5 libapache2-mod-php5 php5-mcrypt apache2 mysql-client heartbeat

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
apache-app2
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
nano /etc/hosts
Добавляем ip-адреса и имена хостов.
Также необходимо установить необходимые пакеты:
apt-get install update
apt-get install php5 libapache2-mod-php5 php5-mcrypt apache2 mysql-client heartbeat

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
mysql-app
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
Также необходимо установить необходимые пакеты.
apt-get install mysql-client mysql-server mysql-core

Создаем файл /etc/ha.d/ha.cf со следующим содержанием:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth0
auto_failback on
node apache-app1
node apache-app2
Создаем файл /etc/ha.d/haresources со следующим содержанием:
apache-app1 IPaddr::shared-ip/24/eth0/broadcast
Создадим файл авторизации:
touch  /etc/ha.d/authkeys
Сгенерируем ключ для синхронизации двух серверов
echo -ne "# automatically generated authkeys file \n auth 1 \n 1 sha1 $(dd if=/dev/urandom count=4 2>/dev/null | md5sum | cut -c1-32) \n" >> /etc/ha.d/authkeys
Выставим ему правильные права доступа:
chmod 600 /etc/ha.d/authkeys
Теперь копируем все на второй сервер:
rsync -hogva /etc/ha.d root@ apache-app2:/etc/
Перезагружаем heartbeat на обоих серверах:
/etc/init.d/heartbeat restart
Выполняем ifconfig обнаруживаем, что вот такой вот интерфейс появился – eth0:0.
Для проверки можно отправить apache-app1 в перезагрузку и удостовериться, что eth0:0 с shared-ip поднялся на apache-app2.

Указанные ниже действия нужно провести на обоих серверах.
Для работы Lsyncd нужно, чтобы был предоставлен доступ к каждому из серверов по ключу друг для друга.
Сгенерируем ключ ssh (на вопросы можно просто нажимаем enter):
ssh-keygen
После чего необходимо скопировать сгенерированные ключи на сервера:
С apache-app1 добавляем ключ на apache-app2
ssh-copy-id root@apache-app2
С apache-app2 добавляем ключ на apache-app1
ssh-copy-id root@apache-app1
Создайте директорию для хранения логов и временных файлов lsyncd:
mkdir -p /var/log/lsyncd && mkdir -p /var/www/temp
Создайте файл конфигурации lsyncd по адресу: /etc/lsyncd.conf
Settings {
  logfile    = "/var/log/lsyncd/lsyncd.log",
  statusfile = "/var/log/lsyncd/lsyncd.status",
  nodaemon   = false
}
Sync {
  default.rsyncssh,
  source="/var/www/html",
  host="apache-app1 ",
  targetdir="/var/www/html",
  rsync = {
    archive=true,
    compress=true,
    temp_dir="/var/www/temp",
    update=true,
    links=true,
    times=true,
    protect_args=true
  },
  delay=3,
  ssh = {
    port = 22
  }
}
Запускаем Lsyncd вручную для проверки, что все корректно синхронизируется.
lsyncd /etc/lsyncd.conf
Необходимо написать init-скрипт для для запуска и остановки демона:
Создаем или открываем файл /etc/init.d/lsyncd:
nano /etc/init.d/lsyncd
И вставляем туда следующие:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          lsyncd
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: lsyncd daemon init script
# Description:       This script launches the lsyncd daemon.
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="synchronization daemon"
NAME=lsyncd
DAEMON=/usr/bin/$NAME
CONFIG=/etc/lsyncd.conf
DAEMON_ARGS="${CONFIG}"
PIDFILE=/var/run/${NAME}/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DAEMONUID='root'
 
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
 
# Exit if config file does not exist
[ -r "$CONFIG" ] || exit 0
 
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
[ -d "${PIDFILE}/${NAME}" ] || { mkdir -p "/var/run/${NAME}" && chown "${DAEMONUID}" "/var/run/${NAME}" ; }
 
case "$1" in
  start)
        logger "Starting $DESC" "$NAME"
        echo "Starting $DESC" "$NAME"
        su -l "${DAEMONUID}" -c "${DAEMON} -pidfile ${PIDFILE} ${DAEMON_ARGS}"
        ;;
  stop)
        logger "Stopping $DESC" "$NAME"
        echo "Stopping $DESC" "$NAME"
        kill -TERM "$(cat ${PIDFILE})"
        ;;
  restart|force-reload)
        logger "Restarting $DESC" "$NAME"
        echo "Stopping $DESC" "$NAME"
        kill -TERM "$(cat ${PIDFILE})"
        echo "Starting $DESC" "$NAME"
        su -l "${DAEMONUID}" -c "${DAEMON} -pidfile ${PIDFILE} ${DAEMON_ARGS}"
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac
:
Также необходимо создать задание чтобы он проверял каждую минуту активность демона Lsyncd
Для этого необходимо добавить следящее в crontab:
*/1     *       *       *       *       kill -0 $(cat /var/run/lsyncd/lsyncd.pid 2>/dev/null) 2>/dev/null || { /etc/init.d/lsyncd restart | mail -s 'S' adminmail@gmail.com ; }  
Добавляем Lsyncd в автозагрузку и запустите сервис:
systemctl start lsyncd.service
systemctl enable lsyncd.service

Для начала нам необходимо, чтобы другие компьютеры могли заходить удаленно на нах сервер, для этого надо mysql прописать адрес, заходим:
nano /etc/mysql/my.cnf
Находи там:
bind-address
И меняем там на адрес вашей машины:
Bind-address = ip-адрес mysql-app
После чего перезагружаем mysql:
service mysql restart
Заходим в mysql:
mysql -u root –p
Создаем базу данных для друпала, так как мы выбрали drupal, как основную cms, то её и будем ставить на нашего сервера:
Create database drupaldb;
После чего даем привилегии нашему пользователю к доступу к базе данных.
Create user drupaluser@localhost identified by 'drupalpassword';
Так же нам необходима, чтобы наши веб сервера тоже имели доступ к базе данных:
Create user 'drupaluser'@'ip-адресapache-app1' identified by 'drupalpassword' identified by 'drupalpassword';
Create user 'drupaluser'@'ip-адресapache-app2' identified by 'drupalpassword' identified by 'drupalpassword';
Даем привилегии нашему веб серверу к доступу к базе данных:
Grant all privileges on drupaldb.* to ' drupaluser'@'ip-адресapache-app1';
Grant all privileges on drupaldb.* to ' drupaluser'@'ip-адресapache-app2';
Записываем все данные вами привилегии:
Flush privileges;
И выходим:
Exit;

Переходим в директорию куда будем качать наш Drupal:
cd /opt
И скачиваем Drupal командой wget:
wget  http://ftp.drupal.org/files/projects/drupal-7.38.tar.gz
Рапаковываем архив:
tar –xzvf  drupal-7.38.tar.gz
И копируем содержимое в /var/www/html:
cp /opt/drupal-7.38/* /var/www/html
После чего даем привилегии:
chown –r www-data:www-data /var/www/html
Заходим с начало на shared-ip и проделываем установку, как показано ниже на Рисунке 11, Рисунке 12, Рисунке 13:
01.png
Рисунок 11 Настройка Drupal
02.png
Рисунок 12 Настройка Drupal
Дальше нам необходимо подключить удалённую базу данных:
Для этого выбираем пункт аdvanced и прописываем ip базы данных
Database name: drupaldb
Database username: drupaluser
03.png
Рисунок 13 Настройка Drupal
Также необходимо перейти в nano /etc/haproxy/haproxy.cfg и прописать ip адреса машин между которыми будет происходить балансировка.
После окончания установки обращаться к нашей кластерной системе будем по ip 192.168.10.160.
На этом установка и настройка кластерной системы закончена.

Часть четвертая: оценка 3

Задание: Импортируйте виртуальные машину – cluster-ha_3 в VirtualBox и запустите её. На Рисунке 9. представлена схема сети учебного кластера, вы импортировали 5 виртуальных машин, apache-app1, apache-app2 и mysql-app сконфигурированы и образуют отказоустойчивый веб-кластер. Ваша задача сконфигурировать 2 виртуальных машин: loadbalancer-app1 и loadbalancer-app2, чтобы в результате получить рабочую кластерную систему с балансировщиками нагрузки.

Рисунок 9 Схема кластерной системы - оценку 3
Этапы Выполнение:

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces и задаём статически ip-адрес:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
loadbalancer-app1
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
nano /etc/hosts
Также необходимо установить необходимые пакеты:
apt-get install php5 libapache2-mod-php5 php5-mcrypt mysql-client heartbeat haproxy

Во-первых, прописываем статический ip-адрес.
Заходим в /etc/network/interfaces и задаём статически ip-адрес:
nano /etc/network/interfaces
И перезагружаем интернет:
service networking restart
После нам необходимо задать имя хоста нашей машины.
Заходим в /etc/hostname:
nano /etc/hostname
И меняем на имя хоста нашей машины:
loadbalancer-app2
После чего необходимо прописать имена хостов и других мешанин, для того чтобы они все друг друга знали по именам.
Для этого заходим в /etc/hosts:
nano /etc/hosts
Также необходимо установить необходимые пакеты:
apt-get install php5 libapache2-mod-php5 php5-mcrypt mysql-client heartbeat haproxy

Создаем файл /etc/ha.d/ha.cf со следующим содержанием:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 695
bcast eth0
auto_failback on
node loadbalancer-app1
node loadbalancer-app2
Создаем файл /etc/ha.d/haresources со следующим содержанием:
loadbalancer-app1 IPaddr::shared-ip/24/eth0/broadcast
Создадим файл авторизации:
touch  /etc/ha.d/authkeys
Сгенерируем ключ для синхронизации двух серверов
echo -ne "# automatically generated authkeys file \n auth 1 \n 1 sha1 $(dd if=/dev/urandom count=4 2>/dev/null | md5sum | cut -c1-32) \n" >> /etc/ha.d/authkeys
Выставим ему правильные права доступа:
chmod 600 /etc/ha.d/authkeys
Теперь копируем все на второй сервер:
rsync -hogva /etc/ha.d root@ loadbalancer-app2:/etc/
Перезагружаем heartbeat на обоих серверах:
/etc/init.d/heartbeat restart
Выполняем ifconfig обнаруживаем, что вот такой вот интерфейс появился – eth0:0.
Для проверки можно отправить apache-app1 в перезагрузку и удостовериться, что eth0:0 с shared-ip поднялся на loadbalancer-app2.

В скрипте init по адресу /etc/default/haproxy присвоим значению enabled 1:
enabled=1
Для проверки, выполним скрипт init без каких-либо параметров. Результат должен быть следующий:
service haproxy restart
Создадим резервную копию оригинального файла, для этого переименуем его:
mv /etc/haproxy/haproxy.cfg.old
Создадим файл haproxy.cfg. С помощью текстового редактора создадим файл в /etc/haproxy/haproxy.cfg следующего содержания:
nano /etc/haproxy/haproxy.cfg
Добавим следующие:
global
    log /dev/log   local0
    log 127.0.0.1   local1 notice
    maxconn 4096
    user haproxy
    group haproxy
    daemon
defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option redispatch
    maxconn 2000
    contimeout     5000
    clitimeout     50000
    srvtimeout     50000
listen webfarm 192.168.10.160:80
   mode http
   stats enable
   stats uri /haproxy?stats
   balance roundrobin
   option httpclose
   option forwardfor
   server apache 192.168.10.150:80 check
   server apache-app2 192.168.10.143:80 check
   server apache-app1 192.168.10.142:80 check
Также необходимо сделать на другом балансировки нагрузки:
rsync -hogva /etc/haproxy/haproxy.cfg root@loadbalancer-app2:/etc/haproxy/
Необходимо разрешить HAproxy привязать общий ip адрес, необходимо добавить следующее /etc/sysctl.conf:
net.ipv4.ip_nonlocal_bind=1
И запустить:
sysctl -p
После завершения настройки запустим службу haproxy на обоих балансировщиках нагрузки:
service haproxy restart

На этом настройка кластерной системы окончена.