Найти в Дзене

Синхронизация big data между серверами

Для синхронизации больших объемов информации между сетевыми узлами необходимо использовать команду 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 в сторону большей безопасности