Построение учебного кластера
Цель работы: Изучение кластерной технологии, а также понимание всех взаимосвязей виртуальных серверов кластерной системы. Конфигурирования кластерной системы и проверка отказоустойчивости.
Необходимо знать при выполнении лабораторной работы: 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 хранит там опубликованные данные.
Задание: Импортируйте виртуальные машину – 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
На этом настройка кластерной системы окончена.
Задание: Импортируйте виртуальные машину – 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:
Рисунок 11 Настройка Drupal
Рисунок 12 Настройка Drupal
Дальше нам необходимо подключить удалённую базу данных:
Для этого выбираем пункт аdvanced и прописываем ip базы данных
Database name: drupaldb
Database username: drupaluser
Рисунок 13 Настройка Drupal
Также необходимо перейти в nano /etc/haproxy/haproxy.cfg и прописать ip адреса машин между которыми будет происходить балансировка.
После окончания установки обращаться к нашей кластерной системе будем по ip 192.168.10.160.
На этом установка и настройка кластерной системы закончена.
Задание: Импортируйте виртуальные машину – 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