{{tag>shell utils network rsync ssh}}

====== Настройка 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/