Горизонтальное масштабирование приложения Laravel 4 и базы данных PostgreSQL

Существует два способа масштабирования приложения, сервиса, сервера и т.п. Первый способ – вертикальное масштабирование (или 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: , , , , , , , , , ,

Добавить комментарий