Установка и настройка отказоустойчивого балансировщика нагрузки на Debian на основе Keepalived для бэкэндов php-fpm.

Установка и настройка отказоустойчивого балансировщика нагрузки на Debian(ubuntu) на основе Keepalived для бэкэндов php-fpm.

1.Конфигурация.

Операционная система: debian 8 minimal(net install) с доступом по ssh.

Server1: lb1.domain.local 10.4.1.181 – основной loadbalancer(MASTER)

Server2: lb.domain.local 10.4.1.182– резервный loadbalancer(BACKUP) и т.д. На обоих серверах по 2 сети, одна из которых смотрит в инет и будет иметь у активного балансера ip 190 (eth1).

VIP(virtual IP) – 10.4.1.190 — плавающий/расшаренный между балансировщиками нагрузки виртуальный IP-адрес,на который прописаны сайты в DNS. Можно использовать больше балансировщиков, для большей отказоустойчивости, например 4. Просто будем менять все(приоритет у серверов)

Кластер из для обработки web-приложений — 2 ноды, которые будут полностью дублировать друг-друга.

Web-server-1: nginx+php-fpm+gluserfs+mysql(with replication — с репликацией). ip 10.4.1.151

Web-server-2: nginx+php-fpm+gluserfs+mysql(with replication — с репликацией). ip 10.4.1.152

Что мы получим в итоге. По обращение по ip 10.4.1.190 мы всегда будем иметь рабочий сайт(если не упадут 2 машины ))) ), так же при падении одной из машин,или падению nginx’a будем  получать уведомление по e-mail. В общем, получим отказоустойчивое решение, что немаловажно в наше время в ввиду повсеместного перевода всех бизнес-процессов в сеть и соответсвенно простой сервиса — потеря прибыли(убыток).

2.Установка и настройка Keepalived на балансерах

(в зависимостях подтянет ipvsadm-утилиту для администрирования ipvs (ip virtul server)). Саму балансировку настроим в самом конце, после всех манипуляций со всеми нодами. так же установим sendmail для отправки оповещений.

Включаем маршрутизацию пакетов на обоих балансерах

Проверяем
sysctl -p

Видим:

net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

Двигаемся далее —  редактируем lb1(1-ый балансировщик);

Здесь мы настроили сервис — наш сервер-1 будет главным  — state master, вес ему поставили 101(далее другим ставим меньше на один), обратите внимание на virtaul_router_id — у нашей связки он должен быть одним, будет опрелять кластер из наших серверов ( в данном случае ставим 52 на всех), так же обратите внимание на auth_pass — пароль для нашего кластера. virtual_ipaddress — виртуальный адресс нашего кластера keepalived.

Виртуальный ip мы повешаем на первую(eth0) сетевую карту, можно это сделать и на вторую(eth1) — как хотите, это не принципиально.
Запускаем keepalived

Проверяем его

Видим это

Далее на втором серваке — lb2 (server балансировщик 2);

Здесь все аналогично первому, только роль backup и вес поменьше. Всё ок.

Запускаем keepaliver

Проверяем его

Видим это(если первый сервак выключить или остановить keepalived на 1 серваке)

Небольшое отступление. На самом деле настроек keepalived.conf очень много, ниже я приведу конфиг, в котором они описаны( на англ) для ознакомления

Вот такой вот конфиг мануал.

3.Настройка проксирования и балансировки  на nginx на lb1 и lb2.

Теперь настроим наши сервера на, чтобы они слушали другие сервера в нашей сети с php+mysql на борту и распределяли между ними нагрузку, и в случае выхода одного из серверов переключались на другой.

Установим nginx

Правим конфиги на обоих серваках

Как мы видим на наш nginx будут слушать и распределять нагрузку между нашими 2 серверами с ip 10.4.1.151 и 10.4.1.152. На нах будет крутиться php-fpm+nginx+mysql+gluster-fs.  В принципе вы можете иметь сколько угодно реплицируемых серверов.О их настройке будет написано ниже.

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

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *