понедельник, 29 августа 2011 г.

Переполнение базы VMware vCenter из-за vSphere Management Assistant

Недавно мы столкнулись с проблемой черезмерного роста базы VMware vCenter Server.

Все началось с того, что один из серверов ESXi в нашей тестовой лаборатории упал в 'пурпурный экран смерти'.

По коду ошибки удалось определить и устранить проблему, однако, после перезагрузки никаких журналов событий на сервере ESXi не сохранилось. Было решено вести централизованный сбор журналов с помощью vSphere Management Assistant. Сказано - сделано, несколько команд в консоли (решили заодно собирать журналы с сервера vCenter), проверка, что журналы в vMA обновляются, и о проблеме забыли. Пока через несколько дней внезапно не отключился vCenter Server.

Журнал приложений в Windows показал, что база vCenter заняла максимально возможные 10 Гб (в качестве СУБД мы используем Microsoft SQL Server 2008 R2 Express Edition), что, собственно, и послужило причиной остановки vCenter.

С помощью сценария мы быстро определили размер всех таблиц в базе.
SET NOCOUNT ON

DBCC UPDATEUSAGE(0)

-- DB size.
EXEC sp_spaceused

-- Table row counts and sizes.
CREATE TABLE #t
(
[name] NVARCHAR(128),
[rows] CHAR(11),
reserved VARCHAR(18),
data VARCHAR(18),
index_size VARCHAR(18),
unused VARCHAR(18)
)

INSERT #t EXEC sp_msForEachTable 'EXEC sp_spaceused ''?'''

SELECT *
FROM #t

-- # of rows.
SELECT SUM(CAST([rows] AS int)) AS [rows]
FROM #t

DROP TABLE #t
Самыми большими оказали таблицы VPX_EVENT и VPX_EVENT_ARG - вместе с индексами они занимали более 9.5 Гб. С кем не бывает - подумали мы, хотя и усомнились, т.к. наша тестовая лаборатория не такая большая, чтобы в журналах сохранялось так много событий.

Для очистки таблиц мы использовали сценарий с сайта VMware:
TRUNCATE table VPX_EVENT_ARG
DELETE FROM VPX_EVENT 
Если вы планируете последовать нашему примеру - приготовьтесь к тому, что выполнение сценария потребует много времени и приведет к существенному увеличению размера журналов базы (в конце статьи приведен альтернативный сценарий). Поскольку в качестве Recovery Model установлен режим Simple, то после завершения операции мы сделали Shrink Database, и база уменьшилась до 350 Мб.

Однако, через некоторое время после включения служб vCenter база снова стала расти гигантскими темпами. Для определения причины проблемы заглянули vCenter Server log и обнаружили огромное количество записей о подключении vSphere Management Assistant к серверу vCenter.

Для проверки мы выключили на время виртуальную машину с vMA, и база перестала расти. Поскольку сам vMA был установлен достаточно давно, то стало понятно, что проблема возникла из-за недавних манипуляций с vilogger. Отключение сбора журналов с сервера vCenter позволило решить проблему.

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

P.S. в VMware vSphere Management Assistant 5.0 этой проблемы нет, т.к. из него убрали vilogger.

четверг, 4 августа 2011 г.

VCAP-DCA +1

Наконец-то, я сумел поставить долгожданную точку в изучении VMware vSphere 4 и закрепить полученные знания сдачей сертификационного экзамена VMware Certified Advanced Professional vSphere4 Datacenter Administration. Итоговый результат составил 325 баллов из 500 возможных, что меньше, чем хотелось бы, но больше, чем требуется для успешной сдачи.

Как должно быть многим из вас известно, данный экзамен представляет собой одну большую лабораторную работу, состоящую из порядка 40 вопросов/заданий (мне попалось 35). Никаких вопросов по теории, никаких вариантов ответов на выбор, все требуется делать вживую на небольшой инфраструктуре, включающей два сервера ESX/ESXi, сервер управления vCenter и десяток виртуальных машин. Одно неосторожное движение во вкладке Networking и лабораторная работа может внезапно окончиться плачевно, о чем, собственно, экзаменационная система настойчиво предупреждает в самом начале.

Стоит отметить, что экзамен достаточно сильно потрепал мои нервы, особенно в первые 20 минут, за которые удалось решить только два задания, однако потом, когда удалось освоиться с интерфейсом, и стали попадаться вопросы попроще, работа в буквальном смысле закипела.

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

Самое важное на экзамене - правильно спланировать свое время. Это при сдаче обычных тестов четыре часа кажутся прорвой времени, в лабораторной каждая минута на счету. Я послушался совета зарубежных коллег и не стал долго разбираться с проблемными вопросами, коих оказалось штук 8, а старался побыстрее дойти до последнего. Кроме того, помог тот факт, что задания практически не связаны друг с другом, и некоторые вещи можно делать параллельно, пока система что-нибудь установит или настроит. Единственным заданием, которое я просто не смог пропустить из-за принципа, было написание скрипта. В итоге оставшихся тридцати минут до конца хватило, чтобы добить еще 2-3 отложенных вопроса.

Кстати, в решении нескольких вопросов очень помогли руководства по продуктам, доступные во время экзамена.

В целом, вся тестовая система работала достаточно стабильно и быстро, однако, попалось несколько вещей, которые откровенно не понравились. Во-первых, весьма скромного размера удаленный рабочий стол (1024x768). Работать было не очень комфортно после привычных больших мониторов на работе и дома. Во-вторых, постоянно приходилось переключаться между окном с рабочим столом и окном с заданиями. Особенно это надоедало в заданиях, где требовалось задать конкретные настройки в системе, названия компонентов и т.п. В-третьих, вместо стандартной панели задач присутствовало маленькое окно с ярлыками, запускающими основные приложение (клиент vSphere, клиент RDP, Putty и Adobe Reader), и надписью с просьбой ничего не закрывать. Я не стал нарочно проверять, что будет, если, все-таки, проигнорировать это сообщение, однако пару раз ловил себя на мысли, что хочется закрыть лишние окна. И, да, для тех, кто не в курсе о hotkey на переключение между окнами (Alt + Tab), выучите - пригодится. :-)

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

Настольными книгами для меня стали задачник VCAP-DCA Exam Blueprint Guide и решебник VCAP-DCA Study Guide, содержащие детально описание тем, с которыми придется столкнуться на экзамене.

четверг, 21 июля 2011 г.

Администратор в Windows 7 и Customization Specification

По умолчанию, в операционных системах Windows Vista и Windows 7 для большей безопасности встроенная локальная учетная запись администратора отключена (disabled). Кроме того, учетная запись администратора отключается при отработке утилиты sysprep (например, при разворачивании и настройке виртуальной машины из шаблона с помощью Customization Specification).

Чтобы обойти это ограничение, создайте в виртуальной машине Windows 7 в папке "%WINDIR%\Setup\Scripts\" файл setupcomplete.cmd и добавьте в него следующую команду:

net user Administrator /active:yes

Для русской версии, соответственно, будет "Администратор".

Теперь при отработке sysprep будет автоматически выполнен скрипт, который включит учетную запись администратора.

пятница, 8 июля 2011 г.

Загрузка и установка VMware ESXi по сети

Вариант загрузки и установки ESXi по сети может пригодиться, если вам требуется в короткие сроки развернуть большое количество однотипных серверов, не оснащенных CD приводами (например, блейд-серверы), а также автоматизировать однотипные действия, вроде принятия лицензионного соглашения или установки пароля администратора. При наличии уже развернутого vCenter Server можно воспользоваться VMware PXE Manager for vCenter, однако, если его нет - придется делать все самим.

Процесс загрузки и установки сервера по сети включает в себя следующие этапы:
  1. При запуске сервера, управление передается загрузчику в сетевом адаптере (PXE - Preboot eXecution Environment).
  2. PXE посылает широковещательный запрос DHCP серверам сети с целью получения сетевых настроек.
  3. Помимо IP адреса и маски подсети, DHCP сервер отправляет дополнительные параметры - адрес TFTP сервера и путь к файлу загрузчика, который следует запустить.
  4. Загрузчик (в нашем случае pxelinux) в соответствии с настройками, заданными в конфигурационном файле (default), загружает ядро, также используя протокол TFTP.
  5. Наконец, ядро запускает процесс автоматической установки ESXi с параметрами из kickstart файла, который может располагаться, например, на FTP или HTTP сервере.
В качестве примера рассмотрим процесс подготовки сервера Windows Server 2008 R2 для развертывания с его помощью VMware ESXi 4.1 Update 1.

Подготовка дистрибутива
Загрузите последнюю версию Syslinux с сайта (на момент написания - syslinux-4.04.zip).

Скопируйте содержимое дистрибутива VMware ESXi 4.1 Update 1 в папку на сервере (например, 'C:\FTPRoot'). В эту же папку скопируйте три файла из архива Syslinux: pxelinux.0 (расположен в ".\core\"), mboot.c32 (расположен в ".\com32\mboot\") и menu.c32.(расположен в ".\com32\menu\") Подтвердите замену файлов.

Создайте папку и назовите ее pxelinux.cfg, скопируйте в нее файл isolinux.cfg из дистрибутива ESXi и переименуйте его в default (без расширения).

Настройка сервера
Для загрузки по сети нам понадобятся следующие службы:
  • TFTP;
  • DHCP;
  • DNS;
  • FTP.
Необязательно размещать все службы на одном сервере, однако, в тестовых целях вполне можно и совместить их.

В качестве TFTP сервера вы можете использовать встроенную службу Windows Deployment Services. Пример настройки TFTP сервера приведен в данной статье. В качестве альтернативного TFTP сервера можно использовать TFTPD. TFTPD проще в установке, а также может выступать в роли DHCP сервера.

При настройке TFTP сервера в качестве корневой укажите ранее созданную папку, в которую был скопирован дистрибутив ESXi.

Если требуется - установите DHCP сервер. Создайте резервацию для MAC адреса адаптера будущего ESXi сервера, с которого будет осуществляться загрузка по сети. Использование резервации вместо задания параметров на уровне всего диапазона адресов или сервера DHCP является хорошей идеей, дабы ненароком не запустить установку ESXi на других компьютерах, настроенных на загрузку по сети.

Обязательно задайте следующие DHCP опции.
  • 060 PXE Client - в качестве значения укажите: PXE Client.
  • 066 Boot Server Host Name - в качестве значения укажите IP адрес или DNS имя TFTP сервера.
  • 067 Bootfile Name - в качестве значения укажите: pxelinux.0.

В качестве примера по настройке опций DHCP можете ознакомиться с этой статьей.

DNS сервер может понадобиться, если вы планируете указывать DNS имена серверов вместо IP адресов в параметрах DHCP и в конфигурационных файлах.

Установите FTP сервер, используя мастер Add Roles Wizard.

Откройте консоль управления IIS и создайте новый FTP сайт.

На вкладке Site Information задайте произвольное имя (FTP site name), а в качестве корневой директории FTP сайта (Physical path) укажите ранее созданную папку с дистрибутивом (например, "C:\FTPRoot"). Нажмите Next.

На вкладке Binding and SSL Settings отключите требование использования SSL при подключении (No SSL). Нажмите Next.

На вкладке Authentication and Authorization Information разрешите анонимным пользователям аутентифицироваться на сайте, включив Authentication | Anonymous, а также загружать файлы Allow access to: Anonymous users и Permissions | Read. Нажмите Finish для завершения мастера и создания сайта.

Редактирование kickstart файла
При редактировании текстовых файлов из Windows обратите внимание на следующие особенности.

В Windows и в ESXi используются разные форматы перевода строк. Из-за этого файл, сохраненный в Windows, в ESXi будет отображаться вот так:

Это может стать причиной разнообразных ошибок при выполнении скриптов из kickstart файла. Для решения данной проблемы вы можете:
  1. Использовать для загрузки kickstart файла протокол FTP.
  2. Использовать сторонний текстовый редактор, который позволяет настраивать формат переносов (например, Notepad++).
В текстовом редакторе создайте файл ks.cfg следующего содержания:
vmaccepteula
rootpw P@ssw0rd
autopart --firstdisk=local
install url ftp://<SERVERNAME>
network --bootproto=dhcp --device=vmnic0 --vlanid=0 --addvmportgroup=0
reboot
где <SERVERNAME> соответствует имени или IP адресу FTP сервера, на котором расположен дистрибутив.

Подробнее о параметрах в файле ks.cfg можно прочитать в руководстве по установке ESXi.

Сохраните файл в корневую папку FTP сервера.

Отредактируйте файл default в папке pxelinux.cfg, добавив в него параметр, указывающий на расположение kickstart файла, например так:
default menu.c32

menu title VMware VMvisor Boot Menu

timeout 80
label ESXi Installer
menu label ^ESXi Installer
kernel mboot.c32
append vmkboot.gz ks=ftp://<SERVERNAME>/ks.cfg --- vmkernel.gz --- sys.vgz --- cim.vgz --- ienviron.vgz --- install.vgz
labelBoot from local disk
menu label ^Boot from local disk
localboot 0x80
Где <SERVERNAME> соответствует IP адресу или DNS имени вашего FTP сервера, на котором располагается kickstart файл.

Обратите внимание, что параметр ks= следует указывать сразу за vmkboot.gz, в противном случае, вы можете получить сообщение об ошибке.

Проверка работы
Для проверки работоспособности решения, достаточно запустить целевой сервер в качестве загрузочного устройства выбрать сетевой адаптер. Если все было сделано правильно, то через некоторое время вы увидите привычное окно установщика ESXi, а буквально через пару минут, и сам установленный ESXi.

понедельник, 4 июля 2011 г.

VMware vExpert 2011

Пускай и с небольшим опозданием, но тоже спешу похвалиться получением в этом году статуса VMware vExpert.

Хочу выразить благодарность людям, которые номинировали меня - без Вас я бы даже не почесался, своим коллегам-блоггерам по цеху, и, конечно, уважаемым читателям. Спасибо!

P.S. Надеюсь и дальше продолжать радовать Вас новыми постами.

вторник, 28 июня 2011 г.

Механизм настройки прав в VMware vCenter

Небольшая заметка о том, каким образом VMware vCenter Server хранит разрешения на управление виртуальной инфраструктурой.

Все разрешения хранятся в виде записей в таблице dbo.VPX_ACCESS в базе Microsoft SQL Server'а.

Всего в таблице пять столбцов:
ID - уникальный идентификатор.
PRINCIPAL - имя учетной записи пользователя или группы для которых назначаются права. Задаются в формате <ИМЯ_ЗАПИСИ> или <ДОМЕН\ИМЯ_ЗАПИСИ>.
ROLE_ID - идентификатор роли, содержащий необходимые права.
ENTITY_ID - идентификатор объекта, на который назначаются разрешения.
FLAG - переключатель хранит информацию о наследовании и типе учетной записи (пользователь, группа). Может принимать одно из четырех значений:
  • 0 - учетная запись - пользователь, права не наследуются (no propagate);
  • 1 - учетная запись - пользователь, права наследуются (propagate);
  • 2 - учетная запись - группа, права не наследуются (no propagate);
  • 3 - учетная запись - группа, права наследуются (propagate).
Для каждой роли при создании задается свой уникальный ROLE_ID. В vCenter все роли подразделяются на два типа: системные (System roles) и пользовательские (User roles).

Системные роли существуют в vCenter изначально и не могут быть изменены или удалены. К системным относятся следующие роли:
Administrator - идентификатор роли (ROLE_ID): -1;
Read Only - идентификатор роли: -2;
No Access - идентификатор роли: -5.

Пользовательские роли могут быть созданы, отредактированы и удалены администратором vCenter. В vCenter после установки также присутствует несколько предустановленных (sample) пользовательских ролей:
Virtual machine power user (sample) - идентификатор роли (ROLE_ID): 4;
Virtual machine user (sample) - идентификатор роли: 5;
Resource pool administrator (sample) - идентификатор роли: 6;
VMware Consolidated Backup user (sample) - идентификатор роли: 7;
Datastore consumer (sample) - идентификатор роли: 8;
Network consumer (sample) - идентификатор роли: 9.

Все пользовательские роли хранятся в каталоге "DC=virtualcenter,DC=vmware,DC=int".
Для определения нужного ROLE_ID достаточно подключиться к каталогу (например, с помощью утилиты ADSIEdit) и в подразделении UserRoles найти требуемую группу.

Наконец, значения ENTITY_ID для всех объектов виртуальной инфраструктуры хранятся в таблице dbo.VPX_ENTITY, поле ID.

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

понедельник, 16 мая 2011 г.

Выдача SSL сертификата для vShield Manager

Недавно у меня появилась необходимость заменить самоподписанный сертификат для VMware vShield Manager на заверенный нашим УЦ, однако в процессе выполнения данной операции пришлось столкнуться с небольшой проблемой, о которой и хотелось бы рассказать.

Сама процедура крайне проста, первоначально требуется создать .CSR запрос из интерфейса vShield Manager, заполнив необходимые поля, после чего на его основе выпустить с помощью УЦ сертификат и импортировать его в vShield Manager.

Поскольку все клиенты vSphere Client подключаются к vShield Manager'у по IP-адресу, то при создании запроса в поле Common Name следует указывать IP-адрес. В руководстве vShield Administration Guide дословно написано так:

Enter the name that matches the site name. For example, if the IP address of vShield
Manager management interface is 192.168.1.10, enter 192.168.1.10.
Проблема заключается в том, что при использовании IP-адреса в качестве Common Name, vShield Manager выводит предупреждение "Please enter correct domain name as common name".

Более того - не получится задать hostname (NetBIOS) имя сервера, или DNS имя с доменами первого уровня вроде .local или .internal.

Усугубить ситуацию может попытка разобраться в происходящем в 2 часа ночи.

Если заглянуть в исходный код страницы, то можно обнаружить следующее. За проверку Common Name отвечает javascripts функция checkDomain(), в которой жестко прописаны, какие домены первого уровня допустимо использовать в имени сервера. Соответственно, написать IP-адрес никак не получится.

Конечно, можно выписать сертификат на одно из допустимых DNS имен (надеюсь, у вас сервер не в зоне .рф находится?), а при первом подключении добавить сертификат в доверенные, но можно применить небольшой workaround.

Откройте страницу запроса сертификата https:///CertificateSummary.do?operation=showCertSummary и замените код функции checkDomain() на:
function checkDomain(nname){
return true;
}
Для этого можно использовать, например, отладчик, встроенный в браузер Opera.

После этого, запрос успешно создастся, и сертификат может быть заверен вашим УЦ.

Еще один момент связан с самой процедурой добавления. Перед тем, как добавлять подписанный сертификат, вам потребуется импортировать корневой и все промежуточные сертификаты УЦ в цепочке, в противном случае вы получите сообщение об ошибке.

После добавления сертификата вам потребуется перезагрузить vShield Manager. Сертификат успешно установлен.