Каков наилучший способ синхронизации больших объемов данных по всему миру?
У меня есть много данных, чтобы синхронизировать более 4 или 5 сайтов по всему миру, около половины терабайта на каждом сайте. Это изменяет (добавляет или изменяет) около 1.4 гигабайт в день, и данные могут меняться на любом из четырех сайтов.
большой процент (30%) данных-это дубликаты пакетов (возможно, упакованные JDKs), поэтому решение должно включать способ сбора того факта, что есть такие вещи, лежащие на локальной машине, и захватить их вместо загрузки с другого сайта.
управление версиями не является проблемой, это не кодовая база как таковая.
Мне просто интересно, есть ли какие-либо решения (желательно с открытым исходным кодом), которые приближаются к такой вещи?
мой детский скрипт с использованием rsync больше не режет горчицу, я хотел бы сделать более сложную, интеллектуальную синхронизацию.
спасибо
Edit: это должно быть основано на UNIX:)
7 ответов
звучит как работа для BitTorrent.
для каждого нового файла на каждом сайте создайте исходный файл bittorrent и поместите его в централизованный веб-доступный каталог.
каждый сайт затем загружает (через bittorrent) все файлы. Это ген трафик обмена и автоматического локального повторного копирования.
фактический рецепт будет зависеть от вашей потребности. Например, можно создать 1 семя bittorrent для каждого файла на каждом хосте и задать одинаковое время изменения файла-семени как время изменения самого файла. Поскольку вы будете делать это ежедневно (ежечасно?) лучше использовать что-то вроде "make" для (повторного)создания исходных файлов только для новых или обновленных файлов.
затем вы копируете все семенные файлы со всех хостов в централизованное расположение ("tracker dir") с опцией"перезаписать только если новее". Это дает вам набор семян торрентов для всех новейших копий всех файлов.
затем каждый хост загружает все семенные файлы (опять же, с "перезаписать, если новее настройка") и запускает загрузку bittorrent на всех из них. Это позволит загрузить/загрузить все новые/обновленные файлы.
промыть и повторить, ежедневно.
кстати, не будет никакой "загрузки из себя", как вы сказали в комментарии. Если файл уже присутствует на локальном хосте, его контрольная сумма будет проверена, и загрузка не произойдет.
Как насчет чего-то вроде Red Hat's Глобальная Файловая Система, чтобы вся структура была разделена на каждом сайте на несколько устройств, а не реплицировалась в каждом месте?
или, возможно, коммерческая сетевая система хранения данных, например, от Сети Левой (отказ от ответственности - я понятия не имею о стоимости и не использовал их).
У вас есть много вариантов:
- вы можете попробовать установить реплицированная DB для хранения данных.
- использовать комбинацию rsync или lftp и пользовательские скрипты, но это не подходит.
- использовать git РЕПО с максимальными сжатиями и синхронизацией между ними с помощью некоторых скриптов
- поскольку объем данных довольно велик и, вероятно, важен, сделайте либо некоторые пользовательские разработки по найму эксперт ;)
Проверьте супер гибкий.... это довольно круто, не использовал его в крупномасштабной среде, но на 3-узловой системе он, казалось, работал отлично.
вы пробовали detect-renamed
патч для rsync (http://samba.anu.edu.au/ftp/rsync/dev/patches/detect-renamed.diff)? Я сам не пробовал, но мне интересно, обнаружит ли он не только переименованные, но и дублированные файлы. Если он не будет обнаруживать дублированные файлы, то, я думаю, можно было бы изменить патч для этого.