Site icon 8HOST.COM

Масштабирование веб-приложений в Ubuntu 12.10

Масштабирование – это процесс, при котором используется несколько серверов для обслуживания одного веб-приложения.

Как правило, масштабирование выполняется путём разделения веб-сервера и базы данных и добавления резервных систем к каждому компоненту.

В данной статье продемонстрировано, как добавить резервный веб-сервер для размещения приложения. Эти серверы 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, который будет синхронизировать данные серверов.