Понадобилось посмотреть как работает веб кластер. Я буду ставить nginx как балансер и apache веб сервера. Схема работы примерно будет такая:
На первый раз обойдусь без БД MySQL и централизованного хранилище.
Далее все будет усложняться)
Краткое содержание:
1. Вводные данные
2. Прописываем имена хостов
3. Настройка балансировщика СЕРВЕР 1/192.168.0.25
4. Настройка сервер №2/192.168.0.26 и сервер №3/192.168.0.27
5. Проверка
1. Вводные данные
Дано три сервера:
1. Балансировщик NGNIX | ИМЯ ХОСТА - sloadbal01.asia.local | 192.168.0.25
2. Веб сервер Apache1 | ИМЯ ХОСТА - swebapp01.asia.local | 192.168.0.26
3. Веб сервер Apache2 | ИМЯ ХОСТА - swebapp02.asia.local | 192.168.0.27
Пока что сделаем простую балансировку с тестовым сайтом (Hello World).
4. Гипотетическое имя сайта - www.asia.local
2. Прописываем имена хостов
Откроем файл /etc/hosts на балансировщике:
# vi /etc/hosts
И впишем туда хосты:
192.168.0.25 sloadbal01.asia.local nball1
192.168.0.26 swebapp01.asia.local apache1
192.168.0.27 swebapp02.asia.local apache2
3. Настройка балансировщика СЕРВЕР 1/192.168.0.25
Установка NGINX - Вариант 1:
# yum -y install epel-release
# yum -y install nginx
Установка NGINX - Вариант 2:
Создаем файл nginx.repo
# vi /etc/yum.repos.d/nginx.repo
И добавляем туда текст:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Сохраняем его.
# yum -y install nginx
Сохраняем оригинальный конфигурационный файл nginx:
# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.orig
Редактируем новый конфиг файл NGINX, добавляем в конец файла настройки:
# vi /etc/nginx/conf.d/default.conf
upstream website1 {ip_hash;server swebapp01.asia.local weight=1;server swebapp02.asia.local weight=1;}
И добавляем после головную настройку:
server {listen 80; # Listen on the external interfaceserver_name www.asia.local;location / {proxy_pass http://website1;}}
Настройка сервер №2/192.168.0.26 и сервер №3/192.168.0.27
Здесь действия повторяются на двух серверах 1 и 2, за исключением HTML строчки "apache1.loadbalance.me" - наш "Hello World":
# yum -y install epel-release
# yum -y install httpd
# cd /var/www/html/
На втором веб сервере вводим команду:
# echo "<h1>apache1.loadbalance.me</h1>" > index.html #For apache1 server
На веб сервере третьем сервере вводим команду:
# echo "<h1>apache2.loadbalance.me</h1>" > index.html #For apache2 server
Стартуем ngnix:
# systemctl enable httpd
# systemctl start httpd
ПРОВЕРКА
Желательно для тестовых целей, прописать на ПК откуда будете проверятся работа балансера, хостнейм балансера в файле hosts (C:\windows\System32\drivers\etc\hosts)
В итоге я прописал:
192.168.0.25 asia.local
Далее заходим через браузер на сайт - asia.local:
Здесь видим, что нас перекинули на второй веб сервер веб кластера.
Если отключить данный веб сервер или его сетевой адаптер. Нас перекинет на первый веб сервер кластера:
И пытаемся обновить страницу (сайт тупит секунд 20) и далее открывается страница с первого веб сервера кластера:
Если включить сетевой адаптер второго сервера, клиента опять перекинет на этот сервер. При чем это происходит за секунды.
Ссылки:
Load balancing web servers with nginx on CentOS 6
Building a Highly-Available Load Balancer with Nginx and Keepalived on CentOS
How to Configure Load Balancing with Nginx
«Идеальный» www кластер. Часть 1. Frontend: NGINX + Keepalived (vrrp) на CentOS