Страница 1 из 1

Простые шаги для создания отказоустойчивого Windows-сервера

Добавлено: 15 май 2010, 14:26
Raven
Эффект неваляшки: простые шаги для создания отказоустойчивого Windows-сервера

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

Создаем софтверное зеркало

Любое устройство современного компьютера может выйти из строя, и высокая стоимость компонента совершенно не гарантирует 100% надежность. Недолговечны и жесткие диски, хранящие тонны бесценной информации, потеря которой может иметь любые последствия, вплоть до развала бизнеса. Традиционным способом сохранить данные является применение систем резервирования, в Win2k8 для этого используется компонент "Server Backup", который пришел на смену мощной утилите NTBackup. Но сегодня мы не будем устраивать бэкапные разборки, лучше поговорим о простом и при этом очень эффективном способе увеличения отказоустойчивости системы — создании софтварного RAID 1. Напомню, что в массиве RAID 1 используется зеркалирование двух дисков, что и обеспечивает высокую отказоустойчивость. При выходе из строя одного харда второй продолжает работать, как ни в чем не бывало. Чтобы восстановить массив, просто подключаем к серверу второй диск вместо неисправного. Единственный недостаток — это большая стоимость такого решения (на единицу объема), по сравнению с однодисковым вариантом или копированием всех критических данных на внешнее устройство для бэкапа.

Процедура настройки RAID 1 для системных дисков или дисков с данными в Win2k8 несколько отличается. Лонгхорн поддерживает два типа загрузки: MBR (Master Boot Record) и GPT (GUID Partition Table). Тип загрузки MBR разработан специально для x86 систем и на сегодня является наиболее популярным. Тип GPT первоначально появился в системах на базе Itanium и сейчас широко используется при загрузке 64-разрядных ОС. Настройка зеркалирования системных дисков для MBR и GPT также будет немного отличаться.

Теперь последовательно разберем организацию RAID 1 для каждого случая. Начнем с системного диска, использующего MBR. После установки системы у нас должен быть один уже рабочий (системный) диск и второй пока незадействованный диск, который будет зеркалом основного. Для управления хардами используем вкладку Disk Management, — она доступна в Server Manager и в консоли Computer Management (compmgmt.csc). Перед созданием RAID следует преобразовать диски в динамические. Выбираем значок диска в поле внизу и в контекстном меню — пункт Convert to Dynamic Disk ("Преобразовать в динамический диск"). Далее отмечаем в появившемся окне Disk 0, в окне Disk to Convert подтверждаем свой выбор нажатием Convert. После преобразования диска в Disk Management он будет помечен как Dynamic. Эту операцию можно произвести в командной строке при помощи утилиты DISKPART. Вызываем:

Код: Выделить всё

> diskpart
Смотрим список дисков и некоторые их характеристики:

Код: Выделить всё

diskpart> list disk
Подключаем disk 0 и преобразуем его в динамический:

Код: Выделить всё

diskpart> select disk 0
Disk 0 is now the selected disk.
diskpart> convert dynamic
DiskPart successfully converted the selected disk to dynamic format.
Внимательно прочти сообщение после выполнения этой команды, в некоторых случаях для завершения операции требуется перезагрузка.

C системным диском все. Подключаем второй винч. В случае, когда статус диска в Disk Management показан как Offline, активируем его выбором пункта Online в контекстном меню или аналогичной командой diskpart. Если диск еще не размечен, эту операцию можно произвести при помощи самого Disk Management, выбрав в меню пункт Initialize Disk и затем тип таблицы разделов MBR или GPT. Далее преобразовываем его в динамический диск самостоятельно или поручаем все операции мастерам. Выбираем первый диск и в контекстном меню щелкаем пункт Add Mirror; в появившемся окне отмечаем второй диск. Мастер предупредит, что он будет преобразован в Dynamic Disk, — соглашаемся, нажав ОК. Начнется процесс переноса данных на второй диск. По окончании в загрузчик будет добавлена возможность загрузки ОС со второго харда.

В командной строке действия выполняются также просто, правда, в отличие от Disk Management, здесь уже нет подстраховки, и допущенная ошибка может привести к потере данных. Смотрим список томов:

Код: Выделить всё

diskpart> list volume
Обычно загрузочный первый диск идет нулевым томом, выбираем его:

Код: Выделить всё

diskpart> select volume 0
Volume 0 is the selected volume.
И создаем зеркало, указав в качестве параметра второй диск:

Код: Выделить всё

diskpart> add disk=1
DiskPart succeeded in adding a mirror to the volume.
В процессе создания зеркала поле "Status" команды "list volume" будет показывать значение "Rebuild"; когда оно изменится на "Healthy", процесс успешно завершен.

Зеркалирование системных дисков, использующих GPT, чуть сложнее, так как EFI (Extensible Firmware Interface, расширяемый микропрограммный интерфейс) и MSR (The Microsoft Reserved) разделы необходимо создавать вручную. Если второй хард уже содержит таблицу MBR, обязательно переконвертируем его в GPT. Это можно сделать из меню Disk Management или командой:

Код: Выделить всё

diskpart> select disk 1
diskpart> convert GPT
DiskPart successfully converted the selected disk to GPT format.
Но диск можно конвертировать в GPT, только если он пуст, поэтому если на диске уже созданы разделы, последовательно удаляем их при помощи команд:

Код: Выделить всё

diskpart> select partition 1
diskpart> delete partition override
Теперь смотрим таблицу разделов системного диска, чтобы затем повторить ее на резервном:

Код: Выделить всё

diskpart> select disk 0
diskpart> list partition
Partition ### Type Size Offset
-----------------------------------
Partition 1 System 400 MB 32 KB
Partition 2 Primary 13996 MB 400 MB
Partition 3 Reserved 32 MB 14 GB
Переходим ко второму диску:

Код: Выделить всё

diskpart> select disk 1
Создаем системный EFI-раздел размером 400 Мб:
diskpart> create partition efi size=400
Diskpart succeeded in creating the specified partition.
В качестве дополнительного параметра можно задать смещение. Теперь MSR-раздел, который используется для хранения метаданных, не виден в Disk Management. Такой раздел рекомендуется создавать первым на диске с данными и вторым на системном диске. При преобразовании MBR -> GPT раздел MSR создается автоматически, но его размер нас может не устраивать:

Код: Выделить всё

diskpart> create partition msr size=32
Diskpart succeeded in creating the specified partition.
После создания MSR и EFI разделов необходимо отформатировать EFI в FAT. Для этого назначаем ему букву диска. В обычном варианте это можно было бы сделать через Disk Management, выбрав в контекстном меню пункт New Simple Volume и затем последовательно ответив на вопросы визарда, но с GPT такой фокус не проходит, поэтому используем diskpart:

Код: Выделить всё

diskpart> select disk 1
diskpart> select partition 1
diskpart> assign letter=E
DiskPart successfully assigned the drive letter or mount point.
И — форматируем:

Код: Выделить всё

C:\Windows\system32>format e: /fs:fat /q /y
Осталось скопировать данные с раздела EFI первого диска (пусть это будет D):

Код: Выделить всё

C:\Windows\system32>xcopy d:\*.* e: /s /h
Далее конвертируем диски в динамические (convert dynamic) и миррорим, как для MBR.

И, наконец, разберем, как создать RAID 1 для дисков с данными. В этом случае потребуется три диска: на первом (в diskpart обозначен как нулевой) будет установлена система, два других будут содержать данные. Здесь все просто: выбираем в контекстном меню одного из data-дисков пункт New Mirrored Volume и следуем указаниям визарда. Основной шаг — выбор второго диска. В командной строке нужно указать диск или том при помощи select, а затем создать зеркало командой "add disk=2". Чтобы отключить зеркало, используем команду "break disk=2".

Примечание редактора: чтобы повысить общий уровень надежности и защиты данных на критически важных серверах, зеркалированные диски можно разместить на разных дисковых контроллерах. Такая техника обеспечивает отказоустойчивость на уровне контроллеров и носит название "дуплексирование дисков".

Также не забываем о распределенной файловой системе DFS, позволяющей объединять находящиеся на разных компьютерах ресурсы в единое логическое пространство имен. Данные в таком случае могут храниться на нескольких серверах с возможностью синхронизации информации. При выходе из строя одной системы это не скажется на работе сервисов. Подробнее о DFS ты можешь прочитать в статье "Страж файлового дерева", опубликованной в декабрьском номере Х за 2007 год.
Повышаем надежность сети

Без сети любой, даже очень дорогой современный сервер не имеет смысла, он попросту не сможет выполнять возложенные на него функции. Поэтому резервирование сетевых подключений является важным шагом построения отказоустойчивого сервера. При наличии двух однотипных сетевых карт их можно объединить в одно псевдоустройство, которое будет восприниматься системой как обычный сетевой интерфейс со своими МАС- и IP-адресами. Эта технология известна как "агрегация каналов" (Link aggregation, LAG) или "транкинг" (trunking). Работая в паре, две сетевые карты обеспечивают практически вдвое большую пропускную способность, а при выходе из строя одной из карт всю нагрузку берет на себя вторая, доступ к сервису при этом не прерывается. В ядро Linux уже встроена возможность объединения двух сетевых интерфейсов в один, подобная технология заложена и в других операционках — *BSD, Mac OS X, OpenSolaris.

В Windows такой функциональности изначально не предусмотрено, поэтому, чтобы получить нужный результат, необходимо использовать сторонние драйвера и, как водится, для карт разных производителей придется искать свой вариант реализации. Зачастую решения разных фирм не совместимы между собой, и каждая компания в обозначении своей продукции указывает различные названия транкинга (например, Cisco EtherChannel trunking, Adaptec's Duralink trunking и т.д.) Именно по этой причине для организации транка рекомендуется использовать одинаковые адаптеры, а при выборе оборудования для сервера следует учитывать наличие возможности работы в этом режиме. Немного ясности внесло принятие в 2000 году стандарта IEEE 802.3ad (802.3ad Link aggregation for parallel links), и сегодня многие решения выпускаются с поддержкой IEEE 802.3ad.

Основные производители серверов (HP, Dell, IBM) часто используют сетевые адаптеры на микросхемах корпорации Broadcom, для которых на офсайте доступны необходимые драйвера и утилиты BACS — Broadcom Advanced Control Suite. Кроме того, информацию о возможности использования LAG для сетевых карт конкретного производителя можно поискать на домашнем сайте.

Для примера приведу описание доступных режимов для карт от Intel. Как видим, заявлена поддержка четырех режимов LAG:
ALB (Adaptive Load Balancing, адаптивная балансировка нагрузки) — не требует поддержки коммутаторами, обеспечивает балансировку трафика с 2-8 карт только при передаче и на разные адреса, прием осуществляет лишь первый адаптер;
RLB (Receive Load Balancing, балансировка входящей нагрузки) — может использоваться с любым коммутатором, но только в сочетании с ALB, скоростные адаптеры участвуют в балансировке входящего трафика TCP/IP, первый адаптер принимает весь остальной входящий трафик;
SLA (Static Link Aggregation, он же Intel Link Aggregation, статическое объединение каналов) — обеспечивает двунаправленное выравнивание нагрузки, но требует наличия совместимых свитчей;
Dynamic 802.3ad — совместим со стандартом 802.3ad, по возможностям похож на предыдущий.

То есть, режим ALB предназначен больше для обеспечения отказоустойчивости, так как возможна балансировка только исходящих соединений. Остальные же режимы поддерживают и балансировку нагрузки как на прием, так и передачу. В картах других производителей режимы LAG могут отличаться по названию, хотя суть, как правило, меняется несущественно.

Кстати, правильно определить интеловскую сетевуху можно, следуя инструкции по ссылке "Identify your Adapter". Для настройки продвинутых параметров сетевого адаптера, в том числе и для работы в транке, Intel предлагает собственную утилиту PROSet. Скачиваем и устанавливаем драйвер обычным образом. Например, для 64-битной версии Win7/2k8R2 нам нужен файл PROWIN7X64.exe, обращаем попутно внимание на список поддерживаемых сетевых карт. Далее вызываем окно свойств одной из сетевух. После установки драйверов здесь появились дополнительные вкладки, где можно тонко настроить работу адаптера. В контексте статьи нас интересует вкладка Teaming, переходим на нее и устанавливаем флажок Team this adapter with other adapter. Чтобы создать группу из нескольких сетевых адаптеров, нажимаем кнопку New Team и, следуя указаниям мастера, вводим название группы, отмечаем сетевые карты, которые будут входить в группу, затем указываем режим работы (смотри выше). По окончании настроек в системе появится еще один адаптер. Особо важные сервера следует подключать к сети с использованием двух транков, через два свитча.

Также не стоит забывать о поддержке Win2k8-протоколов IGMP (Internet Group Management Protocol) и RIPv2 (Routing Information Protocol); поддержка более удачного по сравнению с RIPv2 протокола OSPF (Open Shortest Path First) почему-то была убрана. Протокол IGMP позволяет снизить нагрузку на сеть, доставляя широковещательные пакеты только адресатам, которые явно заявили о своей заинтересованности. Поэтому IGMP часто используют для передачи аудио- и видеоинформации. Протокол динамической маршрутизации RIPv2 более интересен в контексте статьи, так как позволяет обновлять информацию о маршрутах, выбирая оптимальный на данный момент. В случае выхода из строя одного из маршрутизаторов, клиентская система "узнает" об этом и получит новые таблицы. Это актуально и в случае, когда имеется несколько интернетподключений, — отказ одного из них никак не скажется на пользователях, которые смогут, как ни в чем не бывало, выходить через резервный канал. Хотя внешние подключения к VPN-серверам и сервисам в DMZ, наверняка, придется перенастраивать вручную (здесь многое зависит от топологии). Чтобы исключить простои, следует использовать ISA Server 2006/Forefront TMG, либо решения от сторонних производителей, вроде Kerio WinRoute Firewall, UserGate Proxy & Firewall и другие.

Помимо прочего, RIPv2 спасает админа от ручной настройки статической маршрутизации на каждом компьютере (командой "route add"), что особенно выручает в больших, разветвленных сетях. Чтобы установить поддержку динамической маршрутизации, добавь роль Routing and Remote Access (RRAS), выбрав вначале роль "Network Policy and Access Services". Теперь открываем консоль RRAS, которая находится в Administrative Tools, выбираем сервер и в контекстном меню — пункт "Configure and Enable Routing and Remote Access". Запустится визард, на втором шаге которого отмечаем "Custom Configuration" и далее щелкаем LAN Routing. После запуска службы станут доступны настройки для IPv4 и IPv6. Раскрываем список IPv4, переходим в General и в контекстном меню выбираем пункт New Routing Protocol. В появившемся списке щелкаем по RIP Version 2 for Internet Protocol, после чего во вкладке IPv4 появится подпункт RIP. Теперь нужно настроить протокол. Выбираем RIP и в контекстном меню — пункт "New Interface". Мастер предложит выбрать интерфейс, и появится окно с соответствующими настройками.

Настраиваем отказоустойчивый DHCP-сервис

Даже в небольших сетях для раздачи IP-адресов и прочих сетевых настроек клиентам на порядок удобнее использовать DHCP-сервер, чем просто прописывать адреса в настройках каждой системы вручную (и затем бороться с конфликтами). Управление IP-адресами из одного места экономит кучу времени. Проблема в том, что теперь клиенты зависимы от работоспособности DHCP-сервера, и в случае выхода его из строя не смогут получить IP-адрес, соответственно, не смогут воспользоваться ресурсами локальной и глобальной сетей. Возможно несколько вариантов выхода. Самый очевидный — это создание кластера, в этом случае при отказе одного сервера второй возьмет на себя всю нагрузку. Вопрос построения отказоустойчивого кластера для файлового сервера был рассмотрен в статье "Безотказный файлообменник", опубликованной в октябрьском номере Х за 2008 год; многие моменты по настройке пересекаются с созданием кластера для DHCP.

Сервер Win2k8R2 поддерживает протокол DHCP Failover, использование которого позволяет двум серверам синхронизировать данные об аренде адресов между собой, но на DHCP-запросы отвечает только основной сервер. Резервный подключается, когда недоступен первый. Учитывая, что он "знает" все, что выдал основной сервер, переход на резервный полностью прозрачен. Установка роли DHCP-сервера стандартна. Выбираем Add Roles в Server Manager, отмечаем "DHCP Server" в списке ролей. Далее следуют настройки работы сервера. Вводим настройки DNS-сервера (домен и IP-адрес), затем адрес WINS-сервера, если такая служба будет использоваться. На шаге "DHCP Scope" задаем диапазон IP, которым будет рулить наш сервер. Просто нажимаем Add и вводим: произвольное название, начальный и конечный IP, тип (беспроводная, проводная), адрес шлюза и маску сети. По окончании активируем область, установив флажок "Activate this scope". Определяемся, будем ли раздавать адреса IPv6; если нет, переключаем на шаге "IPv6 stateless mode" флажок с Enable на Disable. Проверяем и подтверждаем установки, щелкаем Install. Далее настраиваем Failover Cluster, как описано в статье "Безотказный файлообменник".

Очевидно, такой подход имеет преимущества в больших сетях, где серверы обслуживают большое количество запросов. В небольших компаниях, чтобы организовать резервирование DHCP, часто используют второй, как правило, несильно загруженный сервер, выполняющий другую работу. В этом случае IP-адреса между серверами распределяются по схеме 80/20 (так советует Microsoft и многие источники, хотя это не догма, можно 70/30 или 50/50), то есть основной сервер берет на себя 80% адресов, оставшиеся 20 достаются второму серверу.

Рассмотрим сеть класса "С": сервер DHCP1 берет на себя 192.168.1.1-200, сервер DHCP2 — 192.168.1.201-254. Во избежание конфликтов на обоих серверах настраиваются исключаемые адреса (Excluded Adresses), в которые прописываются IP-адреса, выдаваемые другим сервером. Если основной сервер выйдет из строя, резервный сможет отвечать на запросы клиентов и обслуживать их аренду. При необходимости второй сервер можно легко перестроить на полный диапазон.

Осталось добавить, что при наличии в сети контроллера домена роль DHCP-сервера обычно возлагают именно на него. Хорошей практикой является использование двух контроллеров домена; при выходе из строя одного из них, второй будет выполнять все возложенные задачи (восстановление и резервирование КД описано в статье "Лови момент" июльского номера Х за 2008 год).

Сетевые принтеры

Управление сетевыми принтерами — дело весьма хлопотное: стоит выйти из строя одному, как админы вынуждены будут разбираться с недовольными менеджерами и другими представителями офисной фауны. Часто упростить себе жизнь можно, сгруппировав несколько идентичных принтеров (имеется в виду, что принтеры должны иметь одного производителя, одинаковые модели, одинаковое количество памяти и использовать одинаковые драйвера, — Прим.ред.) в пул. В этом случае клиентские системы отсылают задания на одно логическое устройство печати, а сервер уже самостоятельно перенаправляет их первому доступному физическому принтеру. Такой подход позволит не только повысить доступность, но и равномернее распределить нагрузку на принтеры, увеличить отклик, а значит, и производительность (пулинг не допустит ситуации, когда один принтер простаивает, а второй завален заданиями). Хотя не следует бездумно включать эту опцию, необходимо учитывать и физическое расположение принтеров. Вряд ли пользователи будут в восторге, что нужно бегать по этажам в поисках своих распечаток. Кроме того, весьма нежелательно, чтобы ценные документы попадали на глаза тем лицам, для которых они не предназначены.

Сгруппировать принтеры в пул достаточно просто. Для этого следует перейти во вкладку "Устройства и Принтеры" (Devices and Printers), расположенную в "Панели управления" (Control Center), вызвать окно свойств одного из принтеров, которые будут добавлены в пул, и перейти во вкладку "Ports". Здесь требуется установить флажок "Enable printer pooling" и отметить устройства, которые будут завязаны в пул.

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

Заключение

Как видишь, чтобы построить отказоустойчивую сеть, нужно сделать совсем немного. Большая часть описанных технологий не требует значительных временных или финансовых затрат, все достаточно просто и, можно сказать, обыденно. В обмен ты получишь кучу свободного времени, а также уважение коллег по работе. Удачи!
ИНФО

Настройка NLB в Win2k3 рассмотрена в статье "Непотопляемый сервер", которую ты найдешь в Х за февраль 2008.

Компонент "Server Backup" для архивации использует службу Volume Shadow Copy Service. Подробнее о Server Backup читай в статье "Лови момент!" в Х от июля 2008 года, а о службе VSS — в статье "Движение в тени".
LINKS

Описание Diskpart — support.microsoft.com/kb/300415/ru.

Драйвера и утилиты для карт Intel — www.intel.com/support/network/adapter.

Драйвера и утилиты BACS для карт Broadcom — www.broadcom.com/support/ethernet_nic

Источник