ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Балансировка нагрузки с HAProxy, Nginx и Keepalived в Linux (CentOS)

Наличие правильной настройки балансировщика нагрузки позволяет вашему веб-серверу надежно обрабатывать высокий трафик, а не обрушится. В этом руководстве мы рассмотрим, как настроить балансировщик нагрузки с высокой доступностью.

Что такое балансировка нагрузки?

Балансировка нагрузки – это процесс распределения рабочих нагрузок на несколько серверов. Это похоже на распределение рабочих нагрузок между дневной сменой и ночной сменой работников в компании. Балансировка нагрузки повышает надежность сервера, поскольку она преодолевает одноточечный сбой.

Обработка трафика на одном сервере

В этом примере, если веб-сервер не работает, веб-запрос пользователя не может быть доступен в режиме реального времени. Кроме того, если число пользователей запрашивает одну и ту же веб-страницу одновременно, то обслуживание веб-запроса пользователя одним веб-сервером может быть медленным процессом. Следовательно, балансировщики нагрузки используются для повышения производительности сервера, обеспечения резервного копирования и предотвращения сбоев.

В этой статье мы собираемся настроить балансировщик нагрузки для веб-сервера с помощью Nginx, HAProxy и Keepalived. Ниже показан пример того, как выглядят серверы с балансировщиками нагрузки.

Балансировка нагрузки с HAProxy, Nginx и Keepalived в Linux
Использование балансировки нагрузки для эффективной обработки высокого трафика

Итак, что такое Nginx, Haproxy и Keepalived?

nginx

Nginx, произносится как Engine-x является веб-сервером с открытым исходным кодом. Он больше, чем просто Веб-сервер, он может работать как обратный прокси-сервер, почтовый прокси-сервер, балансировщик нагрузки, легкий файловый сервер и кэш HTTP. Nginx был использован во многих популярных сайтах, таких как BitBucket, WordPress, Pinterest, Quora и GoDaddy.

HAProxy

HAProxy означает прокси высокой доступности. Это балансировщик нагрузки с открытым исходным кодом, который обеспечивает балансировку нагрузки, высокую доступность и прокси-решения для приложений на основе TCP и HTTP. Он лучше всего подходит для распределения рабочей нагрузки между несколькими серверами для повышения производительности и надежности серверов.

Функция Haproxy заключается в пересылке веб-запроса от конечного пользователя к одному из доступных веб-серверов. Он может использовать различные алгоритмы балансировки нагрузки как Round Robin, Least Connections  и т. д.

Keepalived

Что делать, если haproxy балансировки нагрузки упадет?

Keepalived является программой с открытым исходным кодом, которая поддерживает балансировку нагрузки и высокую доступность. Это в основном программное обеспечение маршрутизации и обеспечивает два типа балансировки нагрузки:

Keepalived может выполнять следующие функции:

Keepalived использования для VIP (виртуальный IP-адрес) как плавающий IP, который плавает между мастером балансировки нагрузки и резервного копирования балансировки нагрузки и используется для переключения между ними. Если главный балансировщик нагрузки отключается, то резервный балансировщик нагрузки используется для пересылки веб-запроса.

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

Настройка балансировщика нагрузки в Linux с помощью Nginx, HAProxy и Keepalived

Настройка балансировщика нагрузки в Linux с помощью Nginx, HAProxy и Keepalived

Это тестовый лабораторный эксперимент, означающий, что это просто тестовая установка, чтобы вы начали. Возможно, вам придется сделать некоторые настройки, если вы реализуете его на реальных серверах. Используйте этот учебник в качестве учебного материала, а не слепо следовать ему для вашей собственной установки.

Мы использовали CentOS в качестве дистрибутива Linux в этой статье. Вы можете использовать другие дистрибутивы Linux, но мы не можем гарантировать, что все команды (особенно установочные) будут работать в других дистрибутивах.

Требования к настройке подсистемы балансировки нагрузки

4 сервера с установленной системой CentOS (минимальная установка достаточно для этого учебника)

В этом учебнике мы работали на следующими IP-адресами в качестве примера. Они могут быть изменены в соответствии с вашей системой. Не думайте, что это статические IP-адреса.

Web-сервер:

LoadBalancer:

Виртуальный IP:

Шаг 1: Настройка веб-серверов с Nginx

В этой части мы будем использовать две системы CentOS в качестве веб-сервера. Сначала нужно установить Nginx на них.

Для этого добавьте репозиторий, содержащий nginx, и установите его оттуда:

yum install epel-release
yum install nginx

 

После установки nginx запустите службу Nginx:

systemctl start nginx

 

Включите службу nginx после каждой загрузки:

systemctl enable nginx

 

Проверка статуса сервиса nginx:

systemctl status nginx

 

Разрешите веб-трафик в nginx, который по умолчанию блокируется брандмауэром CentOS.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd –reload

 

Повторите описанные выше шаги и на веб-сервере второго CentOS.

Теперь обратите внимание на следующие шаги.

Веб-файлы для nginx находится в каталоге /usr/share/nginx/html. Изменение содержимого индекса.html-файл только для идентификации веб-серверов.

Для первого веб-сервера:

echo “this is first webserver” > /usr/share/nginx/html/index.html

 

Для второго веб-сервера:

echo “this is second webserver” > /usr/share/nginx/html/index.html

 

Теперь подтвердите статус веб-сервера, перейдя по следующему URL в браузере: http://SERVER_DOMAIN_NAME или Local_IP_Address. Пример здесь:

http://10.13.211.169

 

или в терминале, curl Local_IP_Address. Пример здесь:

curl 10.13.211.169

 

Вы получите такой выход:

Балансировка нагрузки с HAProxy, Nginx и Keepalived в Linux

Шаг 2: Настройка балансировщиков нагрузки с HAProxy

В двух других системах для установки HAProxy используйте следующие команды:

yum -y update
yum -y install haproxy

 

Файл конфигурации HAProxy находится в каталоге /etc/haproxy. Перейдите в каталог и создайте резервную копию файла перед редактированием.

cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg_bac

 

Создайте новый файл haproxy.cfg и откройте файл с помощью любого редактора, который Вам нравится.

touch haproxy.cfg
vim haproxy.cfg

 

Теперь вставьте следующие строки в файл:

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000

#frontend
#---------------------------------
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back

#round robin balancing backend http
#-----------------------------------
backend http_back
balance roundrobin
#balance leastconn
mode http
server webserver1 10.13.211.169:80 check    # ip_address_of_1st_centos_webserver
server webserver2 10.13.211.158:80 check    # ip_address_of_2nd_centos_webserver

 

Теперь включите и запустите службу HAProxy.

systemctl enable haproxy
systemctl start haproxy

 

Проверка состояния HAProxy:

systemctl status haproxy

 

Перейдите по url в браузере, чтобы подтвердить сервис haproxy: http://load balancer’s IP Address/haproxy?stats. Пример, используемый здесь:

http://10.13.211.194/haproxy?stats

 

или в терминале, используйте команду $ curl LoadBalancer_IP_Address

curl 10.13.211.194
curl 10.13.211.194

 

curl два раза, и вы увидите различные выходы для команды curl. Это происходит из-за того, что ответ поступает от разных веб-серверов (по одному за раз), для вашего запроса в подсистеме балансировки нагрузки.

Выходные данные будут выглядеть следующим образом:

Балансировка нагрузки с HAProxy, Nginx и Keepalived в Linux

Шаг 3: Настройка высокой доступности с Keepalived

Keepalived должен быть установлен в обеих системах haproxy load balancer CentOS (которые мы только что настроили выше). Один действует как главный (основной балансировщик нагрузки), а другой действует как резервный балансировщик нагрузки.

В обеих системах выполните следующую команду:

yum install -y keepalived

 

Конфигурационный файл Keepalived находится на файле /etc/keepalived/keepalived.conf. Создайте резервную копию исходного файла поддержки.conf и используйте следующую конфигурацию в новом файле keepalived .conf.

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bac
touch /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf

 

Вставьте следующие строки в файл конфигурации (не забудьте изменить адреса электронной почты):

global_defs {
notification_email {
andreyex.ru
andreyex@gmail.com
}
notification_email_from master@andreyex.ru
smtp_server 10.13.211.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface eth0 #введите имя интерфейса. [чтобы увидеть имя интерфейса: $ ip a ]
virtual_router_id 51
priority 101 # 101 для мастера. 100 для резервного копирования. [приоритет мастера> приоритет резервного копирования]
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #пароль
}
virtual_ipaddress {
10.13.211.10 # используйте виртуальный ip-адрес.
}
}

 

Отредактируйте файл конфигурации в соответствии с системным предположением. Позаботьтесь о главной и резервной конфигурации. Сохраните файл и запустите и включите процесс Keepalived:

systemctl start keepalived
systemctl enable keepalived

 

Просмотр состояния Keepalived:

systemctl status keepalived

 

Теперь, чтобы проверить состояние балансировщика нагрузки высокой доступности, перейдите к терминалу и нажмите:

$ while true; do ; curl 10.13.211.10 ; sleep 1; done;

 

Нажмитеctrl+c , чтобы остановить запущенный терминал.

Выходные данные будут выглядеть следующим образом:

Балансировка нагрузки с HAProxy, Nginx и Keepalived в Linux

 

Мы надеемся, что этот учебник помог вам настроить балансировщик нагрузки в Linux с высокой доступностью. Конечно, это была простая настройка, но она определенно дает представление о балансировке нагрузки и обработке высокой доступности.

Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже

Exit mobile version