.
Windows Server 2012 поддерживает три основных типа хранилища виртуальной машины: непосредственно подключаемый накопитель (DAS), сеть хранения данных (SAN) — обычно на основе Fibre Channel или iSCSI - и общие файловые папки Server Message Block (SMB) 3.0, размещенные на файловом сервере Windows Server 2012 или любом NAS/SAN с поддержкой SMB 3.0. Динамическая миграция в Windows Server 2012 позволяет переносить данные виртуальной машины, включая файл конфигурации и виртуальные жесткие диски (VHD), между любыми поддерживаемыми хранилищами без простоя виртуальной машины. Из одной папки в другую на том же диске, с одного логического устройства (LUN) на другое в пределах одной и той же сети SAN, с DAS на SAN, с SAN в файловое хранилище SMB – если Hyper-V поддерживает данный тип хранилища, то такой перенос возможен без остановки виртуальной машины. Однако динамическая миграция применима только к виртуализованным хранилищам, поэтому транзитное хранилище, если таковое используется для виртуальной машины, не может быть перенесено. К счастью, новый формат VHDX с поддержкой 64-терабайтных VHD делает применение транзитного хранилища ненужным как в интересах увеличения объема, так и с точки зрения производительности.
Возможность переноса хранилища виртуальной машины в любое время без снижения ее работоспособности важна в двух основных сценариях.
- Организация приобретает новое хранилище (например, SAN) или переходит на новое устройство SMB 3.0, поэтому требуется перенос виртуальных машин в рамках плановых работ по миграции.
- Используемое хранилище больше не имеет свободного пространства, либо не соответствует требованиям по числу операций ввода/вывода в секунду (IOPS), поэтому в срочном порядке требуется перенос виртуальных машин. Как показывает опыт, это наиболее распространенный сценарий.
Как работает динамическая миграция хранилища
Порядок выполнения динамической миграции хранилища Windows Server 2012 прост и обеспечивает оптимальный ход процесса переноса. Вспомним, что речь идет не о переносе виртуальной машины с одного хоста на другой (хотя для этого можно применить динамическую миграцию виртуальной машины без общего хранилища), а лишь о переносе хранилища.
В ходе динамической миграции создается копия VHD. Цикл переноса выглядит следующим образом.
- Динамическая миграция хранилища инициируется из графического интерфейса или с помощью средств PowerShell.
- В целевое расположение копируются VHD, файл Smart Paging, моментальные снимки и файлы конфигурации.
- После запуска процесса копирования все записи, выполняемые на исходном VHD, зеркально отображаются на целевом VHD.
- Когда копия VHD создана, виртуальная машина переходит на использование VHD в целевом расположении. Копия в целевом расположении актуальна, поскольку в ходе ее создания все текущие записи зеркально отображались.
- Из исходного расположения удаляются VHD и файлы конфигурации.
Процессом динамической миграции хранилища руководит служба управления виртуальными машинами (VMMS) в родительском разделе. Однако ответственную часть задачи выполняет рабочий процесс виртуальной машины и поставщик служб виртуализации хранилища в родительском разделе. В ходе переноса создается небуферизованная копия хранилища и дополнительная точка ввода/вывода на целевом объекте для операций зеркального отображения записей во время копирования. Дополнительный ввод/вывод, связанный с операциями зеркального отображения текущих записей, создает пренебрежимо малую нагрузку по сравнению с обслуживанием основной небуферизованной копии файлов. В качестве пути используется любой существующий канал связи с целевым объектом: для SAN – iSCSI или Fibre Channel, а в случае SMB – сетевой адаптер или адаптеры, через которые устанавливается связь с общим файловым хранилищем. В полной мере используются преимущества имеющихся технологий хранилищ, оптимизирующих производительность. Если копирование на/с SMB выполняется в системе, где используются NIC Teaming, SMB Direct или SMB Multichannel, то эти технологии будут применены. В случае SAN с поддержкой Offloaded Data Transfer (ODX) эта технология будет применяться при переносе виртуальной машины как внутри логического устройства (LUN), так и с одного логического устройства на другое, то есть перенос будет выполняться очень быстро и практически без нагрузки на хост.
Сценарий SAN ODX – оптимальный вариант. Для всех прочих ситуаций важно понимать, что означает создание небуферизованной копии для конкретной системы. Небуферизованная копия используется для того, чтобы динамическая миграция хранилища выполнялась без выделения большого объема системной памяти на кэширование данных на узле виртуализации.
Создание копии может дать значительную нагрузку на систему, связанную с операциями ввода/вывода при считывании исходных данных и записи в целевое расположение. Попробуйте создать в своей системе небуферизорванную копию с помощью команды Xcopy с переключателем /J. Создаваемая при этом нагрузка на систему будет аналогична той, которая возникнет при динамической миграции хранилища (повторю, что доля процесса зеркального отображения текущих операций записи в общей нагрузке пренебрежимо мала). Таким образом, в качестве наихудшего сценария следует рассматривать перенос виртуальной машины из одной папки в другую на локальном диске. При этом данные будут считываться и записываться на один и тот же диск, что значительно затормозит его работу, займет много времени и негативно отразится на функционировании всех виртуальных машин, использующих этот диск. Если же исходное и целевое расположения находятся на разных устройствах хранения, то дополнительная нагрузка не столь велика, как при локальном переносе, но и в этом случае ее все же необходимо учитывать.
При переносе виртуальной машины нет никаких специфических особенностей, связанных с Hyper-V, которые бы влияли на операции ввода/вывода, что одинаково справедливо в отношении любой технологии переноса данных (хотя далеко не все технологии обеспечивают те возможности, которые открывает ODX в системах с SAN). В любом случае перенос означает считывание и запись данных. Это не означает, что нужно отказаться от динамической миграции хранилища, но лишь указывает на необходимость продуманного планирования и правильного выбора времени ее выполнения.
Было бы неразумно выполнять перенос в рабочие часы из-за возможного негативного влияния на другие виды рабочей нагрузки. Вероятно, именно поэтому функция динамической оптимизации Dynamic Optimization диспетчера виртуальных машин VMM из состава System Center 2012, выполняющая повторную балансировку виртуальной машины внутри кластера, не предусматривает автоматизированного процесса динамической миграции хранилища. Если в середине рабочего дня обнаруживается большая нагрузка на подсистему хранилища, обусловленная операциями ввода/вывода, то едва ли следует усугублять ситуацию, пытаясь перемещать данные. Наилучшим вариантом будет отслеживание числа вводов/выводов во времени и перенос хранилища виртуальной машины в период «затишья». Эту задачу легко запрограммировать в виде сценария PowerShell или автоматизировать с помощью таких технологий, как Microsoft System Center Orchestrator 2012.
Настройка динамической миграции хранилища
Если на сервере установлена роль Hyper-V, то ничего больше делать не нужно. Специальная настройка для использования динамической миграции не требуется. Динамическая миграция включена по умолчанию (собственно, ее нельзя выключить) и, как уже говорилось, использует любой доступный канал связи между исходным и целевым расположением. Единственное, что можно сделать – указать разрешенное число одновременных динамических миграций в пункте Storage Migrations окна Hyper-V Settings, открываемого из раздела Actions (см. экран 1).
Экран 1. Настройка Storage Migrations |
Этот параметр также можно задать с помощью средств PowerShell:
Set-VMHost -MaximumStorageMigrations
Дополнительная настройка требуется только при использовании хранилища SMB в качестве целевого расположения и при инициировании миграции с удаленного узла из окна диспетчера Hyper-V или с помощью средств PowerShell, то есть если указанные инструменты задействуются не на фактическом узле Hyper-V. Удаленное управление – предпочтительный вариант для Windows Server 2012; все управление следует выполнять с удаленного узла с помощью средств PowerShell, либо с компьютера Windows 8.
Настройка хранилища SMB на использование с Hyper-V предполагает установку специальных разрешений. В частности, администраторам необходимо открыть полный доступ к созданию виртуальной машины на SMB или динамическому переносу SMB под их учетными данными. Как отмечалось в статье «Миграция виртуальных машин без общего хранилища в Windows Server 2012 Hyper-V», опубликованной в Windows IT Pro/RE № 12 за 2012 год, инициирование динамической миграции без общего хранилища с удаленного узла требует настройки ограниченного делегирования Kerberos на каждом сервере Hyper-V. Для службы Microsoft Virtual System Migration Service эта настройка необходима, так как по умолчанию сервер Windows не может передавать текущие учетные данные другому серверу. Такое действие, обычно запрещенное в интересах безопасности, необходимо и приемлемо в данном ограниченном контексте.
- Администратор инициирует динамическую миграцию хранилища с удаленного узла из окна диспетчера Hyper-V или с помощью средств PowerShell. Текущие учетные данные администратора передаются на хост, выполняющий это действие, либо передаются конкретные учетные данные, если используется PowerShell.
- Сервер, обслуживающий динамическую миграцию, должен подключиться к общему файловому хранилищу SMB и создать файлы. Для этого ему необходимы учетные данные администратора. Это действие предполагает передачу учетных данных (или делегирование), запрещенную по умолчанию.
Данный сценарий требует включения на каждом сервере Hyper-V ограниченного делегирования для службы Common Internet File System (CIFS) для доступа к файловым серверам SMB. Для этого нужно:
- Запустить оснастку Active Directory Users and Computers.
- Перейти к серверам Hyper-V, щелкнуть правой кнопкой на одном из них и выбрать Properties.
- Открыть вкладку Delegation.
- Отметить переключатели Trust this computer for delegation to specified services only и Use Kerberos only.
- Нажать Add.
- Нажать Users or Computers, выбрать файловые серверы SMB и щелкнуть OK.
- В списке доступных служб выбрать cifs для каждого сервера и нажать OK (см. экран 2).
Экран 2. Настройка ограниченного делегирования |
Теперь с удаленного узла можно запустить динамическую миграцию хранилища, даже в хранилище SMB.
Выполнение динамической миграции хранилища
Когда среда подготовлена, остается лишь запустить динамическую миграцию хранилища. Это можно сделать из окна диспетчера Hyper-V или с помощью средств PowerShell. Возможны два варианта динамической миграции хранилища. Можно перенести все данные в одно расположение, либо выбрать разные расположения для каждого элемента данных виртуальной машины (файла конфигурации, моментальных снимков, файла Smart Paging, VHD1, VHD2 и т.д.), см. экран 3.
Экран 3. Выбор элементов для переноса |
Запуск из графического интерфейса прост, а в применении PowerShell есть аспект, требующий разъяснения.
Чтобы понять имеющиеся возможности, рассмотрим запуск процесса переноса из диспетчера Hyper-V.
- Запустите диспетчер Hyper-V.
- Для виртуальной машины, чье хранилище требуется перенести, выберите действие Move.
- Нажмите Next для перехода на страницу Before You Begin.
- Отметьте переключатель Move the virtual machine's storage (переносится только хранилище).
- Теперь можно указать перенос всех данных в одно расположение (по умолчанию), перенос в разные расположения или перенос только VHD. Выберите нужный вариант и нажмите Next.
- Если выбран вариант по умолчанию (перенос всех данных в одно расположение), то появляется запрос с требованием указать новое расположение; укажите его и нажмите Next. Если выбран один из двух других вариантов, то открывается отдельная страница, где следует указать целевое расположение для каждого элемента данных виртуальной машины и нажать Next.
- Проверьте сделанные установки и нажмите Finish для запуска динамической миграции хранилища.
Запустить процесс динамической миграции хранилища можно еще с помощью команды PowerShel Move-VMStorage. При переносе всех данных в одно место достаточно указать имя виртуальной машины и новое целевое расположение с помощью параметра DestinationStoragePath. Вложенная папка с именем виртуальной машины не создается автоматически. Чтобы поместить виртуальную машину в собственную вложенную папку, укажите это в составе пути к целевому расположению. Пример:
Move-VMStorage -DestinationStoragePath -VMName
При переносе данных в разные места процесс усложняется. Вместо DestinationStoragePath используются параметры SmartPagingFilePath, SnapshotFilePath и VirtualMachinePath для указания целевого расположения файла Smart Paging, моментальных снимков и файла конфигурации. Для VHD применяется параметр Vhds. Однако виртуальная машина может иметь несколько VHD, а PowerShell плохо воспринимает произвольное число параметров. Поэтому для каждого VHD нужно создать хэш-значение для SourceFilePath и DestinationFilePath, построить из них массив и передать его параметру Vhds.
Приведенный ниже пример иллюстрирует перенос трех VHD, файла Smart Paging, файла конфигурации и моментальных снимков. Заметим, что нет необходимости переносить все элементы данных виртуальной машины; нужно лишь указать то, что требуется перенести. Неуказанные элементы остаются в текущем расположении. В данном примере хэш-значения (пары значений) заключены в фигурные скобки { }, а для массива используются круглые скобки ( ).
Move-VMStorage -VMName -SmartPagingFilePath d -SnapshotFilePath -VirtualMachinePath -Vhds @(@{ «SourceFilePath» = «C:vmvhd1.vhdx»; «DestinationFilePath» = «D:VHDsvhd1.vhdx»}, @{ «SourceFilePath» = «C:vmvhd2.vhdx»; «DestinationFilePath» = «E:VHDsvhd2..vhdx»}, @{ «SourceFilePath» = «C:vmvhd3.vhdx»; «DestinationFilePath» = «F:VHDsvhd3.vhdx»})
Запущенная динамическая миграция хранилища выполняется до завершения вне зависимости от того, сколько времени это может занять. Администратор может отменить динамическую миграцию хранилища вручную с помощью действия Cancel move storage. Перезагрузка хоста Hyper-V также отменяет все динамические миграции хранилища. Информацию о ходе процесса переноса можно видеть в окне диспетчера Hyper-V, либо запросить через инструментарий управления WMI:
PS C: > Get-WmiObject -Namespace rootvirtualizationv2 -Class Msvm_MigrationJob | ft Name, JobStatus, PercentComplete, VirtualSystemName Name JobStatus PercentComplete VirtualSystemName — --------- — ----------------- Moving Storage Job is running 14 6A7C0DEF-9805-4242-92F9-98E6F...
Отнеситесь к миграции ответственно
При условии правильного использования, динамическая миграция хранилища – отличная новая возможность Hyper-V, повышающая гибкость при вводе в действие новых хранилищ без негативного влияния на доступность служб. Эту функцию можно также использовать для повторной балансировки подсистем хранения при неравномерной нагрузке, однако обязательно спланируйте миграцию так, чтобы влияние на операции ввода/вывода было минимальным.