Горизонтальное масштабирование приложения Laravel 4 и базы данных PostgreSQL
Debian, VPS | Комментировать запись
Существует два способа масштабирования приложения, сервиса, сервера и т.п. Первый способ – вертикальное масштабирование (или Scale up), которое подразумевает добавление вычислительных ресурсов к уже запущенному серверу; второй – горизонтальное масштабирование (Scale out), которое подразумевает разбиение функций между несколькими машинами и создание более фрагментированной системы.
К примеру, что делать, если в системном журнале машины постоянно появляются сообщения об ошибках памяти (out of memory)? Иногда имеет смысл увеличить RAM или добавить своп-файл. Однако в некоторых случаях сервер баз данных увеличивается до огромнейшего количества записей, а веб-сервер перестает справляться с объемом трафика; в такой ситуации лучше создать более управляемую (и, что важно, более продуктивную) среду. Решением проблемы может стать разделение веб-сервера и сервера базы данных на отдельные машины. Это и есть горизонтальное масштабирование.
Требования
- Два предварительно настроенных виртуальных сервера Debian 7. Чтобы получить инструкции по настройке сервера Debian, читайте данную статью.
- Базовые знания и навыки работы с Linux.
- Фреймворк Laravel, предварительно установленный на один из серверов. По этой ссылке можно найти полезное руководство по установке NGINX + Laravel 4.
Важно! Не устанавливайте базу данных на один сервер с Laravel.
Ради простоты первый сервер с установленными Laravel и Nginx будет называться сервером 1 (IP 192.0.2.5), а второй сервер с базой данных PostgreSQL будет называться сервером 2 (IP 192.0.2.1).
Подготовка базы данных
На первый взгляд, горизонтальное масштабирование – довольно простое понятие, но все становится гораздо сложнее с появлением более продвинутых его аспектов (как репликация баз данных и балансировка нагрузки). Однако данное руководство охватывает только базовое разделение сервисов: фронт-энда веб-сервера и бэк-энда базы данных. К счастью, при работе с PostgreSQL и Laravel сделать это достаточно просто.
Для начала нужно установить PostgreSQL на сервер 2.
sudo apt-get install postgresql
Затем создайте базу данных и пользователя с соответствующими привилегиями для работы с БД. Для этого нужно войти в PostgreSQL:
sudo -u postgres psql
Чтобы создать пользователя БД:
CREATE USER databaseuser WITH PASSWORD 'password';
GRANT CREATE ON SCHEMA public TO databaseuser;
GRANT USAGE ON SCHEMA public TO databaseuser;
Затем создайте БД, принадлежащую только что созданному пользователю, и выйдите из PostgreSQL:
CREATE DATABASE mydatabase WITH OWNER databaseuser;
\q
Теперь серверу 2 необходимо указать, что сервер 1 готов к соединению. PostgreSQL предоставляет файл проверки подлинности клиента, благодаря чему это очень легко сделать.
sudo nano /etc/postgresql/9.1/main/pg_hba.conf
В этот файл добавьте строку, которая содержит соединение, имя и пользователя базы данных, адрес и способ подключения:
# IPv4 local connections:
host mydatabase databaseuser 192.0.2.5/32 md5
Сохраните и закройте файл. Затем откройте postgresql.conf и найдите строку listen_addresses = ‘localhost’.
sudo nano /etc/postgresql/9.1/main/postgresql.conf
listen_addresses = '192.0.2.1'
Чтобы принимать любое соединение, это значение можно заменить таким образом:
listen_addresses = '*'
Сохраните и закройте файл. Перезапустите PostgreSQL.
sudo service postgresql restart
Настройка Laravel
Сначала нужно предоставить PHP некоторые данные о работе с PostgreSQL. Для этого необходимо установить расширение php5-pgsql.
sudo apt-get install php5-pgsql
sudo service php5-fpm restart
Затем нужно сообщить Laravel о местонахождении сервера 2 и том, как получить доступ к нему. Следуя приведенному выше руководству по установке NGINX + Laravel, Laravel можно найти в /var/www/laravel.
sudo nano /var/www/laravel/app/config/database.php
Теперь нужно использовать драйвер Laravel для PostgreSQL.
'default' => 'pgsql',
Затем предоставьте информацию о сервере PostgreSQL:
'pgsql' => array(
'driver' => 'pgsql',
'host' => '192.0.2.1',
'database' => 'mydatabase',
'username' => 'databaseuser',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
),
Сохраните и закройте файл.
Тестирование соединения
Чтобы проверить соединение, при помощи командной строки запустите миграцию, что поможет собрать таблицы БД.
Примечание: миграция не требует установки дополнительных пакетов. Laravel поставляется со всеми инструментами и командами, необходимыми для взаимодействия с БД.
Для начала укажите каталог приложения:
cd /var/www/laravel
Теперь можно запустить миграцию и протестировать соединение.
php artisan migrate:install
Если эта команда сработала успешно, в базе данных появится новая таблица под названием migrations.
Заключение
Как видите, горизонтальное масштабирование – достаточно простой процесс. Объединив горизонтальное масштабирование с вертикальным, системный администратор может добиться существенного повышения производительности.
Tags: Cloud Server, Debian, Debian 7, Laravel, Laravel 4, Linux, NGINX, PHP, php5-pgsql, PostgreSQL, VPS