Настраиваем синхронизацию файлов между нодами через lsyncd — исключаем кэши и resize_cache
Хочу себе такие же кнопкиЧто вы получите от этого занятия
Вы научитесь настраивать синхронизацию файлов между несколькими серверами (нодами) с помощью 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. Тестирование конфигурации
-
Запускаем lsyncd в режиме отладки
sudo lsyncd -noconfig -log "debug" /etc/lsyncd/lsyncd.conf.luaВы увидите, как события попадают в очередь, а файлы из
cacheиresize_cacheигнорируются. -
Проверяем, что файлы действительно не синхронизируются
На узле‑источнике создаём два файла:
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/ # папка пуста -
Логи
Файл
/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. Практика для закрепления
-
Создайте три ноды (можно использовать VDS от 🏰 VDSina – VDSina с параметром
?partner=5095). Настройте на каждой lsyncd, исключив каталогиcache,resize_cacheиtmp. Проверьте, что файлы из этих каталогов не копируются. -
Измените конфиг так, чтобы синхронизация происходила без задержки (
delay = 0). Сравните нагрузку на CPU и сеть с предыдущей настройкой. Какие выводы сделали? -
Добавьте в
rsyncпараметр--delete, чтобы удалённые файлы на источнике автоматически удалялись на целевых нодах. Проверьте, как это работает при удалении изображения изassets. -
Напишите скрипт‑фильтр, который будет игнорировать файлы размером меньше 1 KB (например, небольшие лог‑файлы). Подключите его через
execBeforeи продемонстрируйте, что такие файлы не попадают в синхронизацию. -
Смоделируйте «пиковую» нагрузку: запустите на одном узле 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 блог для бизнеса