Настраиваем отказоустойчивый прокси на базе nginx и keepalived.
Представим, что у нас есть 2 ЦОД и у каждого ЦОД на front-end есть свой прокси-сервер, который принимает траффик и перекидывает на back-end.
Версия ПО на момент написания статьи:
CentOS: 8
keepalived: 2.0.10
nginx: 1.14.1
keepalived: 2.0.10
nginx: 1.14.1
hosts:
virtual IP: 192.168.0.190
keepalived + nginx - 1: 192.168.0.108
keepalived + nginx - 2: 192.168.0.109
Схема резервирования такая:
nginx -1: MASTERnginx -2: BACKUP
1. Установка пакетов на двух серверах
yum install nginx keepalived
2. Запуск сервисов и добавляем в автозагрузку при старте
systemctl enable nginx
systemctl enable keepalived
===================================================================
3. Конфиг keepalived на сервере nginx -1: 192.168.0.109
global_defs {
# Keepalived process identifier
router_id nginx
script_user root
enable_script_security
}
# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
state BACKUP
interface enp0s3
virtual_router_id 151
priority 100
nopreempt
# The virtual ip address shared between the two NGINX Web Server which will float
virtual_ipaddress {
192.168.0.190
}
track_script {
check_nginx
}
authentication {
auth_type AH
auth_pass secret
}
}
vrrp_script check_nginx {
script "/root/check_nginx.sh"
interval 2
weight 100
}
===================================================================
4. Конфиг keepalived.conf на сервере nginx -2: 192.168.0.109
global_defs {
# Keepalived process identifier
router_id nginx
script_user root
enable_script_security
}
vrrp_script check_nginx {
script "/root/check_nginx.sh"
interval 2
weight 100
}
# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
state BACKUP
interface enp0s3
virtual_router_id 151
priority 100
preempt
# The virtual ip address shared between the two NGINX Web Server which will float
virtual_ipaddress {
192.168.0.190
}
track_script {
check_nginx
}
authentication {
auth_type AH
auth_pass secret
}
}
===================================================================
5. Shell скрипт проверки PID nginx, который находится в /root/check_nginx.sh
#!/bin/sh
if [ -z "`pidof nginx`" ]; then
exit 1
fi
6. Тестируем результат, останавливаем nginx на сервере nginx -1
service nginx stop
7. Как видим из результата после остановки nginx -1 на первом сервере траффик переключился на nginx -2, и после запуска nginx на первом сервере, траффик переключился обратно на nginx -1.
Комментариев нет:
Отправить комментарий