Pull to refresh
0
Jelastic
Jelastic DevOps PaaS для хостеров и ISV

Синхронизация файлов между серверами в кластере

Reading time 4 min
Views 12K
Хостинг приложений с высокой нагрузкой и постоянно растущим трафиком требует дополнительной мощи и настроек для обработки большого потока запросов. Решением в данном случае может послужить добавление серверов в окружение для поддержки полноценного функционирования приложения.

В результате вы сталкиваетесь с другой трудностью — более сложная установка по сравнению с использованием одного сервера. Основной проблемой является то, что такие приложения как WordPress, Drupal, Joomla, Liferay, Redmine и т.п. по умолчанию сохраняют все загружаемые файлы только на одном сервере и не синхронизируют их между серверами в кластере. Другими словами, только сервер, который обрабатывал запрос на загрузку файла, будет содержать новый контент.

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

синхронизация файлов


На данный момент это всего лишь временное решение, которое помогает автоматизировать синхронизацию контента на нескольких серверах приложений. В будущем (после обработки отзывов) мы собираемся интегрировать этот функционал в ядро системы Jelastic.

Данное решение — это сочетание букмарклета и скрипта на стороне сервера. В основном серверный скрипт выполняется с помощью такой утилиты как lsyncd и крона.

Lsyncd это легковесное решение для синхронизации серверов приложений. В сочетании с inotify lsyncd инициирует синхронизацию файлов только в случае обнаружения фактических изменений в системе. Как результат вы не тратите много ресурсов на выполнение синхронизации и уменьшаете нагрузку на CPU.

С помощью букмарклета lsyncd автоматически устанавливается на каждый сервер приложения в окружении. Перед установкой уточняется список папок для синхронизации. В результате, любые изменения в указанных папках на одном сервере будут автоматически синхронизированы с остальными серверами.

Таким образом, данное решение максимально упрощает систему файловой синхронизации. Теперь давайте пошагово рассмотрим как это работает.

В нашем примере мы будем использовать WordPress, развернутый в окружении с двумя серверами. Эта инструкция также полностью подходит для других PHP, Java или Ruby приложений, таких как Drupal, Joomla, Liferay, Redmine и другие.

Установка Приложения


1. Разверните WordPress приложение вручную или использовав наш JPS виджет для установки в один клик. Иструкцию и виджет вы можете найти в WordPress документе.

2. Теперь давайте создадим кластер, увеличив количество серверов в окружении.

сервер приложения

Используя документацию вы можете легко добавить дополнительные сервера приложений, включить высокую доступность или даже настроить кластерное решение:

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

3. Нажмите Открыть в браузере в настройках окружения.

открыть в браузере

4. Введите необходимую информацию для завершения установки WordPress.

установить WordPress

Тестирование загрузки файлов без синхронизации


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

1. Пройдите в панель управления и внесите изменения: загрузите изображения или файлы, отредактируйте темы, и т.п. Как пример, мы загрузили одно изображение в раздел Media.

загрузить картинку в WordPress

2. Вернитесь в панель управления Jelastic и нажмите Конфигурация рядом с сервером.

настройки сервера

3. Перейдите в папку webroot > ROOT > wp-content.
Там, на одном из серверов приложений появится новая папка uploads, в которой размещены добавленные файлы.

загрузить файлы

Папка для загрузки файлов зависит от приложения, которое вы хостите.

Ниже представлен список таких папок для некоторых популярных приложений:
WordPress: webroot/ROOT/wp-content
Drupal: webroot/ROOT/sites
Joomla: webroot/ROOT/images
Liferay: webroot/home/liferay/data


4. Обратите внимание, что на втором сервере папки uploads вовсе не существует.

сервер без файлов

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

Настройка синхронизации файлов


А теперь давайте перейдем к решению проблемы синхронизации файлов в кластере.

1. Первым делом, пройдите по ссылке на наш блог и перетяните букмарклет File synchronization на панель закладок вашего браузера как показано на рисунке ниже (букмарклет размещен в Apply File Synchronization параграфе).

букмарклет для синхронизации

2. Перейдите к панели управления Jelastic и запустите скрипт, нажав Синхронизация файлов на панели закладок.

букмарклет

3. В открывшемся окне выберите окружение с вашим приложением и отметьте папку (или несколько папок), которые необходимо синхронизировать. Нажмите Установить.

настройка синхронизации

Не выбирайте всю папку webroot, в таком случае синхронизация не сработает.

4. Подождите немного (около 2 минут) для применения настроек. Первым делом на серверах появятся файлы install.sh и replication.tar и папка lsyncd.



5. После этого проверьте папку webroot > ROOT > wp-content на всех серверах приложений.
Как Вы видите, ранее загруженное изображение расположено в папке uploads на каждой ноде.

файлы синхронизированы

Всё довольно просто. Как результат, синхронизация будет срабатывать автоматически каждый раз, когда вы добавляете или меняете что-либо в вашем WordPress (или любом другом) приложении.

Сохранение синхронизации при изменении топологии


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

1. Нажмите Изменить топологию окружения.

изменить топологию

2. Добавьте дополнительные сервера и Примените изменения.

добавить сервера

3. Выполните пункты 2-4 из раздела Настройка синхронизации файлов, чтобы наладить внутренние процессы синхронизации.

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

Проверка логов


За процессом синхронизации можно следить с помощью логов.

1. Перейдите в папку webroot/lsyncd/var/log.

2. Состояние синхронизации можно увидеть в файлах lsyncd.log и lsyncd.status.

логи

Надеемся, наше решение будет полезным. Смело загружайте еще больше захватывающего контента и привлекайте больше пользователей!

Вы решаете проблему синхронизации иначе? Пожалуйста, поделитесь своим опытом в комментариях ниже.

Lead Research Engineer,
Alexey Alexandrov
Tags:
Hubs:
+2
Comments 22
Comments Comments 22

Articles

Information

Website
jelastic.com
Registered
Founded
Employees
Unknown
Location
США