Настройка репликации SYSVOL с помощью утилит Rsync и Unison
В данном разделе приводится пример настройки репликации SYSVOL между контроллерами домена Эллес с помощью утилит Rsync и Unison.
Предварительные условия
Перед началом настройки:
-
Убедитесь, что в конфигурационном файле /app/inno-samba/etc/smb.conf на контроллерах Эллес присутствует следующий раздел с указанными настройками:
[sysvol] path = /app/inno-samba/var/locks/sysvol read only = No
-
Обеспечьте синхронизацию времени между серверами, на которых работают контроллеры домена.
Процесс репликации сравнивает версии файла на обоих концах репликационной связи, а в определении версии ключевую роль играет время последнего изменения файла. Если с момента предыдущей синхронизации файл поменялся только на одном конце, то именно эта версия будет реплицироваться. Если файл поменялся на обоих концах связи и используется способ автоматического разрешения конфликтов, при котором преимущество имеет последнее по времени изменение, то файл с более поздней временной меткой будет реплицироваться по связи.
-
На всех контроллерах домена Эллес установите утилиты Rsync и Unison из официальных репозиториев либо выполните сборку из исходников, следуя инструкциям в официальной документации:
Пример команды установки:
sudo apt install rsync unison -y
-
Настройте беспарольный доступ по протоколу SSH к контроллерам домена, на которые будут синхронизироваться данные, следуя инструкциям в официальной документации на используемый дистрибутив Linux с учетом требований к безопасности.
-
Создайте лог-файл для ведения журнала репликации и настройте его ротацию штатными средствами.
Например:
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 между контроллерами Эллес состоит из следующей последовательности шагов:
-
Если в результате изменений в 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
-
-
Выполняется синхронизация содержимого SYSVOL с каждым контроллером на основе заданного для него профиля (файл с расширением prf):
/usr/bin/unison <profile-name>
Необходимо учитывать, что Unison не всегда синхронизирует все изменения за один запуск, поэтому команда /usr/bin/unison должна выполняться последовательно в цикле для каждого профиля контроллера, участвующего в синхронизации, пока в ответе не будет получена строка "Synchronization complete at" или не будет исчерпано сконфигурированное количество попыток. -
Если в результате анализа логов Unison обнаруживаются конфликты синхронизации (пропущенные файлы), для каждого такого конфликта команда /usr/bin/unison выполняется с указанием профиля предпочтительной стороны:
/usr/bin/unison -prefer <preferred-profile-name>
Пример настройки
В примере настраивается синхронизация в домене с тремя контроллерами Эллес:
-
DC01 — контроллер домена с FSMO-ролью PDC Emulator, источник данных для синхронизации;
-
DC02, DC03 — контроллеры домена, приемники данных в рамках синхронизации.
Для каждого из целевых контроллеров создается профиль синхронизации:
-
На контроллере DC01 создается каталог для размещения профилей. Например:
install -o root -g root -m 0750 -d /root/.unison
-
В каталоге /root/.unison создаются:
-
профиль для контроллера домена DC02:
Файл dc02.prf# Unison preferences file # Roots of the synchronization # # copymax & maxthreads params were set to 1 for easier troubleshooting. # Have to experiment to see if they can be increased again. 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=1 retry=3 confirmbigdeletes=false servercmd=/usr/bin/unison copythreshold=0 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 # # copymax & maxthreads params were set to 1 for easier troubleshooting. # Have to experiment to see if they can be increased again. 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=1 retry=3 confirmbigdeletes=false servercmd=/usr/bin/unison copythreshold=0 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" или не будет исчерпано сконфигурированное количество попыток повторного запуска.