Сайт на WordPress с кластером БД MySQL и балансировкой нагрузки

Сайт на WordPress с кластером БД MySQL и балансировкой нагрузки

WordPress часто упрекают в том, что система имеет низкую производительность и не масштабируется так же хорошо, как другие фреймворки.

При большом количестве посетителей сайты на WordPress замедляются и теряют стабильность. Замена виртуального сервера на более мощный, является одним из самых эффективных методов повышения производительности приложения.

В этом руководстве мы установим WordPress на облачной платформе Яндекса. Убедимся, что сайт на WordPress можно настроить для работы на сервере с MySQL-кластером и балансировкой сетевой нагрузки.

Создание группы виртуальных машин

Для установки сайта на сервер с кластером БД MySQL требуется создание группы виртуальных машин с общим шаблоном. В качестве примера будет создано две машины на основе образа LAMP из маркетплейса провайдера.

Создайте группу виртуальных машин:

  1. В консоли управления выберите каталог, в котором будет создана группа виртуальных машин,
  2. В списке сервисов выберите Compute Cloud,
  3. На панели слева выберите Группы виртуальных машин,
  4. Нажмите кнопку Создать группу.

Настройка группы виртуальных машин

Базовые параметры

Переходим к настройке. Задайте имя, сервисный аккаунт и укажите зоны доступности:

Создание новой группы виртуальных машин Зоны доступности

Шаблон виртуальной машины

Выбор образа/загрузочного диска

Выберите готовый образ виртуальной машины LAMP на вкладке Сloud Marketplace:

Выбор образа/загрузочного диска для виртуальной машины
Вычислительные ресурсы

Минимальные требования для корректной работы сайта:

  • vCPU — 2,
  • Гарантированная доля vCPU — 20%,
  • RAM — 2 ГБ.
Доступ

Укажите логин и SSH-ключ для доступа к серверу из терминала. Команды для создания и получения публичного ключа на устройствах Linux/Mac:

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub

Масштабирование

Оставьте настройки по умолчанию:

Настройки масштабирования

Интеграция с Network Load Balancer

Активируйте опцию, заполните имя и описание целевой группы:

Интеграция с Network Load Balancer

Создание MySQL-кластера

Для создания нового кластера, выполните:

  1. В консоли управления выберите каталог, в котором нужно создать кластер БД,
  2. Выберите сервис Managed Service for MySQL,
  3. Нажмите кнопку Создать кластер.

Заполните имя кластера и выберите версию MySQL (LAMP по умолчанию работает с версией 5.7):

Создание кластера MySQL

Выберите тип класса хоста s2.small:

Создание кластера MySQL

Задайте имя, логин и пароль для базы данных MySQL:

Создание базы данных MySQL

Добавьте еще один хост без публичного доступа в вашей подсети:

Добавление хоста без публичного доступа в зоне доступности

Выберите модуль аутентификации mysql_native_password в настройках СУБД:

Выбор модуля аутентификации

Настройка завершена. Нажмите кнопку Создать кластер.

Переходим к обзору хостов кластера после установки. Скопируйте имя хоста с ролью MASTER для подключения к WordPress.

Список доступных хостов в кластере

Настройка Apache

Для каждой виртуальной машины выполните настройку Apache согласно инструкции.

Включите поддержку .htaccess:

sudo nano /etc/apache2/sites-available/000-default.conf

Добавьте правила для корневой директории:

<Directory /var/www/html>
  AllowOverride All
  Order allow,deny
  allow from all
</Directory>

Результат:

<VirtualHost *:80 [::]:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  <Directory /var/www/html>
	AllowOverride All
	Order allow,deny
	allow from all
  </Directory>
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Выполните перезапуск Apache:

sudo systemctl restart apache2

Установка WordPress

Перед установкой требуется обновить PHP до версии 7.4 и установить обязательные библиотеки на сервере для корректной работы WordPress.

Выполните установку WordPress на каждой из виртуальных машин в группе. Узнать их публичные адреса можно из общего списка на странице группы.

Создайте и перейдите в каталог для загрузки WordPress:

sudo mkdir /opt/latest/
cd /opt/latest/

Скачайте архив с файлами для установки:

sudo wget https://ru.wordpress.org/latest.tar.gz

Извлеките содержимое, удалите архив и перейдите в каталог:

sudo tar -xzvf latest.tar.gz
sudo rm latest.tar.gz
cd /opt/latest/wordpress/

Создайте служебный файл .htaccess:

sudo nano .htaccess

Добавьте и сохраните код:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteRule ^index\.php$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . /index.php [L]
</IfModule>

Создайте файл wp-config.php для настройки WordPress и задайте права доступа:

sudo cp wp-config-sample.php wp-config.php
sudo chmod 600 wp-config.php

Задайте права записи на файлы и каталоги:

sudo find ./ -type d -exec chmod 0755 {} \;
sudo find ./ -type f -exec chmod 0644 {} \;

Измените владельца и группу для всех файлов:

sudo chown -R www-data:www-data ./

Скопируйте файлы WordPress и перейдите в корневой каталог Apache:

sudo cp -a /opt/latest/wordpress/. /var/www/html/
cd /var/www/html/

Удалите индексный файл Apache:

sudo rm index.html

Настройка wp-config.php

Для подключения сайта к MySQL-кластеру требуется установка значений констант. Выполните в терминале:

sudo nano wp-config.php

Найдите строки:

/* Имя базы данных для WordPress */
define( 'DB_NAME', '%DB_NAME%' );
/* Имя пользователя MySQL */
define( 'DB_USER', '%DB_USER%' );
/* Пароль к базе данных MySQL */
define( 'DB_PASSWORD', '%DB_PASSWORD%' );
/* Имя сервера MySQL */
define( 'DB_HOST', '%DB_HOST%' );

Укажите в файле вместо:

  • %DB_NAME% — имя базы данных database,
  • %DB_USER% — имя пользователя u0101,
  • %DB_PASSWORD% — пароль от базы данных,
  • %DB_HOST% — имя хоста MySQL в формате %FQDN%.mdb.yandexcloud.net.

Вместо %FQDN% подставьте имя хоста MySQL с ролью MASTER, например:

rc1a53-53v441lqyi11rstf.mdb.yandexcloud.net

Не забудьте получить и добавить ключи безопасности. Сохраните файл конфигурации и откройте сайты по публичным IP-адресам для завершения установки WordPress через веб-браузер.

Создание сетевого балансировщика

Yandex Network Load Balancer позволяет создавать и настраивать балансировщики для обеспечения отказоустойчивости.

Чтобы создать сетевой балансировщик:

  1. В консоли управления откройте раздел Network Load Balancer,
  2. Нажмите кнопку Создать,
  3. В блоке Обработчики нажмите кнопку Добавить обработчик, и укажите параметры:
    • Порт — 80,
    • Целевой порт — 80.
  4. Нажмите кнопку Добавить,
  5. В блоке Целевые группы, укажите:
    • Порог работоспособности — 5,
    • Порог работоспособности — 5.

Проверьте статус балансировщика и перейдите на сайт используя адрес обработчика:

Просмотр активных балансировщиков

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

Веб-разработчик