Задать вопрос

Как лучше всего синхронизировать физические файлы, используемые на двух разных серверах?

Возможно, кто-то сталкивался со схожей задачей.



Итак, у нас есть «основной» сервер, где тусуются пользователи, и есть «тестовый» сервер, где также есть пользователи, но уже (как понятно из названия) тестируют его (обычные пользователи туда доступа не имеют).

Среда на обоих серверах одинаковая: debian, nginx, php-fpm, sphinx, percona mysql. При этом СУБД фактически одна для обеих машин (одни данные) — что дает одних и тех же пользователей, данные о них, их записи и т.д. и т.п.



Вопрос звучит следующим образом: как синхронизировать на обоих серверах физические данные (файлы изображений, флешек — что загружают пользователи, как тестовые, так и обычные)? То есть необходимо, чтобы добавленные файлы на основном сервере появлялись на тестовом, а добавленные на тесте дублировались на основной.

Файлы уже сейчас занимают 2+Gb, в день прибавляется по 50-70Mb.



P.S. пробовали rsync (с ключами на апдейт и рекурсию) — обновление идет более 10 минут, что уже ненормально.

P.P.S. попробовали и sshfs+symlinks — часть кэш-файлов (текстовых), что инклудятся — падают на Permission denied (php-fpm в этом случае на root перевести не удалось), как впрочем и новозагружаемые файлы (на том сервере, где находится symlink).
  • Вопрос задан
  • 4572 просмотра
Подписаться 14 Оценить 4 комментария
Решения вопроса 1
script88
@script88
Используйте csync2.
Как плюс, csync2 подходит для достаточно тяжелых проектах. Конфиги можно разделить на несколько частей, и эти части запускать с разной периодичностью, также не нагружает систему при таких нагрузках.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
dgeliko
@dgeliko
Как вариант — прикрутить GlusterFS и каталоги юзеров размещать на данном разделе. Её минус — обновление проходит при обращении или листинге файлов и жрет ЦПУ при нехилых нагрузках. Как костыль — засунуть в cron ls -R на каждые 5 минут. Вообще она хороша, но есть некоторые недочеты, которые приходится допиливать самим.
Ответ написан
@egorinsk
Может, вы как-то неправильно используете rsync? Там же есть разные проверки, чтобы не копировать лишнее, а синхронизировать 70 Мб — это вообще смешная задача для нее.

Также, советую поменять схему репликации, незачем с тестового сервера (возможно, ошибочные) данные копировать на боевой.
Ответ написан
amgorb
@amgorb
Используем lsyncd на проектах с большим количеством файлов и объемов (сотни гб) — все отлично. Для синхронизации внутри используется rsync — вообще он быстро работает на уже синхронизированном каталоге, 10 мин — это на первый запуск только может быть.
Ответ написан
Комментировать
AgaFonOff
@AgaFonOff
Монтируем одно поверх другого через aufs. /etc/fstab:
none /home/prj/data-dev aufs br=/home/prj/data-dev-rw:/home/prj/data,auto 0 0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы