- How to Rsync Files Between Two Linux Servers Automatically
- Rsync Installation in Linux
- Syncing Targeted Directory Files in Linux Using Rsync
- Syncing Directories Using Rsync in Linux
- Automatically Sync Directories Using Rsync in Linux
- Step 1: Configure SSH Passwordless Login
- Step 2: Configure a Cron Job to Automate Rsync
- Rsync: копирование и синхронизация файлов с удаленным сервером
- Установка и основные параметр rsync
- Rsync: локальное копирование/синхронизация каталогов
- Rsync: настройка синхронизации с удаленным сервером
- Другие примеры использования rsync
- Резервное копирование в Linux с помощью rsync
How to Rsync Files Between Two Linux Servers Automatically
Setting up a backup server to take over a primary server’s operations when it becomes a victim of server downtime issues is a skill set that most Linux users and all Linux administrators need to master. It saves you from having to worry about the “what if” scenarios.
So during a worst-case scenario where some technicalities or server breach attempts might temporarily or permanently bring your primary server down, you can always rely on the presence of a backup server that is configured to function as a twin server environment of the primary/main server.
The backup server ensures that you do not lose your important system data configurations and user files.
Rsync Installation in Linux
Now that you understand the importance of having two servers in sync, it is time for a walkthrough on how to achieve this article’s objective. We are going to need two active and functioning servers together with their respective IP addresses or domain names.
- The IP address for the Main/Primary server: 3.135.207.xx.
- The IP address for the Backup/secondary server: 18.118.208.xx
To successfully sync these two servers automatically, we will need the aid of the rsync utility. Regardless of the Linux server distribution, you are using, install rsync from one of the following Linux installation commands.
Its installation should take place on both your primary/main server and your secondary/backup server.
$ sudo apt-get install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a net-mis/rsync [On Gentoo Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
Syncing Targeted Directory Files in Linux Using Rsync
Let’s for example assume the main/primary server (3.135.207.xx) has the directory LinuxShellTips with the following highlighted files that need syncing with the backup/secondary server (18.118.208.xx).
We need to access the backup/secondary server (18.118.208.xx) and create a similar directory that will host the files from the main/primary server (3.135.207.xx) when the rsync process begins.
$ mkdir LinuxShellTips_Backup $ cd LinuxShellTips_Backup
Syncing Directories Using Rsync in Linux
Since rsync supports the use of ssh protocol, server access security is guaranteed. To manually test how rsync performs between these two servers, we are going to execute the following command.
We are running this command from the backup/secondary server (18.118.208.xx).
$ sudo rsync -avzhe ssh [email protected]:/home/ubuntu/LinuxShellTips/ /home/ubuntu/LinuxShellTips_Backup
As you have noted, the three files from the main/primary server (3.135.207.xx) have been successfully copied to the backup/secondary server (18.118.208.xx).
Automatically Sync Directories Using Rsync in Linux
We need to accomplish the following two steps to fully automate rsync.
Step 1: Configure SSH Passwordless Login
While running the above command for testing rsync, you should have been prompted for the main/primary server’s access password. To get rid of the password request prompts while syncing your servers, we need to generate a public and private key.
Use the following command on your backup/secondary server:
$ sudo ssh-keygen -t rsa -b 2048
Press [Enter] when prompted for a passphrase to leave the field blank and copy the generated private and public keys to your main/primary server.
You can now comfortably execute the previously covered rsync command without providing a server access password for the main/primary server.
$ sudo rsync -avzhe ssh [email protected]:/home/ubuntu/LinuxShellTips/ /home/ubuntu/LinuxShellTips_Backup
Step 2: Configure a Cron Job to Automate Rsync
Since SSH passwordless login between these two servers is now possible, the final step to automate the rsync process is to create a cron job by editing the crontab file on the backup/secondary server.
Edit the crontab file by creating a cron job schedule for syncing your two Linux servers’ directory files.
*/5 * * * * sudo rsync -avzhe ssh [email protected]:/home/ubuntu/LinuxShellTips/ /home/ubuntu/LinuxShellTips_Backup
Save and close the crontab file.
The above-implemented cron job will automatically sync the backup/secondary server with the main/primary server after every 5 minutes.
Syncing two servers create the perfect solution to server downtime issues and server log errors. You also do not have to worry about losing your user and system data files as the backup server will be hosting a complete copy of those files.
Rsync: копирование и синхронизация файлов с удаленным сервером
21.04.2020
VyacheslavK
CentOS, Linux
комментариев 5
Утилиту Rsync можно использовать для копирования и синхронизации файлов и папок с локального сервера Linux на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы.
Чтобы исключить потерю информации при отправке файлов, rsync сначала копирует всю передаваемую информацию во временный файл. Другая важная особенность rsync – файлы передаются в один поток, не создается отдельный поток для каждого файла (что вызывает проблему при передаче большого количества маленьких файлов в других утилитах).
В данной статье мы рассмотрим варианты использования rsync для синхронизации и копирования каталогов и файлов, и приведем примеры его расширенных настроек.
Установка и основные параметр rsync
Установка rsync не отличается от установки, любого другого пакета. В CentOS пакет rsync присутствует в базовом репозитории и устанавливается через yum (или dnf в CentOS 8):
Синтаксис команды выглядит следующим образом:
# rsync опции источник приемник
В качестве источника и приемника можно указать локальную или удаленную директорию на другом сервере.
- -v – вывести подробную информацию о процессе
- -c – проверка контрольных сумм файлов
- -q – минимальная информация
Rsync: локальное копирование/синхронизация каталогов
Rsync можно использовать для копирования файлов между локальными директориями сервера. Если вам нужно скопировать файлы из одной директории в другую, выполните команду:
# rsync /var/www/html/package.zip /var/www/tmp/
В этом случае файл package.zip был просто скопирован в директорию /var/www/tmp/.
Можно добавить несколько опций для выполнения копирования. Например, чтобы перед выполнением копирования предварительно сжать файл, вывести подробную информацию и прогресс копирования файла, выполните:
# rsync -vz —progress /var/www/html/package.zip /var/www/tmp/
Вы можете использовать rsync для синхронизации содержимого локальных каталогов. Например, rsync удобно использовать, когда вам требуется скопировать файлы из рабочей директории, на хранилище, которое примонтировано к какому-то разделу. Несколько примеров команд:
# rsync -zvr /var/www/site /backup/
Мы скопировали директорию /var/www/site в директорию для резервных копий, опция -r позволила рекурсивно скопировать все вложенные директории и файлы.
Чтобы сохранить все атрибуты файлов при копировании, например, дату изменения и дату создания файлов, добавьте ключ -a:
# rsync -zvra /var/www/site /backup/
Если вы хотите скопировать только измененные файлы, добавьте опцию -c:
# rsync -zvrac /var/www/site /backup/
Я изменил только один файл и запустил команду. В результате в целевую директорию, был скопирован только измененный файл.
Очень удобно использовать такую опцию, если файлы меняются не часто. Таким образом вы экономите время на копирование/синхронизацию директории.
Чтобы не захламлять директорию для бэкапов, можно добавить опцию —delete, это позволит сравнить файлы с источником и в случае присутствия файла в целевой директории и отсутствие его в исходной директории, удалить его автоматически. Но призываю использовать данную опцию с осторожностью, так как если вы настроите копирование директории по крону, в случае сбоя или вмешательства из вне в рабочую директорию, с последующим удалением рабочих файлов, у вас затрется информация и в бэкапах, что не позволит вам восстановить ваши данные. Пример:
# rsync -zvrac —delete /var/www/site /backup/
Rsync: настройка синхронизации с удаленным сервером
Чаще всего копирование/синхронизация rsync с удаленным сервером используется для резервного копирования или синхронизации конфигурации нод кластера. Можно выполнять автоматическую синхронизацию данных с рабочего сервера на резервный, и в случае проблем на продуктивном севере быстро все перевести на резервный. Это довольно удобный и простой в настройке вариант.
В современных версиях rsync протокол SSH используется для передачи файлов по-умолчанию. Однако вы можете использовать и демон rsyncd. Для этого клиент rsync должен быть установлен на удаленном компьютере, и его демон добавлен в автозагрузку:
Конфигурационный файл rsync — /etc/rsyncd.conf. В этом файле можно настроить параметры rsync и настройки для синхронизации для разных ресурсов.
Для синхронизации через демона rsync адрес удаленного сервера указывается так rsync://. Например:
# rsync -av /var/www/site/package.zip rsync://192.168.1.32/backup
Чтобы скопировать файл на удаленный сервер, используйте команду:
# rsync -az /var/www/site/package.zip [email protected]:/backup/
Где IP, это адрес удаленного сервера. После запуска команды, удаленный сервер запросит пароль пользователя (если включена авторизация по паролю). Для автоматической авотризации нужно настроить SSH ключи.
Скопируем директорию с локального сервера на удаленный:
# rsync -zvra /var/www/site [email protected]:/backup/
То есть, все тоже самое, что и с локальными директориями, только мы указываем адрес удаленного сервера.
Так же вы можете синхронизировать файлы и с удаленного сервера на локальный, команда для этого немного изменится:
Для принудительного использования SSH протокола для копирования файлов, укажите это в вашей команде (для выбора транспортного протокола копирования файлов используется опция –e):
# rsync -zvrae ssh [email protected]:/backup/ /backup
Если удаленный SSH сервер имеет отличный от стандартного порт, его так же можно указать:
# rsync -zvrae «ssh -p 2222» [email protected]:/backup/ /backup
Другие примеры использования rsync
Если в рамках сессии синхронизации вы передаете много информации и важно ограничить скорость передачи, задайте это дополнительной опцией –bwlimit (указывается скорость в КБ/с):
# rsync -zvra —bwlimit=100 /var/www/site [email protected]:/backup/
При передаче файлов на удаленный сервер, вы можете ограничить максимальный размер файлов, которые нужно скопировать. Например, вы хотите скопировать все файлы, кроме файлов размером более 1 Мб:
# rsync -zvra —max-size=’1m’ /var/www/site [email protected]:/backup/
Если у вас на сервере нужна односторонняя синхронизация и после переноса файлов на удаленный сервер нужно удалить файлы с исходного сервера, воспользуйтесь опцией —-remove-source-files:
# rsync -zvra —remove-source-files —progress /var/www/site/package.zip [email protected]:/backup/
После выполнения команды, файл был скопирован на удаленный сервер и удален на источнике:
Так же очень удобный опции —include и —exclude, с помощью этих опций, можно делать исключения по копированию директорий или файлов:
# rsync -zvra —exclude=administrator/ /var/www/site [email protected]:/backup/
В данном случае мы исключили директорию “administrator” при копировании на удаленный сервер.
# rsync -zvra —include=’*.php’ —exclude=’*’ /var/www/site/administrator/ [email protected]:/backup/
Добавлением опции —include мы смогли задать фильтр по файлам, скопировали только файлы с расширением php.
Резервное копирование в Linux с помощью rsync
В своей рабое я часть использую rsync для автоматических задач резервного копирования в Linux. Можно написать простые bash скрипты или просто добавить команду rsync в cron и выполнять по расписанию.
Например, можно добавить в cron команду:
01 30 * * * rsync -zvra [email protected]:/backup/ /backup
В резульатате каждый день в 1-30 ночи, будет выполняться синхронизация каталогов локального и удаленного серверов.
Стоит учесть, что для выполнения команды rsync на удаленном сервер через cron, желательно настроить авторизацию серверов по SSH ключу. Примеры скриптов для бэкапа, мы приводили в статье «Скрипты для бэкапа файлов из Linux в облако», там как раз используется rsync для копирования файлов в подключенные облачные хранилища.
Предыдущая статья Следующая статья