# Задания Источник: https://j3ffyang.medium.com/nginx-high-availability-and-load-balancing-with-keepalived-521d44798bff Nginx в настройке с высокой доступностью (HA) активной передачей (HA) на основе KeepAlive. Проект `keepalived` включает в себя три компонента: - демон-watchdog, контролирующий работоспособность двух других компонентов, - реализация сетевого протокола VRRP (Virtual Router Redundancy Protocol), предназначенный для увеличения доступности маршрутизаторов, выполняющих роль шлюза по умолчанию.. - процесс healthcheck для определения того, работает ли служба (например, веб-сервер или сервер базы данных). VRRP гарантирует, что первичный учел в любое время. Резервный узел прослушивает оповещательные пакеты VRRP от первичного узла. Если он не получает оповещательный пакет в течение периода, более в три раза превышаемого заданного интервала, резервный узел берёт на себя функции первичного и назначает настроенный VIP себе. # 0. Подготовка Linux Virtual Server архитектуры Подробно о LVS архитектуре вы можете прочитать в http://www.austintek.com/LVS/LVS-HOWTO/mini-HOWTO/LVS-mini-HOWTO.html. Сконфигурируем машины согласно следующей модели: ``` ________ | | | client | (local or on internet) |________| | Virtual IP | ens18 ____|_____ | | (имеет 2 сетевых интерфейса: | director | - ens18 в vmbr499 в сети 10.160.179.0/24, |__________| - ens19 в vmbrX в сети 192.168.1.0/24) | ens19 -----------------+ | | RIP1 RIP2 ____________ ____________ | | | | | realserver | | realserver | |____________| |____________| ``` Нам потребуется 4 машины: клиент (браузер или командная строка на ноутбуке), машина выполняющая роль балансировщика/роутера/дирижера, две машины с nginx серверами с идентичным содержимым сайта. В качестве машины-балансировщика используйте виртуальную машину studX или любую другую с IP адресом 10.160.179.10+X. Для серверов с nginx используйте IP из сети 192.168.1.0, которые можно вначале сконфигурировать в vlan15+X c организованным доступом в интернет через шлюз 192.168.1.1 и затем перенести в vlanX, где X ваш идентификатор. ## 1. Установите nginx и keepalived на узлы: ``` sudo apt install nginx keepalived ``` # 2. Настройте nginx. ``` include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; merge_slashes off; # set client body size to 2M # client_max_body_size 2M; upstream app.domain.com { server 10.30.10.9:31399; server 10.30.10.5:31399; server 10.30.10.6:31399; server 10.30.10.24:31399; server 10.30.10.22:31399; server 10.30.10.17:31399; server 10.30.10.25:31399; server 10.30.10.32:31399; server 10.30.10.8:31399; server 10.30.10.23:31399; server 10.30.10.15:31399; server 10.30.10.42:31399; } server { ssl_certificate /home/ubuntu/certificates/cert.txt; ssl_certificate_key /home/ubuntu/certificates/key.txt; # include /etc/letsencrypt/options-ssl-nginx.conf; # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; listen 443 ssl; server_name app.domain.com; location / { # proxy_pass https://app.hostname.net:31712/; proxy_pass https://app.domain.com/; } location /api/v1/wsock/websocket { proxy_pass https://app.domain.com; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400; } } ``` # 3. Настройте KeepAlived. На первом сервере: ``` ! Configuration File for keepalived global_defs { ... } vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 50 } vrrp_instance VI_1 { state MASTER interface ens3 virtual_router_id 50 priority 110 advert_int 1 virtual_ipaddress { 10.30.10.100 } track_script { check_nginx } } ``` На втором сервере: ``` ! Configuration File for keepalived global_defs { ... } vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 50 } vrrp_instance VI_1 { state BACKUP interface ens3 virtual_router_id 50 priority 100 advert_int 1 virtual_ipaddress { 10.30.10.100 } track_script { check_nginx } } ``` # 4. Создайте скрипт для проверки работы nginx `/etc/keepalived/check_nginx.sh`. ``` #!/bin/sh if [ -z "`/bin/pidof nginx`" ]; then systemctl stop keepalived.service exit 1 fi # Change mode of the script sudo chmod +x /etc/keepalived/check_nginx.sh ``` # 5. Проверьте, что nginx отвечает, обратившись в виртуальному IP. ``` $ curl http://10.30.10.100 # or curl http://1.2.3.6 Welcome to nginx!

Welcome to nginx web01!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

``` # Релевантные источники - https://ru.wikipedia.org/wiki/VRRP - https://keepalived.readthedocs.io/en/latest/ - http://www.austintek.com/LVS/LVS-HOWTO/mini-HOWTO/LVS-mini-HOWTO.html