четверг, 9 апреля 2009 г.

Пока гром не грянет…



Yesterday...

All those backups seemed a waste of pay,

Now my database has gone away...

Возможно, кому-то уже доводилось попадать в неприятную ситуацию – когда по какой-то причине выходит из строя RAID-контроллер, или просто массив «рассыпается». Особенно часто это происходит с дешевыми контроллерами, встроенными в материнскую плату. Расскажу небольшую, но поучительную историю, произошедшую со мной на заре моей админской карьеры.

Итак, однажды все же случилось то, что могло представиться только в страшном сне.

Одним прекрасным утром ко мне подходит наш тестировщик и спрашивает: "А что случилось с TFS'ом?". TFS – Team Foundation Server, некое веб-приложение, завязанное с MS Visual Studio, используемое программистами для отслеживания багов, и возможно – еще для чего-то, во всяком случае для меня этот TFS был «черным ящиком».

Сервер, на котором это приложение запускалось представлял из себя обычный системный блок, с внешним SATA RAID-контроллером Adaptec 2410S. На трех SATA-дисках объемом 149Гб был создан массив RAID5, на котором все и было установлено. Батарейки у контроллера, естественно не было. Да, сейчас в меня полетят помидоры, но увы – сервер был поднят еще до меня, на брэндовый (судя по всему) денег не давали, да и я тогда особо не задумывался об этом. А зря.

Итак, я, ничего плохого не подозревая, пингую сервер, на котором был установлен TFS. Не пингуется. Матерясь про себя, я пошел в серверную проверять кабеля - вроде все в порядке, сервер включен, диод "Link" на сетевой карточке горит. Захожу на сервер с KVM'a – и вот оно: «Non-system disk or disk error». С помощью Святой Троицы (Ctrl-Alt-Del) я перезагружаю сервер. Проходит POST, инициализируется RAID-контроллер и вдруг... «Array #0 has missing required members. Found 0 arrays.» Теперь я начинаю материться уже вслух. Нажимаю Ctrl-A, захожу в BIOS контроллера.

Смотрю - а статус массива - FAILED. Два диска из трех показаны серым цветом.

"Так вот ты какая, белая северная лисичка!" - подумал я. Начал думать, что же, собственно, произошло. Контроллер вроде как работает. Диски тоже будто бы видны. Запускаю проверку обоих "проблемных" дисков утилитой в BIOS контроллера. Проверка проходит успешно, "0 errors found". Перезагрузка - опять массив не найден.

Написав заранее заявление об увольнении, я раскручиваю корпус сервера, ставлю его рядом со своим компом, подключаю жесткие диски (благо, они были SATA и я подключил их напрямую к материнке) и загружаюсь.

Винты вроде бы определились. Надо теперь как-то вытащить с них данные, а именно – базы данных, в которых хранились данные TFS. Самая большая проблема заключалась в том, что надо было каким-то образом воссоздать структуру RAID-массива, и при этом не потерять данные.

Блуждая по интернету, наткнулся на прогу Runtime RAID Reconstructor.

В описании было сказана, что она может автоматически определить структуру массива. Качаю, запускаю.

Окно программы выглядит так:


 

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

Затем я нажал "Open Drives" и "Analyze", чтобы проанализировать структуру массива.

В мастере анализа, кстати, нет размера блока 512Кб (который вроде как использовался у меня), но можно добавить Custom Size, что я собственно и сделал. Количество секторов для анализа я оставил дефолтное (10000).

Анализ прошел успешно, структура массива была определена.

После этого она создала Virtual Image File - маленький (меньше 1Кб) файл с расширением *.vim, в котором описывается структура массива.

Эта же программа затем предлагает открыть файл разными утилитами от Runtime - Captain Nemo, GetDataBack, Disk Explorer. Мне нужна была, судя по всему, Captain Nemo: задача была – вынуть данные с дисков. Качаю. Ставлю.

Открываю ей свой vim - и, о, чудо! - увидел полное дерево папок! Нашел нужные файлы баз, сохранил их через Captain Nemo на свой винт и подключил на свежеустановленном TFS'e - и все заработало! Можно сказать, «пронесло». Заявлние об увольнении отправилось в шредер.

Теперь - подведем итоги.

В качестве сервера использовался обычный системник.

Система вместе с БД лежали на одном 3-дисковом массиве RAID5, на одном разделе.

Массив был построен на 3 SATA винтах, с использованием контроллера Adaptec 2410SA.

Причины сбоя так и не удалось установить. По моим подозрениям, причиной стал сбой по питанию. RAID-контроллер не снабжен BBU (батарейкой резервного питания) и, по-видимому, во время записи на диск произошел сбой питания, в результате чего потерялась некая информация о структуре массива, и контроллер стал считать 2 жестких диска сбойными.

Мораль сей басни такова: Нельзя целиком доверять RAID'у! Особенно - сделанному на дешевом железе.

Надеюсь, сей опус поможет кому-нибудь, кто попадет в подобную ситуацию. Но все же еще больше я надеюсь, что она поможет не попадать в нее. На этой оптимистичной ноте я, пожалуй, закончу.

четверг, 2 апреля 2009 г.

Виртуализация пользовательской среды - доступно в новой версии MDOP!

Сегодня, 2 апреля, команда разработчиков решений виртуализации Microsoft объявила в своем официальном блоге, что средства виртуализации пользовательской среды для предприятий (Microsoft Enterprise Desktop Virtualization, сокращенно - MED-V) вошли в новую версию пакета Microsoft Desktop Optimization Pack (MDOP), доступный по символической цене для подписчиков Software Assurance.

MED-V помогает создавать виртуальные пользовательские среды и полностью управлять ими. Так же он позволяет предприятиям переходить на новые версии клиентской ОС, даже если не все приложения полностью с ней совместимы. MED-V создан на базе Microsoft VirtualPC, позволяя запускать две ОС на одном физическом компьютере, при этом добавлены расширенные функции работы с виртуальными образами и централизованного управления на основе политик.

Надо так же отметить, что в новой версии MDOP содержится так же обновленный пакет для виртуализации приложений App-V 4.5, поддерживающий Windows 7 beta.


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

Эксперимент: Виртуализация и виртуальные жесткие диски

Довольно часто, в системе "слабым местом" оказывается дисковая подсистема, что вполне понятно: ведь быстродействие жесткого диска всегда намного меньше, чем оперативной памяти или процессора. При виртуализации же, когда несколько виртуальных машин используют один и тот же жесткий диск (или массив) - вопрос быстродействия встает особенно остро.

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

Рассмотрим работу с жесткими дисками в среде Hyper-V.

1. VHD-файлы

Наиболее известный способ, выбираемый по дефолту: использование в качестве дисков для виртуальной машины - файлов *.vhd (Virtual Hard Disk). Этот способ имеет три преимущества:

  • VHD-файлы могут храниться где угодно и могут быть легко перемещены;
  • Удобство создания резервных копий: копирование одного большого файла - намного легче и быстрее, чем копирование всего содержимого жесткого диска (VHD-файл может быть легко скопирован средствами VSS, без остановки самой виртуальной машины, а в случае бэкапа содержимого физического диска - может потребоваться перезагрузка как минимум гостевой ОС);
  • Рациональное использование дискового пространства: на одном физическом диске может храниться множество VHD-файлов, и каждой виртуальной машине можно отвести ровно столько дискового пространства, сколько ей необходимо

Минус - один: меньшее быстродействие по сравнению с прямой работой с диском. Далее будет показано наглядно.

2. Прямое обращение к физическому диску

Hyper-V, помимо использования VHD-файлов - предоставляет возможность использования виртуальной машиной физических дисков. Плюс тут один: более высокое быстродействие в сравнении с VHD-файлами. Минусов же больше: 

  • Немного сложнее создавать резервные копии и переносить информацию в другое место;
  • Менее рациональное использование дискового пространства (весь объем диска используется одной виртуальной машиной, не может регулироваться динамически и распределяться между несколькими виртуалками);

Ну а теперь - перейдем от теории к практике.

Эксперимент.

В качестве экспериментального стенда использовался сервер HP ML150G5, снабженный четырёхъядерным процессором Intel® Xeon® E5420 2,5 ГГц и 4Гб оперативной памяти. Дисковая подсистема представлена двумя дисками объемом 72Гб с интерфейсом SAS, объединенными в массив RAID1 и двумя SATA-дисками объемом 250Гб, так же объединенными в RAID1. На сервере установлена ОС Microsoft Windows Server 2008 Std. 64bit с поддержкой Hyper-V. Других задач, помимо виртуализации у него нет. Далее - все эксперименты, о которых я буду писать в этом блоге - будут проводиться именно на этом сервере.

Для чистоты эксперимента все действующие ВМ были остановлены, и создана новая ВМ с 512Мб ОЗУ и двумя жесткими дисками: один - для установки гостевой ОС, другой - для эксперимена. На ВМ была установлена ОС Microsoft Windows Server 2003 32bit, были установлены компоненты интеграции. Для создания нагрузки на диски и измерения параметров быстродействия была использована бесплатная утилита IOMeter. Параметры доступа к диску в IOMeter были заданы следующие:

  • Объем страницы: 64Кб;
  • 75% - случайный доступ, 25% - линейный;
  • 75% - чтение, 25% - запись.

Опыт первый: VHD-файл.

Как я уже писал выше, экспериментальная ВМ имеет два виртуальных жестких диска: на один устанавливается ОС, другой - используется для измерения быстродействия. В первом моем опыте я использовал VHD-файл фиксированного размера 10Гб. Файл размещался на зеркале из двух 250Гб SATA-дисков. Я получил следующие результаты:

  • Total I/O per sec: 111,5
  • Total MB per sec: 6,92
  • Average I/O Response Time: 9,0152 ms
  • Maximum I/O Response Time: 526,0630 ms

Результаты сильно удручают: 7Мбайт в секунду - это очень и очень мало. Для примера, в хостовой ОС, копирование файла с одного массива на другой показывало скорость порядка 37-40Мбайт/c. Правда, это показания самой ОС, которые могут и не соответствовать действительности. Увы, судя по сайту разработчиков - последняя версия IOMeter'а вышла 27 июля 2006 года, так что не удивительно, что под Windows Server 2008 она хоть и запустилась, но корректно не работала: она просто не "видела" жесткие диски. Если кто-нибудь посоветует мне более новую утилиту, аналогичную IOMeter и нормально работающую под Windows Server 2008 - с меня пиво :) 

Время отклика - тоже очень и очень плохое: 9 миллисекунд в среднем, и 526 миллисекунд (просто вдумайтесь в это: больше, чем пол-секунды!) максимум. Вобщем - для, к примеру, веб-сервера вполне бы сгодилось, но устанавливать с таким быстродействием, к примеру, сервер БД какой-нибудь ERP-системы я бы не рискнул.

Опыт второй: прямое обращение к диску.

Теперь я удалил злосчастный VHD-файл и перевел наш 250Гб массив в режим Offline через консоль Computer Management (это - необходимое условие, чтобы Hyper-V "увидела" наш диск и его можно было бы подключить к ВМ). После этого - в свойствах тестовой ВМ вместо VHD-файла был подключен наш физический диск и так же - запущен IOMeter c теми же параметрами. Результаты получились следующие:

  • Total I/O per sec: 126,7
  • Total MB per sec: 7,9
  • Average I/O Response Time: 7,9362 ms
  • Maximum I/O Response Time: 96,1755 ms

Сказать честно - результаты меня удивили. Я не ожидал такой маленькой разницы в iops и в mbps. Чем это вызвано - самому интересно. Вполне возможно, что здесь мы уперлись в потолок быстродействия SATA-дисков. А вот время отклика уже - намного лучше: 8 миллисекунд в среднем и 96 в максимуме, против 9 и 526 соответственно. Как видно, среднее время отклика улучшилось ненамного, возможно, что не улучшилось и вовсе: одна миллисекунда вполне укладывается в погрешность измерения. А вот максимальное время отклика - уменьшилось почти в 60 раз, что не может не радовать.

Вывод.

Из всего этого напрашивается следующий вывод: если планируется виртуализировать какие-либо задачи, требующие активного доступа к дискам - нужно использовать прямой доступ к диску. Во всех же остальных случаях я настоятельно рекомендую использовать, как и обычно, VHD. В случае, если использование прямого доступа необходимо - "соломоновым решением", наверное, будет использование двух виртуальных дисков у одной ВМ: один - в виде VHD - для установки ОС и приложений, а другой - с использованием прямого доступа - для хранения данных.


P.S. У меня имеются подозрения, что на эксперимент сильно повлиял потолок быстродействия SATA-дисков. Недавно у нас в распоряжении оказалась дисковая полка HP MSA2000 с интерфейсом SAS. Завтра - попробую подключить эту полку к серверу, собрать на ней RAID10 и повторить эксперимент. О результатах - обязательно отпишусь. Оставайтесь на канале!

среда, 1 апреля 2009 г.

Это был большой облом...

Как я уже писал, решил я потестить производительность виртуалок с внешней дисковой полкой HP MSA2000. Получил на складе полку, распаковал - а дисков - нет :(

Обидно...