You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
10 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Задания
## 1.
Настройте nginx в high available конфигурации с помощью модуля nginx - `ngx_http_upstream_module`. Сконфигурируйте nginx на трёх виртуальных машинах. Для тестировании используйте машину отличную от этих трёх.
Пример конфигурации 1:
```
________
| |
| клиент | (ноутбук)
|________|
|
роутер public IP 193.32.63.185:[22,80,443] -> private IP 10.160.179.25:[22,80,443]
|
| ens18 в vlan499 с доступом в интернет с IP 10.160.179.25/24
_______|_______
| |
| proxy |
|_______________|
| ens19 в vlan X с IP 192.168.X.1/24
|
+---------+--------+
| 192.168.X.2/24 | 192.168.X.3/24
___________ ___________
| | | |
| nginx 1 | | nginx 2 |
|___________| |___________|
```
Пример конфигурации 2:
```
________
| |
| клиент | (ноутбук)
|________|
|
роутер 193.32.63.185:[22,80,443] -> 10.160.179.25:[22,80,443]
|
+--------------------+---------------------+
| 10.160.179.25/24 | 10.160.179.180/24 | 10.160.179.181/24
_______|_______ ___________ ___________
| | | | | |
| proxy | | nginx 1 | | nginx 2 |
|_______________| |___________| |___________|
```
Для конфигурации 2 используйте IP из блоков по 10 адресов, согласно следующему списку соответствий `X - первый IP блока`:
```
1 - 10.160.179.40/24 | 6 - 10.160.179.90/24 | 11 - 10.160.179.140/24
2 - 10.160.179.50/24 | 7 - 10.160.179.100/24 | 12 - 10.160.179.150/24
3 - 10.160.179.60/24 | 8 - 10.160.179.110/24 | 13 - 10.160.179.160/24
4 - 10.160.179.70/24 | 9 - 10.160.179.120/24 | 14 - 10.160.179.170/24
5 - 10.160.179.80/24 | 10 - 10.160.179.130/24 | 15 - 10.160.179.180/24
```
На машинах `nginx 1` и `nginx 2` установите nginx, отредактируйте приветственную страницу по-умолчанию `/var/www/html/index.nginx-debian.html`, добавив номер сервера и проверьте, что сайт доступен по локальному адресу стандартному порту 80.
Отредактируйте конфигурацию по-умолчанию `/etc/nginx/sites-enabled/default`. Используйте блок `upstream` на машине `proxy` для настройки прокси-сервера с функцией балансировки нагрузки и резервирования. Укажите в блоке ip адреса двух серверов `nginx 1` и `nginx 2` и укажите для одного из них параметр `backup` (этот узел будет резервным). Пример конфигурации 2 для stud15:
```
upstream backend {
server 10.160.179.180;
server 10.160.179.181 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
```
Проверьте работоспособность сайта по адресу прокси сервера для случаев когда `nginx 1` и `nginx 2` виртуальные машины включены, отключена основная, отключена резервная.
## 2.
Настройте nginx в high available конфигурации с проекта keepalived.
Проект `keepalived` включает в себя три компонента:
- демон-watchdog, контролирующий работоспособность двух других компонентов,
- реализация сетевого протокола VRRP (Virtual Router Redundancy Protocol), предназначенный для увеличения доступности маршрутизаторов, выполняющих роль шлюза по умолчанию,
- процесс healthcheck для определения того, работает ли служба (например, веб-сервер или сервер базы данных).
VRRP гарантирует, что основной узел keepalived доступен в любое время. Резервный узел прослушивает оповещательные пакеты VRRP от первичного узла. Если он не получает оповещательный пакет в течение периода, более в три раза превышаемого заданного интервала, резервный узел берёт на себя функции первичного и назначает настроенный VIP себе.
Это задание можно выполнить в разных конфигурациях. Настроим для следующей:
```
________
| |
| клиент | (ноутбук)
|________|
|
роутер public IP 193.32.63.185:[22,80,443] -> private IP 10.160.179.25:[22,80,443]
|
+---------+--------+
| | 10.160.179.25/24 в роли virtual IP
| ens19 | ens19
___________ ___________
| | | |
| nginx 3 | | nginx 4 |
|___________| |___________|
| ens18 в vlan X | ens18 в vlan X
| 192.168.X.1/24 | 192.168.X.2/24
+-------------------+
```
Нам потребуется 3 машины: клиент (браузер или командная строка на ноутбуке), две машины с `nginx` c настроенным по-умолчанию сайтом.
## 2.1
Установите nginx и keepalived на `nginx 3` и `nginx 4`:
```
sudo apt install nginx keepalived
```
## 2.2
Отредактируйте приветственную страницу по-умолчанию `/var/www/html/index.nginx-debian.html`, добавив номер сервера и проверьте, что сайт доступен по локальному адресу стандартному порту 80.
## 2.3
Настройте keepalived на обоих узлах, используя следующую конфигурацию `/etc/keepalived/keepalived.conf` согласно схеме приведённой выше. Пример конфигурации для узла `nginx 3`:
```
global_defs {
vrrp_version 3
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
}
vrrp_instance VI1 {
state MASTER
interface ens19
virtual_router_id 1
priority 110
advert_int 1
mcast_src_ip 192.168.X.1
virtual_ipaddress {
10.160.179.25/24
}
virtual_routes {
default via 10.160.179.1
}
track_script {
chech_nginx
}
}
```
Служебная информация (vrrp-объявления от keepalived-лидера о том, что узел работоспособен) будет передаваться через сетевой интерфейс ens18 vlanX. Работоспособность узла отслеживается скриптом `chech_nginx`, указанным в блоке `track_script`. Скрипт настраивается в блоке `vrrp_script`, где указывается путь к исполняемому файлу и другие параметры. Keepalived пакет предоставляет документацию man для конфигурационного файла - `man keepalived`.
Поменяйте параметр `state` на `BACKUP` и уменьшите параметр `priority` для резервного узла, поменяйте адрес `mcast_src_ip`, используемый для передачи служебной информации.
На обеих машинах создайте скрипт для проверки работы nginx `/etc/keepalived/check_nginx.sh` и отключения `keepalived` процесса, в случае неработоспособности nginx сервиса (не найден pid процесса nginx).
```
#!/bin/sh
if [ -z "`/bin/pidof nginx`" ]; then
systemctl stop keepalived.service
exit 1
fi
```
## 2.4
Проверьте работоспособность сайта по адресу `http://IP` (IP - virtual IP или соответствующему ему белому IP по адресу) для случаев когда `nginx 3` и `nginx 4` виртуальные машины включены, отключена основная, отключена резервная. Выведите информацию о назначенных IP для сетевых интерфейсов для каждого случая.
# 3.
Дополнительное задание.
Модифицируйте настройки на машинах первого и второго задания для обеспечения балансировки нагрузки.
# Релевантные источники
- https://nginx.org/ru/docs/http/ngx_http_upstream_module.html
- https://ru.wikipedia.org/wiki/VRRP
- `man keepalived.conf`, https://www.keepalived.org/manpage.html (на данный момент лучшая документация, идеально отражающая и документирующая все доступные функции)
- https://keepalived.readthedocs.io/en/latest/ (эта документация является устаревшей, поскольку является частичной и не отражает полный набор доступных функций)
- https://datatracker.ietf.org/doc/html/rfc2338
- http://www.austintek.com/LVS/LVS-HOWTO/mini-HOWTO/LVS-mini-HOWTO.html