С выходом Windows Server 2012 у администратора DHCP сервера появилась возможность использования DHCP сервера в режиме отказоустойчивости с репликацией зарезервированных адресов на вторичный DHCP сервер в режиме балансировки нагрузки либо в режиме горячей замены. Это большой шаг вперед, который позволил добиться высокой доступности DHCP серверов, снижения времени простоя на обслуживание, установку обновлений и прочие операции. Как водиться среди огромного количества плюсов не обошлось без небольшого, но неудобного минуса. Проблема заключается в том, что после создания резервирования на одной из нод отказоустойчивого кластера DHCP, обновленные данные, автоматически не реплицируются на вторичный сервер. Для репликации данных приходится использовать ручной режим, для этого необходимо щелкнуть правой кнопкой мыши по области в которую были внесены изменения и из выпадающего меню выбрать«Репликация отношений»
Для репликации можно использовать командную строку, а именно оболочку PowerShell запущенную в режиме Администратора, в которой необходимо выполнить команду:
Invoke-DhcpServerv4FailoverReplication -ComputerName «имя dhcp сервера с которого необходимо реплицировать данные«
Команда ниже проведет репликацию всех областей участвующих в группе репликаций с именем MS-NN-Failover:
Invoke-DhcpServerv4FailoverReplication -ComputerName dhcpserver.contoso.com -Name MS-NN-Failover
Этот пример запустит процесс репликации всех областей находящихся на сервере dhcpserver.example.com
Invoke-DhcpServerv4FailoverReplication -ComputerName dhcpserver.example.com
Пример ниже выполнит репликацию областей имеющих ScopeID 10.10.10.0 и 20.20.20.0
Invoke-DhcpServerv4FailoverReplication -ComputerName dhcpserver.contoso.com -ScopeId 10.10.10.0,20.20.20.0
Следует помнить, что ScopeID это не имя области, а именно пул адресов выделенных для области:
В начале статьи мы рассмотрели возможные варианты репликации области с первичного сервера на вторичный в ручном режиме. Далее рассмотрим вариант создания автоматической репликации. Для этого нам понадобиться написать скрипт из одной строки, создать пользователя с правами локального администратора на DHCP серверах, так же добавить его в группу администраторов DHCP сервера и создать в планировщике заданий простую задачу для запуска репликации.
Создадим на диске C:\ файл PowerShell с произвольным названием, например: DhcpServerFailoverReplication.ps1. Откроем его на редактирование и добавим строку:
Invoke-DhcpServerv4FailoverReplication -ComputerName dhcp.example.com -force
Ключ -force позволит выполнить команду без вывода подтверждения действий.
Сохраняем файл и переходим к созданию пользователя.
Так как мой сценарий работает в среде Active Directory я не буду использовать локального пользователя, а создам доменного. Он нам понадобиться для запуска задачи по расписанию. И так, создадим обычного пользователя с именем DhcpServerReplication,добавим его в группу локального администратора на каждом DHCP сервере участвующем в сценарии отказоустойчивости.
Далее добавим нашего пользователя в локальную группу Администраторы DHCP.
Напомню еще раз, что пользователя необходимо добавить в указанные группы на каждом DHCP сервере.
Самое время перейти к созданию задания в планировщике. Казалось бы, можно создать простое задание и запускать его планировщиком, например, каждые 5 минут. Но такой вариант запуска будет бесполезно грузить канал трафиком репликации, не зависимо от того была обновлена запись резервирования или нет. Мы воспользуемся запуском задачи по событию. При создании нового резервирования сервер регистрирует в журнале Microsoft-Windows-DHCP Server Events/Работает событие с кодом 106.
его мы и будем использовать при создании задания:
Нажмем Далее
На странице настройки триггера выберете: При занесении в журнал указанного события.
В целях безопасности PowerShell скрипты могут выполняться только интерактивно, то есть сначала надо запустить оболочку PowerShell и уже в ней указать путь к скрипту. Поэтому в поле «Action» указываем запуск powershell.exe, а в поле «Add Arguments» параметр -File и путь к нашему скрипту, вот так:
-WindowStyle Hidden -File «C:\DhcpServerFailoverReplication.ps1″
-File — путь к исполняемому файлу PowerShell
-WindowStyle Hidden — не показывать окно оболочки PowerShell
Также в поле аргументы можно указать:
-Command — выполняет указанные команды и любые другие параметры. Этот параметр тоже можно использовать для запуска скрипта, например: -Command ″& {C:\Scripts\start.ps1}″. Кроме того, с его помощью можно передавать в скрипт параметры: -Command ″& {C:\Scripts\start.ps1 -a 1 -b 3}″; -ExecutionPolicy — задает политику выполнения скриптов для текущего сеанса, может принимать значения Unrestricted, RemoteSigned, AllSigned и Restricted. Заданная политика будет действовать только в текущем сеансе и имеет приоритет над любыми ранее созданными политиками; -NonInteractive — отключить вывод интерактивных запросов к пользователю; -WindowStyle Hidden — запуск окна PowerShell в скрытом режиме, незаметно для пользователя; -NoProfile — предотвращает загрузку профиля, что может несколько ускорить выполнение скрипта; -NoExit — оставить оболочку открытой после отработки скрипта. Это может понадобиться при проверке и отладке скрипта.
После создания задачи запуска скрипта по событию, откройте закладку Действия и проверьте правильность строки запуска.
На закладке Общие укажите от какого пользователя запускать задание, его пароль, установите галочку запускать для всех пользователей и выполнять с наивысшими правами.
Откройте закладку Триггеры, проверьте источник и событие запуска.
В результате этих не сложных действий, наш планировщик заданий будет реагировать на появление события с кодом 106 и выполнять репликацию базы. Но это еще не все. Мы забыли настроить автоматическую репликацию DHCP при удалении резервации из базы данных. Для этого нам понадобиться событие с кодом 107.
Откроем еще раз закладку Триггеры и нажмем кнопку Создать. В окне мастера заполним необходимые поля, как на примере ниже:
Журнал: Microsoft-Windows-DHCP Server Events/Работает Источник: DHCP-server Код события: 107
После создания этого триггера, при регистрации в журнале события с кодом 107, так же будет запускать репликация базы DHCP на вторичный сервер.
Администратор DHCP сервера создает резервацию для компьютера. В журнале событий Microsoft-Windows-DHCP Server Events/Работает возникает событие, планировщик заданий получает информацию о возникшем событие и автоматически запускает задачу, которая в свою очередь запускает команду репликации. Вот таким не хитрым способом мы настроили автоматическую репликацию отказоустойчивого DHCP сервера. Больше статей в блоге: Заметки IT инженера, посвященном технологиям Microsoft.
Замечательная статья, дополнение к этой technet.microsoft.com/.../hh831385(v=ws.11).aspx