Настройка RSYNC для точной синхронизации данных

Потребовалось синхронизировать данные на 2 машинах под управлением Red Hat 3. Для выполнения данной задачи использовалась утилита rsync. Ее основные характеристики:

$-a – архивный режим (включает рекурсивное копирование и сохранение прав и владельца)
$-t, --times – обновлять время модификации файла на приёмной стороне. При отсутствии этой опции или -a становиться неэффективной оптимизация передачи по времени изменения файлов
$-c, --checksum – использование сверки по контрольным суммам, а не по времени изменения и размеру
$--size-only – проверка только по размеру файлов
$-r – рекурсивный режим (копирование всех подпапок и файлов в них)
$-v – подробные вывод операций
$-z – компрессия данных при передачи
$-p – сохранять права
$--del – удалить файлы в папке назначения которых нет в источнике (точная копия)
$-R – использовать относительные пути при создании символических ссылок
$--numeric-ids – не транслировать имена владельца и группы в цифровые UID и GID, оставить на удалённой стороне номера как есть
$--size-only – использование для сверки только размер файлов
$--bwlimit=KBPS – ограничение пропускной способности, чтобы не забивать канал (Kbit/s)
$--ignore-errors – продолжать копирование и удаление после появления ошибок
$--delete - удалять файлы со стороны получателя, если их нет на отправителе(ТОЧНАЯ КОПИЯ)

Кроме того, передачу данных можно туннелировать через ssh, в нашем случае шифрование данных при передаче не требовалось. Для более подробной информации об утилите выполните

man rsync

Ниже перечислен порядок действий.

1. Устанавливаем rsync на обеих машинах:

yum install rsync

2. На машине-отправителе редактируем файл /etc/xinetd.d/rsync:

service rsync {
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

3. Перезапустим xinetd:

service xinetd restart

4. Изменим /etc/rsyncd.conf:

# Common
pid file = /var/run/rsyncd.pid
max connections = 5
# Security
use chroot = yes
uid = nobody
gid = nobody
hosts allow = 192.168.1.1
hosts deny = *
# Logging
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
# Shares
[ftp]
path=/var/ftp/pub
comment=server's ftp

5. При необходимости, откроем на фаерволле машины-отправителя порт 873(rsync по умолчанию)

6. Протестируем:

# rsync rsync://127.0.0.1/
ftp servers's ftp

7. Далее, отредактируем /etc/rsyncd.conf в соответствии с указанным в п.4 образцом:.

Получилось вот так:

# Common
pid file = /var/run/rsyncd.pid
max connections = 5
# Security
#use chroot = yes
uid=myuser
gid=mygroup
hosts allow = 192.168.0.14
hosts deny = *
# Logging
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
# Shares
[test]
path=/home/myuser/test/
comment=test
[htdocs]
path=/usr/local/apache/htdocs/
comment=htdocs data
[data]
path=/home/myuser/data/
comment=data

8. На машине-получателе настраиваем скрипт запуска rsync по крону:

#!/bin/bash
#Copying of /home/myuser/data/
rsync -avz --delete 192.168.0.11::data /home/myuser/data/
#Copyint htdocs
#rsync -avz --delete 192.168.0.11::htdocs /usr/local/apache/htdocs/