| 
						
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -1,197 +1,169 @@
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# Задания
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Источник: https://j3ffyang.medium.com/nginx-high-availability-and-load-balancing-with-keepalived-521d44798bff
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				## 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` виртуальные машины включены, отключена основная, отключена резервная.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Nginx  в настройке с высокой доступностью (HA) активной передачей (HA) на основе KeepAlive.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				## 2.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Настройте nginx в high available конфигурации с проекта keepalived. 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Проект `keepalived` включает в себя три компонента:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- демон-watchdog, контролирующий работоспособность двух других компонентов,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- реализация сетевого протокола VRRP (Virtual Router Redundancy Protocol), предназначенный для увеличения доступности маршрутизаторов, выполняющих роль шлюза по умолчанию..
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- реализация сетевого протокола 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 ваш идентификатор.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				VRRP гарантирует, что основной узел keepalived доступен в любое время. Резервный узел прослушивает оповещательные пакеты VRRP от первичного узла. Если он не получает оповещательный пакет в течение периода, более в три раза превышаемого заданного интервала, резервный узел берёт на себя функции первичного и назначает настроенный VIP себе.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				## 1.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Установите nginx и keepalived на узлы:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Это задание можно выполнить в разных конфигурациях. Настроим для следующей:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				sudo apt install nginx keepalived
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                ________
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				               |        |
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				               | клиент | (ноутбук)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				               |________|
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                   |
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                 роутер  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
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				         +-------------------+
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# 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 машины: клиент (браузер или командная  строка на ноутбуке), две машины с `nginx` c настроенным по-умолчанию сайтом.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				## 2.1
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Установите nginx и keepalived на `nginx 3` и `nginx 4`:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				sudo apt install nginx keepalived
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# 3.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Настройте KeepAlived.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				## 2.2
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Отредактируйте приветственную страницу по-умолчанию `/var/www/html/index.nginx-debian.html`, добавив номер сервера и проверьте, что сайт доступен по локальному адресу стандартному порту 80. 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				На первом сервере:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				## 2.3
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Настройте keepalived на обоих узлах, используя следующую конфигурацию `/etc/keepalived/keepalived.conf` cогласно схеме приведённой выше. Пример конфигурации для узла `nginx 3`:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				! Configuration File for keepalived
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				global_defs {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				...
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  vrrp_version 3
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				vrrp_script check_nginx {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    script "/etc/keepalived/check_nginx.sh"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    interval 2
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    weight 50
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  script "/etc/keepalived/check_nginx.sh"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  interval 2
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				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
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				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
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				На втором сервере:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				! 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
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Cлужебная информация (vrrp-объявления от keepalived-лидера о том, что узел работоспособен) будет передаваться через сетевой интерфейс ens18 vlanX. Работоспособность узла отслеживается скриптом `chech_nginx`, указанным в блоке `track_script`. Скрипт настраивается в блоке `vrrp_script`, где указывается путь к исполняемому файлу и другие параметры. Keepalived пакет предоставляет документацию man для конфигурационного файла - `man keepalived`.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# 4.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Создайте скрипт для проверки работы nginx `/etc/keepalived/check_nginx.sh`.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Поменяйте параметр `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
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# 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
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<!DOCTYPE html>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<html>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<head>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<title>Welcome to nginx!</title>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<style>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    body {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        width: 35em;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        margin: 0 auto;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        font-family: Tahoma, Verdana, Arial, sans-serif;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				</style>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				</head>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<body>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<h1>Welcome to nginx web01!</h1>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<p>If you see this page, the nginx web server is successfully installed and
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				working. Further configuration is required.</p>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<p>For online documentation and support please refer to
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<a href="http://nginx.org/">nginx.org</a>.<br/>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Commercial support is available at
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<a href="http://nginx.com/">nginx.com</a>.</p>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				<p><em>Thank you for using nginx.</em></p>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				</body>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				</html>
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				## 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
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- https://keepalived.readthedocs.io/en/latest/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- http://www.austintek.com/LVS/LVS-HOWTO/mini-HOWTO/LVS-mini-HOWTO.html
 |