2013-10-22 3 views
1

Я пытаюсь синхронизировать 2 s3 ведра. Вот команда, которую я использую, чтобы синхронизировать между 2 s3 ведрами.Синхронизация между 2 s3 ведрами с использованием s3cmd не работает

s3cmd sync s3://source-bucket s3://destination-bucket 

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

+0

Вы пробовали это самостоятельно, то есть не в работе cron? –

+0

Да, я попробовал запустить команду, это говорит ОШИБКА: Проблема с параметром: Неверный источник/назначение: –

+0

http://www.admon.org/sync-two-amazon-s3-buckets/ предполагает, что это может быть проблемой для более старых версии ... –

ответ

4

Как мы обнаружили в комментариях, решение вашей проблемы было таким же, как описано here: ваша версия s3cmd была слишком старой для поддержки от-bucket to-bucket, и было исправлено обновление вашей версии s3cmd. Я рад, что это было легко исправить.

Однако есть две очень серьезные проблемы с тем, что вы пытаетесь сделать с этим инструментом.

s3cmd утилита не является подходящим инструментом для использования в cronjob на регулярной синхронизации двух ведер, по 2 причинам:

Во-первых, вам нужно сделать скидку на инструмент для запуска так долго, что пожары хрон снова в следующий раз; проблема, которую вы здесь имеете в себе, состоит в том, что вы могли бы одновременно иметь две или более копии s3cmd, одновременно пытаясь синхронизировать те же два ведра. В какой-то момент, когда 2-й экземпляр обнаружил все больше и больше вещей, которые уже были синхронизированы, вероятно, они наверняка догонят первую точку до такой степени, что оба они будут повторно имитировать примерно одни и те же файлы, удвоив количество передач, которые вы будете делать ,

График может выглядеть следующим образом:

... А открывает файл не существует, начинает синхронизироваться файлу

...... B открывает файл не существует, и начинает синхронизировать файл

......... завершает синхронизацию файла

............ B завершает синхронизацию файла.

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

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

Во-вторых, и, что более серьезно, s3cmd не будет масштабироваться в этой среде, поскольку у него нет «памяти» того, что находится в каждом ковше.

У меня есть, например, ведро с 8 миллионами предметов в нем. Если бы я хотел сделать однократную копию из ведра в ведро с s3cmd, это было бы хорошо. Проблема заключается в том, что s3cmd не «помнит» то, что видел в ваших ковши раньше, поэтому во второй раз и каждый последующий период времени он должен обнаруживать и проверять все 8 миллионов файлов в одном ведре, а затем проверять, re в другом ведре и (предположительно) проверить, являются ли они идентичными файлами, отправив запрос HEAD против каждого объекта в обоих направлениях. Таким образом, этот подход не будет масштабироваться и может привести к существенной стоимости ненужных запросов на S3.

Для моих внутренних систем я поддерживаю локальную базу данных объектов в ведрах. Когда я добавляю объект в ведро, я обновляю базу данных с размером, md5 и другими атрибутами объекта после успешной передачи.Затем у меня есть все мои ковши, настроенные с протоколированием (в другое, общее ведро). Мои системы извлекают файлы журнала, анализируют их и для любых объектов, которые были загружены другими процессами (в соответствии с журналами). Я получаю их метаданные и сохраняю их в локальной базе данных тоже ... поэтому у меня есть локальное представление что находится в S3, которое задерживается всего на несколько минут (время ожидания регистрации журналов и их открытие).

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

Если вы собираетесь регулярно синхронизировать два ведра, я бы предложил вам более сложное решение, чем s3cmd.

+0

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

+0

Неплохая идея для проекта. Вы говорите об односторонней синхронизации, от одного ведра к другому, правильно? Не слияние ведер, где все в каждом ковше копируется в другое, не так ли? Или...? –

1

Один из вариантов - установить оба ведра в виде локальных каталогов (например, с помощью RiofS) и запустить ваш любимый инструмент для синхронизации обеих папок.

Смежные вопросы