DFS Replication (DFSR) обеспечивает автоматическую синхронизацию содержимого папок между серверами. Это основной механизм, который решает проблему «5 версий одного файла».
# Создаём группу репликации для папки "Документы"
New-DfsReplicationGroup -GroupName 'RG-Documents' -Description 'Репликация общих документов' | Out-Null
# Добавляем все серверы в группу
$members = @('DC01-SAM','FS-KAZ','FS-NNO','FS-PRM','FS-UFA')
$members | ForEach-Object {
Add-DfsrMember -GroupName 'RG-Documents' -ComputerName $_
}
# Добавляем реплицируемую папку
Add-DfsrReplicatedFolder -GroupName 'RG-Documents' -FolderName 'Документы'
# Настраиваем пути на каждом сервере
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'DC01-SAM' -ContentPath 'D:\DFSRoots\Shared\Документы' -PrimaryMember $true -StagingPathQuotaInMB 32768
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'FS-KAZ' -ContentPath 'D:\DFSRoots\Shared\Документы' -StagingPathQuotaInMB 16384
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'FS-NNO' -ContentPath 'D:\DFSRoots\Shared\Документы' -StagingPathQuotaInMB 16384
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'FS-PRM' -ContentPath 'D:\DFSRoots\Shared\Документы' -StagingPathQuotaInMB 8192
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'FS-UFA' -ContentPath 'D:\DFSRoots\Shared\Документы' -StagingPathQuotaInMB 8192
Для 5 филиалов мы выбрали топологию Hub-and-Spoke: центральный сервер в Самаре связан с каждым филиалом. Это проще в управлении и эффективнее использует каналы:
# Создаём соединения Hub-and-Spoke (Самара — центр)
$spokes = @('FS-KAZ','FS-NNO','FS-PRM','FS-UFA')
foreach ($spoke in $spokes) {
Add-DfsrConnection -GroupName 'RG-Documents' `
-SourceComputerName 'DC01-SAM' `
-DestinationComputerName $spoke `
-Description "SAM <-> $spoke"
}
# Настраиваем ограничение полосы (bandwidth throttling)
# Каналы до филиалов: Казань 50 Мбит, Н.Новгород 30 Мбит, Пермь 20 Мбит, Уфа 20 Мбит
# Ограничиваем DFSR до 50% канала в рабочее время и 90% ночью
# Расписание для FS-KAZ: рабочее время 9:00-18:00 — 25 Мбит (50%)
Set-DfsrConnectionSchedule -GroupName 'RG-Documents' `
-SourceComputerName 'DC01-SAM' `
-DestinationComputerName 'FS-KAZ' `
-Day Monday,Tuesday,Wednesday,Thursday,Friday `
-BandwidthDetail @{TimeSlotIndex=36; Bandwidth='25Mbps'}
# Ночное время 22:00-06:00 — 45 Мбит (90%)
Set-DfsrConnectionSchedule -GroupName 'RG-Documents' `
-SourceComputerName 'DC01-SAM' `
-DestinationComputerName 'FS-KAZ' `
-Day Monday,Tuesday,Wednesday,Thursday,Friday `
-BandwidthDetail @{TimeSlotIndex=88; Bandwidth='45Mbps'}
# Для Перми и Уфы — более жёсткие ограничения
Set-DfsrConnectionSchedule -GroupName 'RG-Documents' `
-SourceComputerName 'DC01-SAM' `
-DestinationComputerName 'FS-PRM' `
-Day Monday,Tuesday,Wednesday,Thursday,Friday `
-BandwidthDetail @{TimeSlotIndex=36; Bandwidth='10Mbps'}
Staging folder — это промежуточное хранилище, куда DFSR помещает файлы перед отправкой. Правильный размер staging — критически важен для производительности:
# Рекомендация Microsoft: staging quota = 32 × размер крупнейших файлов
# У РосЛогистик самые крупные файлы — сканы договоров до 50 МБ
# 32 × 50 МБ = 1600 МБ — но мы ставим с запасом
# Проверяем текущие настройки staging
Get-DfsrMembership -GroupName 'RG-Documents' | Select-Object ComputerName, ContentPath, StagingPath, StagingPathQuotaInMB | Format-Table
# ComputerName ContentPath StagingPath StagingPathQuotaInMB
# ------------ ----------- ----------- --------------------
# DC01-SAM D:\DFSRoots\Shared\Документы D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging 32768
# FS-KAZ D:\DFSRoots\Shared\Документы D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging 16384
# FS-NNO D:\DFSRoots\Shared\Документы D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging 16384
# FS-PRM D:\DFSRoots\Shared\Документы D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging 8192
# FS-UFA D:\DFSRoots\Shared\Документы D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging 8192
# Перемещаем staging на отдельный диск для лучшей производительности (если есть)
# На DC01-SAM:
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'DC01-SAM' -StagingPath 'E:\DFSStaging\Документы'
Если staging переполняется, DFSR начинает «чистить» его, что замедляет репликацию. Мы настроили мониторинг размера staging через SCOM.