Для синхронизации больших объемов информации между сетевыми узлами необходимо использовать команду rsync. Причины к выбору этого инструмента - высокая производительность и способности возобновлять прерванную передачу.
Скорость rsync объясняется тем, что передаются только различия (дельты) между источником и местом назначения, что делает эту утилиту практически идеальной для передачи больших файлов.
В зависимости от типа сервера для установки используется либо yum (в Centos), либо apt-get
В терминале Centos - sudo yum install rsync
В терминале Debian - sudo apt-get install rsync
При использовании RSYNC допускается различное направление передачи данных.
1) Перенос файлов с текущего сервера на удаленный сервер:
rsync -avz --progress /local/source/ user@remotehost:/remote/destination/
2) Передача файлов с удаленного сервера
rsync -avz --progress user@remotehost:/remote/source/ /local/destination/
Рассмотрим опции RSYNC
Опция -a переводит утилиту в режим архивации, в котором будут сохранятся следующие
параметры - символические ссылки, отметки времени, разрешения и другие атрибуты
Ключ -v (verbose) предоставляет информацик о ходе передачи данных в подробном виде
Опция -z выполняет сжатие изменений на время сеанса синхронизации
Ключ --progress включает индикатор прогресса
Передача файлов по сети всегда может закончится сбоем
Если передача не удалась, она возобновляется запуском с ключом --partial:
rsync -avz --progress --partial /local/source/ user@remotehost:/remote/destination/
Утилиты tar и ssh
Другим способом является применение утилиты tar и ssh.
Поскольку в Linux можно соединять потоки данных между программами с помощью конвеера (pipe), есть возможность задействовать ssh и tar для сжатия на источнике и распаковки на приемнике
tar czf - /local/source/ | ssh user@remotehost "tar xzf - -C /remote/destination/"
Эта команда создает сжатый архив исходного каталога и отправляет его по SSH для извлечения непосредственно на удаленный сервер.
В некоторых сложных случаях для большего контроля за передачей данных следует использовать утилиту socat
tar czf - /local/source/ | socat -u - TCP:remotehost:порт
При этом на приемнике следует настроить socat для прослушивания входящего соединения:
socat TCP-LISTEN:port,fork - | tar xzf - -C /remote/destination/
1) Чтобы предотвратить проблемы с переподключением следует использовать screen или tmux. Это позволяет при длительной передаче отсоединиться и снова подключиться к сеансу.
2) Синхронизация больших данных должна строится с учетом сетевых нагрузок, не следует выполнять ее в пиковые часы
С помощью cron можно запланировать синхронизацию на 4 часа ночи по понедельникам
0 4 * * 1 rsync [options] /path/source/ /path/destination/
3) Если синхронизируемые данные являются достаточно важными, следует заранее принять дополнительные меры по настройке SSH в сторону большей безопасности