diff --git a/module2/03_nginx_ha/tasks.md b/module2/03_nginx_ha/tasks.md new file mode 100644 index 0000000..691967f --- /dev/null +++ b/module2/03_nginx_ha/tasks.md @@ -0,0 +1,197 @@ +# Задания + +Источник: 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 \ No newline at end of file