пятница, 29 января 2021 г.

Строим отказоустойчивый веб-сервис nginx и keepalived/setup failover web services with nginx keepalived

Настраиваем отказоустойчивый прокси на базе nginx и keepalived.

Представим, что у нас есть 2 ЦОД и у каждого ЦОД на front-end есть свой прокси-сервер, который принимает траффик и перекидывает на back-end.



Версия ПО на момент написания статьи:

CentOS: 8
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: MASTER
nginx -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.

Комментариев нет:

Отправить комментарий