Настройка репликации SYSVOL с помощью утилит Rsync и Unison

В данном разделе приводится пример настройки репликации SYSVOL между контроллерами домена Эллес с помощью утилит Rsync и Unison.

Предварительные условия

Перед началом настройки:

  1. Убедитесь, что в конфигурационном файле /app/inno-samba/etc/smb.conf на контроллерах Эллес присутствует следующий раздел с указанными настройками:

    [sysvol]
    path = /app/inno-samba/var/locks/sysvol
    read only = No
  2. Обеспечьте синхронизацию времени между серверами, на которых работают контроллеры домена.

    Процесс репликации сравнивает версии файла на обоих концах репликационной связи, а в определении версии ключевую роль играет время последнего изменения файла. Если с момента предыдущей синхронизации файл поменялся только на одном конце, то именно эта версия будет реплицироваться. Если файл поменялся на обоих концах связи и используется способ автоматического разрешения конфликтов, при котором преимущество имеет последнее по времени изменение, то файл с более поздней временной меткой будет реплицироваться по связи.

  3. На всех контроллерах домена Эллес установите утилиты Rsync и Unison из официальных репозиториев либо выполните сборку из исходников, следуя инструкциям в официальной документации:

    Пример команды установки:

    sudo apt install rsync unison -y
  4. Настройте беспарольный доступ по протоколу SSH к контроллерам домена, на которые будут синхронизироваться данные, следуя инструкциям в официальной документации на используемый дистрибутив Linux с учетом требований к безопасности.

  5. Создайте лог-файл для ведения журнала репликации и настройте его ротацию штатными средствами.

    Например:

    touch /var/log/sysvol-sync.log
    chmod 640 /var/log/sysvol-sync.log

Настройка репликации

Приводимый пример настройки репликации SYSVOL между контроллерами домена основан на следующих допущениях:

  • утилита Rsync доступна на участвующих в синхронизации контроллерах по пути /urs/bin/rsync;

  • утилита Unison доступна на участвующих в синхронизации контроллерах по пути /urs/bin/unison;

  • на участвующих в синхронизации контроллерах созданы файлы для ведения журналов синхронизации (указываются при вызове команд синхронизации);

  • команды синхронизации выполняются от имени учетной записи со всеми необходимыми правами (для упрощения в примерах используется учетная запись root);

  • наличие конфликтов синхронизации определяется по наличию пропущенных файлов (Skipped) в логах утилиты Unison; конфликты разрешаются вручную путем повторного запуска Unison с указанием предпочтительной стороны с помощью ключа -prefer;

  • требуемая последовательность команд синхронизации оформляется в виде скрипта, который:

    • должен определять, имеет ли контроллер домена, на котором он запущен, FSMO-роль PDC Emulator (проверка наличия SRV-записи _ldap._tcp.pdc._msdcs.<DnsDomain> в DNS), и при выполнении данного условия — запускать синхронизацию SYSVOL со всеми контроллерами Эллес по очереди;

    • если разрешено использование cron, запускается по заданному расписанию, либо запускается автоматически при включении сервера и выполняется постоянно, периодически запуская утилиты Rsync и Unison по заданному расписанию.

Последовательность шагов

В общем случае синхронизация SYSVOL между контроллерами Эллес состоит из следующей последовательности шагов:

  1. Если в результате изменений в SYSVOL меняется состав подкаталогов, предварительно выполняется синхронизация владельцев и прав с помощью Rsync:

    • если изменения вносились на локальном контроллере:

      /usr/bin/rsync -XAavz --log-file /var/log/sysvol-sync.log --delete-after -f"+ */" -f"- *" /app/inno-samba/var/locks/sysvol root@target-dc.domain.name:/app/inno-samba/var/locks
    • если изменения вносились на удаленном контроллере:

      /usr/bin/rsync -XAavz --log-file /var/log/sysvol-sync.log --delete-after -f"+ */" -f"- *" root@source-dc.domain.name:/app/inno-samba/var/locks/sysvol /app/inno-samba/var/locks
  2. Выполняется синхронизация содержимого SYSVOL с каждым контроллером на основе заданного для него профиля (файл с расширением prf):

    /usr/bin/unison <profile-name>
    Необходимо учитывать, что Unison не всегда синхронизирует все изменения за один запуск, поэтому команда /usr/bin/unison должна выполняться последовательно в цикле для каждого профиля контроллера, участвующего в синхронизации, пока в ответе не будет получена строка "Synchronization complete at" или не будет исчерпано сконфигурированное количество попыток.
  3. Если в результате анализа логов Unison обнаруживаются конфликты синхронизации (пропущенные файлы), для каждого такого конфликта команда /usr/bin/unison выполняется с указанием профиля предпочтительной стороны:

    /usr/bin/unison -prefer <preferred-profile-name>

Пример настройки

В примере настраивается синхронизация в домене с тремя контроллерами Эллес:

  • DC01 — контроллер домена с FSMO-ролью PDC Emulator, источник данных для синхронизации;

  • DC02, DC03 — контроллеры домена, приемники данных в рамках синхронизации.

Для каждого из целевых контроллеров создается профиль синхронизации:

  1. На контроллере DC01 создается каталог для размещения профилей. Например:

    install -o root -g root -m 0750 -d /root/.unison
  2. В каталоге /root/.unison создаются:

    • профиль для контроллера домена DC02:

      Файл dc02.prf
      # Unison preferences file
      # Roots of the synchronization
      root = /app/inno-samba/var/locks
      # Note that 2 x / behind DC02, it is required
      root = ssh://root@dc02.domain.name//app/inno-samba/var/locks
      #
      # Paths to synchronize
      path = sysvol
      #
      #ignore = Path stats    ## ignores /var/www/stats
      auto=true
      batch=true
      perms=0
      rsync=true
      maxthreads=100
      retry=3
      confirmbigdeletes=false
      servercmd=/usr/bin/unison
      copyprog = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --inplace --compress
      copyprogrest = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --partial --inplace --compress
      #copyquoterem = true
      copymax = 1
      logfile = /var/log/sysvol-sync.log
    • профиль для контроллера домена DC03:

      Файл dc03.prf
      # Unison preferences file
      # Roots of the synchronization
      root = /app/inno-samba/var/locks
      # Note that 2 x / behind DC2, it is required
      root = ssh://root@dc03.domain.name//app/inno-samba/var/locks
      #
      # Paths to synchronize
      path = sysvol
      #
      #ignore = Path stats    ## ignores /var/www/stats
      auto=true
      batch=true
      perms=0
      rsync=true
      maxthreads=100
      retry=3
      confirmbigdeletes=false
      servercmd=/usr/bin/unison
      copyprog = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --inplace --compress
      copyprogrest = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --partial --inplace --compress
      #copyquoterem = true
      copymax = 1
      logfile = /var/log/sysvol-sync2.log

Для запуска синхронизации на контроллере домена DC01 запускается утилита Unison с указанием в качестве аргументов имен профилей целевых контроллеров домена:

/usr/bin/unison dc02
/usr/bin/unison dc03

При запуске Unison могут наблюдаться неполные синхронизации. В этом случае требуется повторный запуск, пока в ответе от Unison не будет получено сообщение "Synchronization complete" или не будет исчерпано сконфигурированное количество попыток повторного запуска.