У меня есть два больших массива хранения от разных производителей, каждый с пропускной способностью около 10 Гбит / с для чтения / записи. Мне нужно переместить несколько ТБ файлов из одного в другой. Каждый говорит по NFS и CIFS. В настоящее время при использовании cp, scp или rsync интерфейс GbE промежуточного хоста становится узким местом, поскольку мне приходится читать из одного массива и записывать в другой. Ни в одном из массивов нет хоста, в который я могу войти, чтобы исключить посредника. У меня есть группы хостов, которые могли бы обеспечить дополнительную пропускную способность, если бы я только мог сделать что-то вроде:
rsync [src] [dest] --parallel-hosts=host1,host2,host3,host4
Есть ли простое решение этой проблемы?
Если два массива хранения не будут напрямую взаимодействовать друг с другом, лучшим вариантом будет создание специализированной машины с подключениями с высокой пропускной способностью. Даже относительно недорогая новая рабочая станция с парой сетевых адаптеров 10GbE может значительно увеличить пропускную способность, если поддерживающая сеть и массивы хранения могут ее взять.
Один трюк, который я использую для распараллеливания таких вещей, заключается в том, что я делаю это в два прохода: сначала создаю список файлов для передачи, затем разбиваю этот список, а затем передаю работу нескольким машинам.
Вы можете сделать это с помощью rsync примерно так:
Это очень помогает для сетевых файловых систем (NFS, Lustre и т. Д.), Где вы обычно не можете получить достаточную производительность от одного процесса / машины rsync.
По-прежнему требуется время, чтобы просмотреть файловые системы для их сравнения, но фактическое перемещение данных может быть очень быстрым. Кроме того, такие вещи, как cpio и cp, имеют тенденцию превосходить rsync при перемещении необработанных данных.
Другой вариант, который я использую довольно часто, - это простое find -type f /src
а затем разделите этот список файлов и загрузите его в cpio на нескольких хостах.
Мне бы хотелось узнать, как это сделать проще / быстрее ...
Вам следует поговорить с поставщиками хранилищ, чтобы определить, могут ли контроллеры напрямую общаться друг с другом. Если не построить или арендовать промежуточный узел с высокой пропускной способностью. Я предполагаю, что есть способ заставить два массива хорошо работать и запустить полный клон на контроллерах.
Если вы не можете найти способ, чтобы контроллеры разговаривали друг с другом (как уже упоминали другие), вы можете попробовать сделать это:
На ваше место назначения сервер, выполните следующую команду:
$ nc -l -p 9999 | tar xvzf -
Затем на вашем источник сервер, выполните следующую команду:
$ tar cvzf - <SOURCEFILES> | nc -q 1 <DST_SERVER> 9999
Преимущество этого заключается в том, что он позволяет избежать накладных расходов на шифрование, которые дает SSH / rsync, поэтому вы получите небольшой прирост скорости. Это также сжимает и распаковывает исходный и целевой серверы в потоке, поэтому ускоряет процесс передачи за счет некоторых циклов ЦП.
Удачи!