Масштабирование – это процесс, при котором используется несколько серверов для обслуживания одного веб-приложения.
Как правило, масштабирование выполняется путём разделения веб-сервера и базы данных и добавления резервных систем к каждому компоненту.
В данной статье продемонстрировано, как добавить резервный веб-сервер для размещения приложения. Эти серверы Apache (в статье они называются Server A и Server B) будут использовать nginx для балансировки нагрузки.
Во всех примерах руководства используются следующие данные:
Server A: 1.2.3.4.
Server B: 4.3.2.1
1: Настройка Nginx
Nginx позволяет настроить распределение нагрузки веб-сайта.
Для начала нужно установить Nginx на Server A.
sudo apt-get install nginx php5-fpm
После установки нужно настроить Nginx. Отредактируйте /etc/nginx/sites-enabled/default, указав IP-адреса и номера портов, на которых запущен сайт.
sudo nano /etc/nginx/sites-enabled/default
Чтобы предоставить Nginx все необходимые данные, используйте блок кода upstream. Ниже приведен пример блока Nginx с подробными объяснениями.
upstream nodes {
ip_hash;
server 1.2.3.4:8080 max_fails=3 fail_timeout=30s;
server 4.3.2.1:8080 max_fails=3 fail_timeout=30s;
}
Первая строка определяет блок upstream по имени nodes, а последняя строка закрывает этот блок.
В целом, никаких ограничений на количество блоков upstream нет, единственное условие – они должны иметь уникальные имена.
Очень важны строки server; они определяют IP-адреса и порты, которые слушают веб-серверы.
Имейте в виду, что этот IP-адрес может быть адресом сервера, на котором запущен Nginx.
Примечание: Рекомендуется заменить порт 80 каким-либо нестандартным значением.
Рекомендуется не использовать стандартный HTTP-порт, чтобы конечные пользователи не могли случайно Наткнуться на какой-либо из отдельных серверов, используемых для балансировки нагрузки веб-сервера.
Кроме того, в качестве превентивной меры можно использовать брандмауэр, так как все веб-подключения к любому из серверов в блоке upstream исходят из IP-адреса сервера, на котором запущен Nginx. рекомендации по повышению безопасности веб-сервера можно найти далее в этой статье.
Затем нужно настроить Nginx для обслуживания и передачи запросов на определенное имя хоста. Это можно сделать при помощи блока virtualhost, в котором находится строка proxy_pass.
server {
listen 1.2.3.4:80;
root /path/to/document/root/;
index index.html index.htm;
server_name domain.tld www.domain.tld;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location / {
proxy_pass http://nodes;
}
}
Этот блок содержит несколько ключевых настроек, среди которых блок location и строки listen и server_name.
Не забудьте указать свой document root.
Строки listen и server_name – стандартные элементы конфигураций, указывающие IP-адрес и порт, который прослушивает веб-сервер, соответственно.
Поскольку Server A будет служить и как конечная точка, к которой подключаются пользователи, и в качестве одного из серверов с балансировкой нагрузки, нужно создать второй блок virtualhost, прослушивающий нестандартный порт для входящих соединений.
server {
listen 127.0.0.1:8080;
root /path/to/document/root/;
index index.html index.htm index.php;
server_name domain.tld www.domain.tld;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
После этого перезапустите nginx:
sudo service nginx reload
2: Настройка nginx на Server B
На сервере по имени Server B необходимо создать аналогичный блок virtualhost, чтобы сервер мог отвечать на запросы к домену. Он очень похож на последний блок кода, внесенный в конфигурации Server A.
server {
listen 4.3.2.1:8080;
root /path/to/document/root/;
index index.html index.htm index.php;
server_name domain.tld www.domain.tld;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Перезапустите nginx на втором сервере:
sudo service nginx reload
Это всё, что нужно было сделать на этом сервере!
Одним из недостатков веб-серверов с балансировкой нагрузки является потенциальное нарушение синхронизации данных между этими серверами.
Для устранения этой проблемы можно использовать репозиторий Git, который будет синхронизировать данные серверов.