Каков наилучший способ синхронизации больших объемов данных по всему миру?

У меня есть много данных, чтобы синхронизировать более 4 или 5 сайтов по всему миру, около половины терабайта на каждом сайте. Это изменяет (добавляет или изменяет) около 1.4 гигабайт в день, и данные могут меняться на любом из четырех сайтов.

большой процент (30%) данных-это дубликаты пакетов (возможно, упакованные JDKs), поэтому решение должно включать способ сбора того факта, что есть такие вещи, лежащие на локальной машине, и захватить их вместо загрузки с другого сайта.

управление версиями не является проблемой, это не кодовая база как таковая.

Мне просто интересно, есть ли какие-либо решения (желательно с открытым исходным кодом), которые приближаются к такой вещи?

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

спасибо

Edit: это должно быть основано на UNIX:)

7 ответов


вы пробовали унисон?

У меня были хорошие результаты с ним. Это в основном умнее rsync, что, возможно, то, что вы хотите. Существует список, сравнивающий инструменты синхронизации файлов здесь.


звучит как работа для BitTorrent.

для каждого нового файла на каждом сайте создайте исходный файл bittorrent и поместите его в централизованный веб-доступный каталог.

каждый сайт затем загружает (через bittorrent) все файлы. Это ген трафик обмена и автоматического локального повторного копирования.

фактический рецепт будет зависеть от вашей потребности. Например, можно создать 1 семя bittorrent для каждого файла на каждом хосте и задать одинаковое время изменения файла-семени как время изменения самого файла. Поскольку вы будете делать это ежедневно (ежечасно?) лучше использовать что-то вроде "make" для (повторного)создания исходных файлов только для новых или обновленных файлов.

затем вы копируете все семенные файлы со всех хостов в централизованное расположение ("tracker dir") с опцией"перезаписать только если новее". Это дает вам набор семян торрентов для всех новейших копий всех файлов.

затем каждый хост загружает все семенные файлы (опять же, с "перезаписать, если новее настройка") и запускает загрузку bittorrent на всех из них. Это позволит загрузить/загрузить все новые/обновленные файлы.

промыть и повторить, ежедневно.

кстати, не будет никакой "загрузки из себя", как вы сказали в комментарии. Если файл уже присутствует на локальном хосте, его контрольная сумма будет проверена, и загрузка не произойдет.


Как насчет чего-то вроде Red Hat's Глобальная Файловая Система, чтобы вся структура была разделена на каждом сайте на несколько устройств, а не реплицировалась в каждом месте?

или, возможно, коммерческая сетевая система хранения данных, например, от Сети Левой (отказ от ответственности - я понятия не имею о стоимости и не использовал их).


У вас есть много вариантов:

  • вы можете попробовать установить реплицированная DB для хранения данных.
  • использовать комбинацию rsync или lftp и пользовательские скрипты, но это не подходит.
  • использовать git РЕПО с максимальными сжатиями и синхронизацией между ними с помощью некоторых скриптов
  • поскольку объем данных довольно велик и, вероятно, важен, сделайте либо некоторые пользовательские разработки по найму эксперт ;)

Проверьте супер гибкий.... это довольно круто, не использовал его в крупномасштабной среде, но на 3-узловой системе он, казалось, работал отлично.


звучит как работа для foldershare выступает


вы пробовали detect-renamed патч для rsync (http://samba.anu.edu.au/ftp/rsync/dev/patches/detect-renamed.diff)? Я сам не пробовал, но мне интересно, обнаружит ли он не только переименованные, но и дублированные файлы. Если он не будет обнаруживать дублированные файлы, то, я думаю, можно было бы изменить патч для этого.