Перемещение файлов между хостами с использованием промежуточной области хранения [closed]

Есть ли какое-нибудь хорошее существующее решение для перемещения файлов с хоста A на хост C, используя хост B a в качестве пассивной промежуточной области хранения.

A -> B -> C

Ограничения

  • Хост A и хост C находятся в разных сетях и не могут получить доступ друг к другу . Между A и C. нельзя открывать туннели.
  • И хост A, и хост C могут запускать и планировать периодические процессы.
  • Хост B предоставляет только область хранения и может быть доступен как с хоста A, так и с хоста C через SSH.
  • B будет «пассивным» и предоставит только зону хранения.
  • Таким образом, A будет действовать как писатель (файлов на B), а C будет действовать как читатель (файлов на B).
  • Файлы, которые успешно скопированы с хоста A на хост C (через B), затем могут быть удалены на хосте A.
  • Никакие файлы на хосте A не должны удаляться до тех пор, пока не будет получена гарантия (квитанция, содержащая контрольную сумму файла? ) он успешно приземлился на хосте C.
  • Угловые случаи включают в себя управление простоями сети, заполнением диска, прерванными процессами и т. д.

Цель состоит в том, чтобы через регулярные промежутки времени перемещать файлы из A в C, используя B в качестве промежуточного хранилища площадь.

Мы можем предположить, что все хосты работают под Unix / Linux. Предпочтительные инструменты: ssh / rsync / bash + другие "стандартные" инструменты.

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

Существуют ли какие-либо решения?

0
задан 8 October 2015 в 11:59
2 ответа

Я не вижу необходимости хранить что-либо на B, вы можете просто использовать его для прокси-соединений между A и C с помощью любого прокси-программного обеспечения, такого как переадресация портов ssh или socks. Может быть, вы могли бы даже направить / nat через B?

Или, как вы специально просили, сделать это по-своему, вы могли бы использовать NFS / Samba для копирования файлов и проверки завершения с помощью различных методов. На ум приходит создание файла на общем ресурсе для передачи сообщений типа «копировать завершено» или «нормально удалить» между обеими системами. Или, как вы сказали, что-то с MD5 и т. Д. Как бы вы это ни делали, я уверен, что это будет специальная работа. Но не сложный. Я сомневаюсь, что существуют какие-либо существующие способы решения вашей проблемы таким образом.

1
ответ дан 4 December 2019 в 16:48

Комментарий Свена к вашему вопросу - определенно правильный способ сделать это.

Вы можете сделать это так:

  1. С A SSH на B , создание туннеля на порту 5000

     ssh someuser @ B -L 5000: 127.0.0.1: 5000
     
  2. Из этой оболочки на B , SSH на C , создавая второй туннель, заканчивающийся на ssh-сервере C .

     ssh someuser @ C -  NL 5000: 127.0.0.1: 22
     
  3. Со второго терминала на A , rsync ваши файлы прямо на C

     rsync -avz -e "ssh -p 5000" --progress --remove-source-files /  источник / каталог (скрытый)
     

Возможно, даже удастся настроить туннели на шагах 1 и 2 с помощью одной команды, но в быстром тесте, который я сделал, я не смог. Это может потребовать настройки ключей ssh ​​на B и C .

Если вы собираетесь автоматизировать процесс копирования, вам может потребоваться что-то вроде autossh , чтобы настроить и отключить туннели для вас через службы. Или вы можете сделать это через cron ..

0
ответ дан 4 December 2019 в 16:48

Теги

Похожие вопросы