Масштабирование приложения Ruby on Rails: настройка сервера MySQL

Данное руководство поможет настроить сервер для базы данных приложения. Это позволяет минимизировать шансы возникновения единой точки отказа.

Фреймворк приложений Ruby on Rails предоставляет поддержку различных серверов баз данных. Как правило, для этого используются реляционные системы управления базами данных (СУБД). Однако в некоторых случаях больше подходят БД NoSQL.

В начале разработки приложения Rails можно использовать стандартную СУБД SQLite. Однако среде производства рекомендуется использовать полноценную реляционную СУБД: SQLite вряд ли справится с высоким трафиком.

Выбор системы управления базами данных зависит от требований и типа приложения.

Популярные реляционные СУБД:

  • MySQL (самая распространённая СУБД на сегодня).
  • PostgreSQL (передовая SQL-совместимая объектно-реляционная СУБД с открытым исходным кодом).

Популярные нереляционные СУБД:

  • Cassandra, HBase, etc.
  • MongoDB, Couchbase (документоориентированные СУБД).
  • OrientDB, Neo4J (графовые СУБД).

Структура сервера

В результате развёрнутое приложение будет выглядеть так.

Балансировка нагрузки

Так выглядят серверы, настроенные в предыдущем руководстве данной серии.
+----------------------------------------+
|                                        |
|   LOAD-BALANCER / REVERSE PROXY        |
|                                        |
+----------------------------------------+
.....................+
.................... |
.................... |
+---------------+    |    +---------------+
|  APP  SERVER  |    |    |  APP  SERVER  |
|---------------|    |    |---------------|
|               |    |    |               |
|     RAILS     |<---+--->|     RAILS     |
|               |         |               |
+---------------+         +---------------+

Сервер базы данных

Чтобы настроить общедоступный сервер БД, нужно добавить в структуру четвёртый элемент:

+----------------------------------------+
|                                        |
|     LOAD-BALANCER / REVERSE PROXY      |
|                                        |
+----------------------------------------+
.....................+
.....................|
.....................|
+---------------+    |    +---------------+
|  APP  SERVER  |    |    |  APP  SERVER  |
|---------------|    |    |---------------|
|               |    |    |               |
|     RAILS     |<---+--->|     RAILS     |
|               |         |               |
+---------------+         +---------------+
........+                         +
........|                         |
........|  +-------------------+  |
........|  |  DATABASE SERVER  |  |
........|  |-------------------|  |
........|  |                   |  |
........|  |       MySQL,      |  |
........+->|     PostgreSQL,   |<-+
...........|        etc.       |
...........|                   |
...........+-------------------+

Добавление сервера базы данных

Примечание: В данном руководстве используется СУБД MySQL.

Подготовка сервера

Обновите систему CentOS:

yum -y update

Установите набор инструментов, необходимый для разработки:

yum groupinstall -y 'development tools'

Добавьте репозиторий EPEL:

sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'

Обновите пакеты системы:

yum -y update

Установите дополнительные библиотеки:

yum install -y curl-devel nano sqlite-devel libyaml-devel

Установка MySQL

Чтобы установить MySQL, введите:

yum install mysql-server mysql-devel

Запустите сервер MySQL:

service mysqld start

Начальная настройка MySQL

Чтобы запустить начальную настройку MySQL, введите:

/usr/bin/mysql_secure_installation

На экране появится приветственная страница:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):

Если вы ещё не создали пароль при помощи этих команд:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h myt password 'new-password'

нажмите enter и ответьте на вопросы программы:

# Set root password?                     --> Y
# Remove anonymous users?                --> Y
# Disallow root login remotely?          --> Y
# Remove test database and access to it? --> Y
# Reload privilege tables now?           --> Y

Подключение к серверу БД

Подключитесь к серверу БД при помощи клиента MySQL:

mysql -u root -p

Введите только что установленный root-пароль:

# Enter password:
# ..
# .
mysql>

Создание БД

Теперь нужно создать стандартную БД для приложения Rails.

Запустите следующую команду, чтобы создать базу данных MySQL:

create database rails_myapp;

Примечание: Замените условное имя rails_myapp своим именем БД.

Создание пользователя

Из соображений безопасности каждое приложение следует запускать с помощью индивидуального пользователя.

Чтобы создать нового пользователя для приложения, введите:

# Базовый синтаксис:
# CREATE USER '[user name]'@'localhost' IDENTIFIED BY '[password]';
# CREATE USER '[user name]'@'%' IDENTIFIED BY '[password]';
# Пример:
CREATE USER 'rails_myapp_user'@'localhost' IDENTIFIED BY 'pwd';
CREATE USER 'rails_myapp_user'@'%' IDENTIFIED BY 'pwd';

Примечание: Замените условные данные своими данными.

Убедитесь, что пользователь успешно создан:

SELECT User,host FROM mysql.user;
# Example:
# +------------------+-----------+
# | User             | host      |
# +------------------+-----------+
# | rails_myapp_user | %         |
# | root             | 127.0.0.1 |
# | rails_myapp_user | localhost |
# | root             | localhost |
# +------------------+-----------+

Права доступа

Передайте новому пользователю права на БД:

# Базовый синтаксис:
# GRANT ALL ON [database name].* TO '[user name]'@'localhost';
# GRANT ALL ON [database name].* TO '[user name]'@'%';
# Пример:
GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'localhost';
GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'%';

Сбросьте привилегии, чтобы новые настройки вступили в силу:

FLUSH PRIVILEGES;

Закройте клиент:

exit
# Bye

Настройка удалённых подключений

Сервер MySQL должен взаимодействовать с удалённым сервером приложения Rails.

Отредактируйте my.cnf:

nano /etc/my.cnf

Добавьте в конец блока [mysqld] следующую строку:

[mysqld] ..
.
bind-address   =  0.0.0.0

Теперь MySQL может прослушивать соединения от IP-адреса удалённого сервера.

Сохраните и закройте файл (CTRL+X, Y).

Перезапустите демон MySQL:

service mysqld restart
# Stopping mysqld:                               [  OK  ] # Starting mysqld:                               [  OK  ]

Настройка приложения Rails

Данный раздел поможет настроить приложение Rails для взаимодействия с сервером БД.

Установка библиотек

Для начала нужно установить зависимости.

В данном случае это пакет mysql-devel. Чтобы установить его, введите:

yum install -y mysql-devel

Настройка database.yml

Настройки базы данных приложений Rails хранятся в файле database.yml в каталоге /config.

Перейдите в каталог приложения и отредактируйте этот файл:

cd /var/www/my_app
nano config/database.yml

В нём вы увидите параметры БД для каждой среды. Чтобы настроить взаимодействие в среде производства, отредактируйте раздел production.

Замените блок кода production: YML приведённым ниже кодом.

# Базовый синтаксис:
# production:
#   adapter: mysql
#   encoding: utf8
#   database: [database name] #   username: [user name] #   password: [password] #   host: [server IP address] #   port: [port number] #   protocol: [protocol] #   pool: [connection pool] # Пример:
production:
adapter: mysql
encoding: utf8
database: rails_myapp
username: rails_myapp_user
password: pwd
host: 128.199.233.36
port: 3306
pool: 10

Примечание: Замените условные данные своими.

Аргумент pool устанавливает максимальное количество одновременных подключений к базе данных (пул). Установите этот параметр согласно требованиям и возможностям приложения.

Чтобы закрыть и сохранить файл, нажмите CTRL+X и Y.

Загрузка gem-а mysql

Отредактируйте Gemfile:

nano Gemfile

Добавьте в него строку:

gem 'mysql'

Чтобы закрыть и сохранить файл, нажмите CTRL+X и Y.

Установите gem:

bundle install

Теперь приложение Rails может использовать сервер БД для хранения данных.

Примечание: Полезную информацию можно найти в руководстве Перенос базы данных mysql на другой сервер.

Tags: , , ,

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