Мгновенная сихнхронизация файлов между 2мя серверами?
Всем хорошего дня, беда у меня такая
есть сервер мощный аж огонь но с узким инет каналом.
есть второй сервер с процессором уровня п4 но с широким каналом инета.
на первом сервере есть сайт где основной контент это картинки, и посещаемость такая, что весь его канал запит в усмерть
второй сервер балду пинает.
создал поддомен i.site.ru ссылающийся на второй сервер.
на первом придумал как на уровне nginx переадресовать запросы с site.ru/images/* на i.site.ru/*
теперь встаёт вопрос, как между 2мя серверами содержать актуальные данные а именно один каталог images
на site.ru по крону срабатывает задача которая пополняет каталог с картинками, как лучше поступить, чтоб в этоже время все новые картинки появлялись на втором сервере
1 мысля была прокинуть NFS Между серверами, файлы будут появлятсья мгновенно, но их будет двойная работа (1 при обращении к файлу на втором сервере второй сервер будет делать запрос к первому, хотелось бы избежать постоянно такого обмена)
2 синхронизация по rsync но тут тоже вопрос возникает сайт принял обновления, получил новые картинки, и потом по рсунк началась синхронизация со вторым сервером, файлов больше 100 000 через пол года будет больше 1млн, и синхронизация этих каталогов даже через рсунк будет довольно продолжительна и затратна
в итоге иногда пользователи будут видеть свежие посты, а картинки не будут успевать подтягиваться
у дропбокса места не хватит :(
как поступить? как содержать актуальные данные сразу на 2х сервераъх
Хочется чтоб сразу было ах, файлы хранились сразу на 2х серверах с мгновенной синхронизацией
Похоже, что да это выход, просто хотелось оставить функционал, что если второй сервер ушёл в даун, раздаём с основного, одним движением, а не прогонять потом всю базу :(
это совсем другой коленкор, backup можно делать в отложенном режиме и долго.
rsync для этого вполне подходит
как вариант использовать git/hg — они отлично справляются с кучей мелких файлов.
А почему бы на втором сервере в nginx (а там же тоже nginx, да?) не поставить проксирование с сохранением локально, и первый сервер в качестве источника? Хотя, возникает вопрос — картинки только появляются новые, или могут измениться старые?
Я бы со второго сервера проксировал (или даже proxy_cache), а раз в сутки (или чаще, в зависимости от количества картинок) синхронизировал картинки с помощью rsync.
Коварно подсказываю: https://code.google.com/p/lsyncd/. Принцип работы: отслеживаем изменения используя функции ядра. При нахождении изменений синхронизируем.
как вариант.
1.все картинки правим на сайте site.ru и отдаем в доступ по site.ru/images/
2. на i.site.ru — сделать nginx прокси на первый сайт. Поставить большой размер кеша (подумать о ключе кеша) и больше время кэша. Проксировать первый сайт site.ru
3. На site.ru/images/ — сделать пересылку для все айпишников кроме i.site.ru
4. Переделать механизм адресации картинок. Хоть preg_replace (ob_start), хоть ngx_http_sub_module
То есть все картинки отдаются хранятся на старом сайте, публично доступны с нового, а новый просто является прокси на старый.
Таким образом синхронизироваться будет «само». Картинки будут обновляться по мере протухания кэша. Надо заботится о сохранности контента только на одном сервере. Ну и экономия трафика. С чем то более сложным не стоит морочиться, меньше чем через год у вас будет еще несколько серваков.