Назад | Перейти на главную страницу

Межсерверное зеркалирование файлов с минимальной задержкой

Платформа: Ubuntu 10.04 x86.

У нас есть HTTP-сервер (nginx, но это не имеет значения), который обслуживает некоторый статический контент. Контент (редко) загружается контент-менеджерами через SFTP, но может быть изменен / добавлен другими способами (например, cat, сделанные прямо на сервере).

Теперь мы хотим добавить второй идентичный HTTP-сервер - подчиненное зеркало в другом дата-центре на другом континенте. (И настройте циклический перебор DNS.)

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

Решение должно соответствовать большим изменениям и условиям гонки. То есть, если я изменю 1000 файлов, это не должно вызвать 1000 процессов синхронизации. И если я что-то изменяю, пока активна синхронизация, мое новое изменение должно в конечном итоге попасть и на сервер ... И так далее.

Отклоненные решения:

Я бы сказал, что нам нужно что-то на основе inotify. Есть готовое решение?

Обновить: два дополнительных (довольно очевидных) требования, о которых я забыл упомянуть:

Обновление 2: еще одно требование:

Вы считали Унисон как средство для синхронизации файлов? Используя его, вы сможете выполнять запрашиваемую одностороннюю синхронизацию. Кажется, это разумно подходит для этого приложения.

Что о rsyncd? Думаю, это хорошая идея;)

Похоже, именно здесь вы можете захотеть написать скрипт, который проверяет временные метки файлов, и если временная метка позже, чем последний запуск скрипта, предположите, что файл необходимо отправить, а затем запустить rsync или какой-либо другой инструмент для синхронизации файла. Аналогичным образом, с другой стороны, сделайте то же самое с проверкой, был ли файл изменен, и если да, активируйте извлечение. Ткань может быть для этого хорошим инструментом. Если вы знакомы с Python, возможно, лучше использовать ткань в сочетании с проверкой временных меток.