DHCP-сервера являются одними из ключевых элементов сетевой инфраструктуры, однако, в отличии от DNS-серверов или контроллеров домена, в Windows Server отсутствовали штатные механизмы обеспечения высокой доступности. Начиная с Windows Server 2012 появилась возможность создания отказоустойчивых конфигураций DHCP, о чем мы сегодня и расскажем.
Перед тем, как приступать к рассказу о новых возможностях DHCP-сервера сделаем краткий экскурс в историю. До выхода Windows Server 2012 задача обеспечения высокой доступности решалась путем разделения области DHCP на две части, каждую из которых обслуживал свой сервер. Но такой подход имел множество неудобств, начиная от того, что все настройки нужно было дублировать между серверами и заканчивая тем, что в случае отказа все равно потребуется ручное вмешательство, особенно если оставшаяся часть области меньше, чем количество обслуживаемых ПК.
В Windows Server 2012 появилась возможность объединить два DHCP-сервера в конфигурацию высокой доступности, которая может работать в двух режимах: балансировки нагрузки или горячей замены.
Режим балансировки нагрузки является предпочтительным, в этом случае оба сервера одновременно обслуживают одну и ту же область, реплицируя данные между собой. Запросы клиентов делятся между серверами в заданной пропорции, по умолчанию 50/50. В случае отказа одного из серверов обслуживание продолжает оставшийся сервер.
Схема работы предельно проста и аналогична работе других сетевых сервисов, таких как DNS или AD — клиентские запросы обслуживаются до тех пор, пока в сети есть хоть один сервер, способный обработать запрос. Однако есть ограничение: два сервера на область DHCP. Следует помнить и понимать, высокая доступность DHCP реализуется не на базе серверов, а на базе областей. Если один сервер содержит несколько областей, то он, соответственно, может входить в несколько конфигураций высокой доступности.
Режим горячей замены предусматривает наличие второго сервера, который реплицируется с основным в режиме реального времени, но не обслуживает запросу клиентов до тех пор, пока основной сервер является активным. Свою работу сервер горячей замены начинает только при отказе основного сервера и прекращает с его возвращением в строй.
Такая схема может быть удобна для распределенных сетей и филиалов, когда резервный сервер располагается в другой части сети, связь с которой ограничена медленным каналом. На схеме ниже показана структура, где два сервера основной сети (область 192.168.31.0) работают в режиме балансировки нагрузки, в тоже время один из этих серверов является сервером горячей замены для филиала (область 192.168.44.0).
В штатном режиме все запросы сети филиала будет обслуживать сервер филиала, а в случае его отказа — сервер основного офиса. Это позволяет поддерживать высокую доступность DHCP в сети филиала без затрат на дополнительное оборудование.
Как видим, возможностей вполне достаточно для реализации самых разных схем и сценариев. Перейдем от теории к практике.
На двух серверах сети, в нашем случае это контроллеры домена SRV-DC01 и SRV-DC02, добавим роль DHCP-сервера, который обязательно авторизуем в Active Directory.
На одном из серверов добавляем и настраиваем область DHCP.
Затем щелкнув правой кнопкой мыши на нужную область, в выпадающем меню, выбираем Настройка обработки отказа.
Откроется мастер, который будет содержать указанную вами область, на первом экране ничего менять не надо, поэтом сразу жмем Далее. Следующим шагом будет предложено выбрать сервер-партнер. В этом качестве может выступать любой доступный DHCP-сервер на базе Windows Server 2012. В доменной сети вам будет доступен список авторизованных серверов, в рабочей группе выберите сервер воспользовавшись кнопкой Обзор.
Остается выбрать режим работы, при необходимости откорректировать некоторые параметры и задать общий секрет, ключевую фразу для создания ключа шифрования, к ней предъявляются такие же требования, как и к паролям.
Разберем доступные опции:
- Максимальное время упреждения для клиента — время на которое сервер-партнер продлевает аренду адресов клиентам второго сервера, если связь с ним потеряна.
- Процент распределения нагрузки — все понятно из названия, задает пропорцию распределения запросов между серверами.
- Интервал переключения состояния — время, после потери связи с партнером, когда сервер перейдет из состояния «связь потеряна» в состояние «партнер отключен»
- Проверять подлинность сообщений — между серверами устанавливается защищенный канал связи с использованием парольной фразы.
В режиме горячей замены набор опций несколько иной:
- Роль сервера-партнера — позволяет выбрать роли серверов, по умолчанию активным становится сервер, на котором настраивается обработка отказа, партнер переводится в ждущий режим.
- Адреса, выделенные для резервного сервера — часть диапазона, выделяемая резервному серверу для обслуживания новых клиентов в режиме «связь потеряна».
Указав все необходимые настройки жмем Далее и завершаем работу мастера.
На этом настройка высокодоступного DHCP-сервера закончена и самое время разобраться как это работает.
Важно! В настоящее время между серверами реплицируется только информация о выданных IP-адресах, при изменении настроек области, в том числе при резервировании адресов, изменения следует синхронизировать вручную.
Начнем с режима балансировки нагрузки. В этом случае область делится между серверами в указанной пропорции и все запросы равномерно распределяются между ними. При потере связи с сервером-партнером оставшийся сервер переходит в режим «связь потеряна», в это время он продлевает аренду существующим клиентам партнера на время, указанное во времени упреждения, а новым клиентам выдает адреса из своей части диапазона.
Если по истечении времени интервала переключения сервер партнер не вернется в строй, то оставшийся сервер перейдет в состояние «партнер отключен» и начнет самостоятельно выдавать адреса из всего диапазона. При этом обратившиеся за продлением аренды клиенты партнера вместо продления получат новый адрес. После того как партнер вернется в строй клиенты будут автоматически распределены между ними в заданной пропорции (но это не приведет к изменению адресов, просто переданные назад партнеру клиенты по истечении аренды получат новый адрес уже у него).
В режиме горячей замены сервер-партнер в режиме «связь потеряна», также продолжает продлевать аренду и выдает адреса новым клиентам из своего диапазона. При переходе в режим «партнер отключен» начинает обслуживать весь диапазон полностью и выдавать адреса всем клиентам. После того, как сервер-партнер вернется в строй, сервер горячей замены снова перейдет в ждущий режим и клиенты, по истечении времени аренды, получат адреса у основного сервера.
Возникла необходимость быстро и как можно проще организовать репликацию данных с сервера БД на резервный сервер. Простой и понятный способ на просторах Сети так и не нашелся, по этому пришлось по частям собрать информацию, которая и стала этой статьёй.
Решаемая задача. Исходные данные
Итак, имеем сервер БД, с которым работают клиенты, и резервный сервер, на который надо настроить репликацию с основной базы данных. В моём случае используется PostgreSQL 9.2.1, который установлен на обоих серверах и поддерживает потоковую репликацию. Предположим что база данных на основном сервере развернута и работает, на резервном только установлен, но не настроен PostgreSQL. Для примера возьмем IP-адрес 192.168.1.1 за адрес основного сервера, IP-адрес 192.168.1.2 — за адрес резервного.
Настраиваем основной сервер БД
В разделе «Роли входа», через PgAdmin создаем пользователя (роль) repl с правами «Может создавать потоковую репликацию и резервные копии». Дописываем в pg_hba или через «Конфигурацию сервера» в PgAdmin создаем строку, разрешающую пользователю repl подключение к БД. host replication repl 192.168.1.2/32 trust
В файле postgresql.conf сделали следующие изменения:
Первоначальное значение | Сменили значение | Описание |
---|---|---|
#max_wal_senders = 1 | max_wal_senders = 2 | Число резервных серверов, которое может подключится к основному серверу |
#wal_keep_segments = 32 | wal_keep_segments = 32 (можно поставить 256) | Сколько хранить сегментов. Нужно количество надо выбрать такое, чтобы резервный сервер успевал все забирать и обрабатывать. Я поставил 256 чтобы за сутки wal-файлы не затирались |
#wal_level = hot_standby | wal_level = hot_standby | hot_standby добавляет информацию, необходимую для запуска только для чтения запросов на резервный сервер |
#checkpoint_segments = 3 | checkpoint_segments = 16 | Можно увеличить количество сегментов в WAL-логе |
Настраиваем резервный сервер
Останавливаем сервис Postgresql 9.2 на резервном сервере и очищаем папку с данными, которые создаются при установке PostgreSQL, например D:database. После этого запускаем бекап из командной строки:"C:PostgreSQLbinpg_basebackup.exe" --host=192.168.1.1 --port=5432 --username=repl -D "D:database"
Настраиваем postgresql.conf в D:database
Первоначальное значение | Сменили значение | Описание |
---|---|---|
#hot_standby = off | hot_standby = on | Разрешит read-only запросы к СУБД во время процесса восстановления |
Настраиваем recovery.conf в D:database
Значение | Описание |
---|---|
standby_mode = ‘on’ | Включить режим восстановления и работать как резервный сервер (slave) |
primary_conninfo = ‘host=192.168.1.1 port=5432 user=repl’ | Параметры для соединения с основным сервером |
trigger_file = ‘D:\database\end_trig’ | Если создадим файл с именем end_trig в указанной папке, то сервер выйдет из режима репликации и станет обычным сервером |
Запускаем сервис Postgresql на резервном сервере. Должно стартовать без ошибок. Проверяем работу репликации: производим изменения в таблице на основном сервере, и проверяем — отразились ли они на резервном.
Настройка архивирования логов (если нужно)
В файле postgresql.conf на основном сервере включаем следующее:
archive_mode = on | archive_command = ‘copy «%p» «e:\Backup\%f»’ |
В папку e:Backup будут падать архивы логов. (Внимание, они могут забить все место на диске, нужно настроить очистку при переполнении) Чтобы воспользоваться архивами логов, нужно cкопировать логи в папку из которой будем восстанавливаться и в recovery.conf дописать строчку restore_command = 'copy "e:\Backup\%f" "%p"'
Действия при сбоях
Если вышел из строя резервный сервер, то останавливаем на нем службу Postgres и выполняем все действия как в пункте «Настраиваем резервный сервер». Если вышел из строя основной сервер, то необходимо перевести резервный сервер в обычный режим работы: для этого необходимо создать файл end_trig в папке как указано в recovery.conf trigger_file = ‘D:\database\end_trig’ b сделать vacuum и reindex базы.
Примечания
Репликации можно настраивать как с Windows XP на Windows 7, так и наоборот. Для Windows 7 и Wndows XP в pg_hba разные настройки, т.к. в XP нет протокола ip6, то строка с ним должна быть закомментирована.Используемые источники:
- https://interface31.ru/tech_it/2015/07/nastraivaem-vysokodostupnyy-dhcp-server-v-windows-server-2012.html
- https://habr.com/post/174205/