Настраиваем синхронизацию файлов между нодами через lsyncd — исключаем кэши и resize_cache
Дата публикации: 24.06.2026

Настраиваем синхронизацию файлов между нодами через lsyncd — исключаем кэши и resize_cache

Хочу себе такие же кнопки
ccb9a536

Что вы получите от этого занятия

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


1. Почему обычный rsync не подходит для «живого» сайта

Проблема Как проявляется Почему lsyncd решает её
Постоянные изменения Каждый раз, когда пользователь загружает изображение, файл меняется в реальном времени. lsyncd мониторит файловую систему в режиме реального времени (inotify) и сразу же запускает rsync.
Большие объёмы кэша На каждом узле создаются временные файлы *.cache, resize_cache/*. Мы можем исключить их из синхронизации через правила exclude.
Нагрузка на процессор При полном сканировании каталога каждый раз происходит тяжёлый I/O. lsyncd пакетирует изменения и отправляет их разово, экономя CPU.

2. Установка lsyncd и зависимостей

# На всех нодах (Ubuntu/Debian)
sudo apt update
sudo apt install -y lsyncd rsync inotify-tools

Tip: Если у вас CentOS/AlmaLinux, замените apt на yum/dnf.

После установки проверьте версии:

lsyncd -version   # 2.3.x и выше
rsync --version   # 3.2.x и выше

3. Структура проекта и файлы, которые НЕ нужно синхронизировать

Каталог Содержание Причина исключения
cache/ Кешированные шаблоны, результаты запросов Данные меняются часто, их можно генерировать заново
resize_cache/ Превью‑изображения, созданные при загрузке Тот же самый кеш, но может занимать гигабайты
tmp/ Временные файлы PHP, сессии Не нужны на всех нодах

Мы будем использовать файл конфигурации lsyncd.conf.lua, в котором зададим правила exclude.


4. Базовый конфиг lsyncd

Создаём файл /etc/lsyncd/lsyncd.conf.lua:

settings {
    logfile      = "/var/log/lsyncd/lsyncd.log",
    statusFile   = "/var/log/lsyncd/lsyncd.status",
    statusInterval = 20,
    maxProcesses = 2,
}

sync {
    default.rsync,
    source = "/var/www/html/",
    target = "user@node2:/var/www/html/",
    rsync = {
        archive = true,
        compress = true,
        verbose = true,
        _exclude = {
            "cache/**",
            "resize_cache/**",
            "tmp/**",
            "*.log",
            "*.tmp"
        }
    },
    delay = 5,          -- собрать изменения за 5 сек
    maxDelays = 5,
}

Пояснения к ключевым параметрам

  • archive = true – сохраняет права, владельцев и ссылки.
  • compress = true – уменьшает объём передаваемых данных (gzip).
  • _exclude – массив путей, которые не попадут в синхронизацию.
  • delay = 5 – lsyncd ждёт 5 секунд после последнего изменения, чтобы собрать их в один пакет.

Важно: Путь в source и target должен быть одинаковым на всех нодах, иначе возникнут конфликты путей.


5. Исключаем кэши и resize_cache в реальном времени

5.1. Используем inotify‑фильтры

lsyncd уже использует inotify, но мы можем добавить фильтр‑скрипт, который будет отбрасывать события от файлов, попадающих в кеш‑директории.

Создаём скрипт /usr/local/bin/lsyncd-filter.sh:

#!/usr/bin/env bash
# Параметр $1 – полный путь к изменённому файлу
FILE="$1"

# Если путь содержит cache или resize_cache – игнорируем
if [[ "$FILE" == *"/cache/"* ]] || [[ "$FILE" == *"/resize_cache/"* ]]; then
    exit 1   # non‑zero → lsyncd не будет запускать rsync
fi
exit 0

Даем права:

sudo chmod +x /usr/local/bin/lsyncd-filter.sh

5.2. Подключаем фильтр в конфиг

sync {
    default.rsync,
    source = "/var/www/html/",
    target = "user@node2:/var/www/html/",
    rsync = {
        archive = true,
        compress = true,
        _exclude = {
            "cache/**",
            "resize_cache/**",
            "tmp/**",
            "*.log",
            "*.tmp"
        }
    },
    delay = 5,
    maxDelays = 5,
    -- новый параметр: execBefore
    execBefore = {
        "/usr/local/bin/lsyncd-filter.sh %f"
    }
}

execBefore запускает скрипт для каждого найденного изменения (%f – путь к файлу). Если скрипт вернёт 1, lsyncd пропустит этот файл.


6. Тестирование конфигурации

  1. Запускаем lsyncd в режиме отладки

    sudo lsyncd -noconfig -log "debug" /etc/lsyncd/lsyncd.conf.lua

    Вы увидите, как события попадают в очередь, а файлы из cache и resize_cache игнорируются.

  2. Проверяем, что файлы действительно не синхронизируются

    На узле‑источнике создаём два файла:

    touch /var/www/html/cache/test.cache
    touch /var/www/html/resize_cache/image_thumb.jpg
    touch /var/www/html/assets/style.css

    Через 10‑секунд проверяем целевой узел:

    ls -l /var/www/html/assets/
    # style.css присутствует
    ls -l /var/www/html/cache/
    # папка пуста
  3. Логи

    Файл /var/log/lsyncd/lsyncd.log содержит строки вида:

    2026-06-24 12:34:56 [INFO]  sync: /var/www/html/assets/style.css → user@node2:/var/www/html/assets/style.css
    2026-06-24 12:35:01 [DEBUG] skip: /var/www/html/cache/test.cache (filtered)

7. Автозапуск и мониторинг

7.1. Systemd‑служба

Создаём файл /etc/systemd/system/lsyncd.service:

[Unit]
Description=Live Sync Daemon (lsyncd)
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/lsyncd /etc/lsyncd/lsyncd.conf.lua
Restart=on-failure
User=root
Group=root

[Install]
WantedBy=multi-user.target

Активируем:

sudo systemctl daemon-reload
sudo systemctl enable --now lsyncd

7.2. Проверка статуса

sudo systemctl status lsyncd
journalctl -u lsyncd -f   # «в реальном времени» наблюдаем логи

8. Оптимизация под высокие нагрузки

Параметр Что изменять Когда
maxProcesses Увеличить до 4‑8, если у вас несколько параллельных синхронизаций Большие сайты с сотнями одновременных загрузок
delay Снизить до 1‑2 сек для «мгновенной» репликации Низкая задержка критична (например, в кластере микросервисов)
compress Отключить, если сеть уже «быстрая» (10 Gbps) Сократить CPU‑нагрузку
rsync --bwlimit Добавить ограничение пропускной способности (например, --bwlimit=5000) Чтобы не «засорять» каналы между дата‑центрами

Пример изменения в конфиге:

rsync = {
    archive = true,
    compress = false,
    bwlimit = 5000,
    _exclude = { ... }
},
delay = 2,
maxProcesses = 6,

9. Частые ошибки и как их избежать

Ошибка Причина Решение
Permission denied при попытке писать в target SSH‑ключ не установлен, пользователь не имеет прав Сгенерируйте SSH‑ключ ssh-keygen -t ed25519, скопируйте публичный ключ в ~/.ssh/authorized_keys на целевом узле
rsync: command not found rsync не установлен на целевом сервере Установите rsync на всех нодах (sudo apt install rsync)
Кеш‑файлы всё равно появляются на целевом узле Путь в _exclude указан неверно (пробелы, регистр) Проверьте, что в исключениях используется точный относительный путь, без начального /
Синхронизация «залипает» после перезапуска lsyncd Оставшиеся в очереди файлы не обработаны Очистите очередь: sudo systemctl stop lsyncd && rm -rf /var/run/lsyncd/* && sudo systemctl start lsyncd

10. Практика для закрепления

  1. Создайте три ноды (можно использовать VDS от 🏰 VDSinaVDSina с параметром ?partner=5095). Настройте на каждой lsyncd, исключив каталоги cache, resize_cache и tmp. Проверьте, что файлы из этих каталогов не копируются.

  2. Измените конфиг так, чтобы синхронизация происходила без задержки (delay = 0). Сравните нагрузку на CPU и сеть с предыдущей настройкой. Какие выводы сделали?

  3. Добавьте в rsync параметр --delete, чтобы удалённые файлы на источнике автоматически удалялись на целевых нодах. Проверьте, как это работает при удалении изображения из assets.

  4. Напишите скрипт‑фильтр, который будет игнорировать файлы размером меньше 1 KB (например, небольшие лог‑файлы). Подключите его через execBefore и продемонстрируйте, что такие файлы не попадают в синхронизацию.

  5. Смоделируйте «пиковую» нагрузку: запустите на одном узле 100‑ти параллельных touch‑команд в разных подкаталогах assets. Оцените, сколько времени понадобится lsyncd, чтобы синхронизировать всё при maxProcesses = 2 и при maxProcesses = 8. Какие параметры стоит менять в реальном продакшене?


11. Что дальше?

  • Интегрировать lsyncd с Git‑деплойментом: после успешной синхронизации автоматически запускать composer install и php artisan migrate.
  • Добавить мониторинг через Prometheus (экспортировать метрики lsyncd_*).
  • Рассмотреть объединение с CDN (например, Cloudflare) для ускорения отдачи статических файлов, синхронизируемых через lsyncd.

С этими навыками ваш сайт на Битриксе будет работать быстро, стабильно и без лишних кэш‑файлов, а вы получите полную уверенность в том, что все ноды всегда «говорят» на одном языке. Удачной синхронизации!


CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса
рейтинг хостингов 2026 Быстрые VDS серверы