Новости Статьи VMware Veeam StarWind vStack Microsoft Nakivo Citrix Symantec События Релизы Видео Контакты Авторы RSS
Виртуализация и виртуальные машины

Все самое нужное о виртуализации и облаках

Более 6320 заметок о VMware, AWS, Azure, Veeam, Kubernetes и других

VM Guru / Articles / Скрипт конфигурирования автоматического запуска виртуальных машин после миграции VMotion/DRS

Скрипт конфигурирования автоматического запуска виртуальных машин после миграции VMotion/DRS

Скрипт конфигурирования автоматического запуска виртуальных машин после миграции VMotion/DRS

Автор: Андрей Шингирий
Дата: 22/12/2010

Поддержите VM Guru!

USDT / TRC20, адрес: TCDP7d9hBM4dhU2mBt5oX2x5REPtq9QdU1




Статья:

От редакции VM Guru: Данная статья от одного из авторов VM Guru решает проблему доступности виртуальных машин, иногда возникающую у пользователей VMware vSphere при эксплуатации виртуальной инфраструктуры. Благодарим Андрея за предоставленный материал.

Файлы к статье: скрипт easyStartupScript.sh.

Вне зависимости от издания VMware ESXi 4.1 (будь то бесплатная версия, или лицензия Enterprise Plus), доступна функция Configuration=>Software=>Virtual Machine Startup/Shutdown (рис.1), которая позволяет отработать ситуацию с выключением питания на физическом сервере и автоматически запускает виртуальные машины:

Рис.1 Virtual Machine Startup/Shutdown

Существует три режима запуска виртуальных машин:

  • Автоматический запуск (Automatic Startup).
  • Режим запуска по любому приказу (Any Order).
  • Ручной запуск (Manual Startup).

В изданиях VMware vSphere 4, где используется функция ручной миграции работающих виртуальных машин на другой физический сервер – VMotion, или включена служба балансировки нагрузки – DRS, после миграции виртуальной машины на другой физический сервер происходит сброс настройки автоматического запуска (Automatic Startup) этой виртуальной машины в режим запуска по любому приказу (Any Order).

В случае если поднят кластер VMware HA и по какой-либо причине физический сервер, на котором работает виртуальная машина с режимом запуска Any Order, выключается, то данная виртуальная машина согласно политикам VMware HA перезапускается на другом физическом сервере. Но существует случай, когда питание в ЦОД пропало вообще и времени работы бесперебойных блоков питания не хватает, чтобы дождаться подачи на них напряжения, т.е. все физические сервера в кластере выключаются. И вот в данной ситуации после возобновления и загрузки физических серверов, виртуальная машина, настройки запуска которой изменились при миграции с Automatic Startup на Any Order, автоматически не запустится.

Отказываться от таких возможностей как VMotion и DRS не хочется по следующим причинам: 1) удобно и полезно; 2) за этот функционал заплачено дополнительно приличная сумма денег. Отслеживать каждую миграцию и руками заново выставлять настройки автозапуска виртуальных машин занятие бестолковое, это время можно потратить более продуктивно. Каким образом совместить миграции виртуальных машин с их корректным автозапуском?  Рассмотрим подробнее процессы, которые происходят внутри гипервизора VMware ESXi при миграции виртуальной машины, настроенной на Automatic Startup.

Настройки автозапуска виртуальных машин, которые мы устанавливаем посредством VMware vSphere Client (рис.1), сохраняются в файле:

/etc/vmware/hostd/vmAutoStart.xml

Во время старта системы ESXi вызывается скрипт /sbin/vmware-autostart.sh, который запускает виртуальные машины определенные в конфигурационном файле vmAutoStart.xml. Приведем листинг vmAutoStart.xml, соответствующего настройке, показанной на рисунке 1:

<ConfigRoot>
  <AutoStartOrder>
    <_length>6</_length>
    <_type>vim.host.AutoStartManager.AutoPowerInfo[]</_type>
    <e id="0">
      <_type>vim.host.AutoStartManager.AutoPowerInfo</_type>
      <key>
        <_type>vim.VirtualMachine</_type>
        <moid>896</moid>
      </key>
      <startAction>PowerOn</startAction>
      <startDelay>-1</startDelay>
      <startOrder>1</startOrder>
      <stopAction>SystemDefault</stopAction>
      <stopDelay>-1</stopDelay>
      <waitForHeartbeat>systemDefault</waitForHeartbeat>
    </e>
    <e id="1">
      <_type>vim.host.AutoStartManager.AutoPowerInfo</_type>
      <key>
        <_type>vim.VirtualMachine</_type>
        <moid>1008</moid>
      </key>
      <startAction>PowerOn</startAction>
      <startDelay>-1</startDelay>
      <startOrder>2</startOrder>
      <stopAction>SystemDefault</stopAction>
      <stopDelay>-1</stopDelay>
      <waitForHeartbeat>systemDefault</waitForHeartbeat>
    </e>
    <e id="2">
      <_type>vim.host.AutoStartManager.AutoPowerInfo</_type>
      <key>
        <_type>vim.VirtualMachine</_type>
        <moid>1280</moid>
      </key>
      <startAction>PowerOn</startAction>
      <startDelay>-1</startDelay>
      <startOrder>3</startOrder>
      <stopAction>SystemDefault</stopAction>
      <stopDelay>-1</stopDelay>
      <waitForHeartbeat>systemDefault</waitForHeartbeat>
    </e>
    <e id="3">
      <_type>vim.host.AutoStartManager.AutoPowerInfo</_type>
      <key>
        <_type>vim.VirtualMachine</_type>
        <moid>1312</moid>
      </key>
      <startAction>PowerOn</startAction>
      <startDelay>-1</startDelay>
      <startOrder>4</startOrder>
      <stopAction>SystemDefault</stopAction>
      <stopDelay>-1</stopDelay>
      <waitForHeartbeat>systemDefault</waitForHeartbeat>
    </e>
    <e id="4">
      <_type>vim.host.AutoStartManager.AutoPowerInfo</_type>
      <key>
        <_type>vim.VirtualMachine</_type>
        <moid>1344</moid>
      </key>
      <startAction>PowerOn</startAction>
      <startDelay>-1</startDelay>
      <startOrder>5</startOrder>
      <stopAction>SystemDefault</stopAction>
      <stopDelay>-1</stopDelay>
      <waitForHeartbeat>systemDefault</waitForHeartbeat>
    </e>
    <e id="5">
      <_type>vim.host.AutoStartManager.AutoPowerInfo</_type>
      <key>
        <_type>vim.VirtualMachine</_type>
        <moid>1360</moid>
      </key>
      <startAction>PowerOn</startAction>
      <startDelay>-1</startDelay>
      <startOrder>-1</startOrder>
      <stopAction>SystemDefault</stopAction>
      <stopDelay>-1</stopDelay>
      <waitForHeartbeat>systemDefault</waitForHeartbeat>
    </e>
  </AutoStartOrder>
  <SystemDefaults>
    <_type>vim.host.AutoStartManager.SystemDefaults</_type>
    <enabled>true</enabled>
    <startDelay>120</startDelay>
    <stopAction>PowerOff</stopAction>
    <stopDelay>120</stopDelay>
    <waitForHeartbeat>false</waitForHeartbeat>
  </SystemDefaults>
</ConfigRoot>

Разберем этот файл. В нем 6 виртуальных машин для запуска (id0-5), следовательно, виртуальные машины с типом запуска Manual Startup здесь не определенны. Каждая виртуальная машина определенна по номеру id, который она получат, когда регистрируется на хосте  ESXi, он находится между тегов  <moid>1360</moid>. Соответствие этого id к имени виртуальной машины можно получить командой:

vim-cmd vmsvc/getallvms

Виртуальные машины запускаются по очереди. Эта очередь определяется тегом <startOrder>5</startOrder>. Виртуальные машины, которые запускаются в режиме Any Order имеют следующий тег <startOrder>-1</startOrder>.

Способ №1: Как делать не надо:)

Задачу можно свести к редактированию файла /etc/vmware/hostd/vmAutoStart.xml, в котором нужно найти и изменить все теги <startOrder>-1</startOrder>, заменяя их на <startOrder>номер очереди автостарта</startOrder>. После чего необходимо перезапустить сервисную консоль, чтобы редактирование этого файла вступило в силу, следующей командой:

/etc/init.d/hostd restart


Автоматизирует эти действия следующий скрипт:

#!/bin/ash
VMn=`grep -c '<startOrder>-1' /etc/vmware/hostd/vmAutoStart.xml`
if [ "$VMn" -ne "0" ]
then
                VM=`grep -c '<startOrder>' /etc/vmware/hostd/vmAutoStart.xml`
                N=`expr $VM - $VMn`
                grep -n "startOrder>-1" /etc/vmware/hostd/vmAutoStart.xml|cut -d' ' -f1|sed 's/://g'|\
                               while read s
                               do
                                               pat=' '
                                               N=`expr $N + 1`
                                               pat="startOrder>"$N
                                               sed -i "$s s/startOrder>-1/$pat/" /etc/vmware/hostd/vmAutoStart.xml
                               done
                /etc/init.d/hostd restart
fi

Скрипт со своей задачей справляется полностью. Но во время выполнения команды /etc/init.d/hostd restart, которая является частью команды перезапуска сервисной консоли (/sbin/service.sh restart), на короткое время теряется связь с vCenter, чего достаточно для прерывания любой операции над хостом. Поэтому данный способ оказался непригоден для использования в Production-среде.

Способ №2:

Среди набора команд vim-cmd существует следующая ветка:

vim-cmd hostsvc/autostartmanager

которая позволяет управлять конфигурацией менеджера автозапуска виртуальных машин. Среди команд этой ветки интересна следующая:

vim-cmd hostsvc/autostartmanager/update_autostartentry

имеет следующий синтаксис:

update_autostartentry VMId StartAction StartDelay StartOrder StopAction StopDelay WaitForHeartbeat

Таким образом, задача сводится к тому, чтобы для всех машин с <startOrder>-1</startOrder> получить VMId (в файле /etc/vmware/hostd/vmAutoStart.xml  он соответствует цифре, которая расположена между тегами <moid>VMId</moid>), номер очереди запуска StartOrder, ипередатьэтипараметрыкоманде vim-cmd hostsvc/autostartmanager/update_autostartentry.

Получаем следующий скрипт:


#!/bin/ash
VMn=`grep -c '<startOrder>-1' /etc/vmware/hostd/vmAutoStart.xml`
if [ "$VMn" -ne "0" ]
then
                VM=`grep -c '<startOrder>' /etc/vmware/hostd/vmAutoStart.xml`
                N=`expr $VM - $VMn`
                grep -n "startOrder>-1" /etc/vmware/hostd/vmAutoStart.xml|cut -d' ' -f1|sed 's/://g'|\
                               while read s
                               do
                                               s=`expr $s - 4`
                                               N=`expr $N + 1`
                                               moid=`sed -n "$s p" /etc/vmware/hostd/vmAutoStart.xml|cut -f2 -d'>' | cut -f1 -d'<'`
                                               vim-cmd hostsvc/autostartmanager/update_autostartentry $moid  "PowerOn" "120" "$N" "PowerOff" "120" "systemDefault"
                               done
fi

Данный способ лишен недостатка Способа №1, а также использует встроенный механизм управления автозапуском виртуальных машин, что минимизирует вероятность некорректной работы скрипта.

Скрипт необходимо разместить на централизованном хранилище по двум причинам:

  • После перезагрузки гипервизора ESXi из системных папок удаляются посторонние файлы.
  • Разместив скрипт на централизованном хранилище, он становится доступным со всех хостов ESXi.

Далее делаем скрипт исполняемым:

chmod 777 /vmfs/volumes/Path/easyStartupScript.sh

Для того, чтобы скрипт запускался автоматически, редактируем файл планировщика заданий /var/spool/cron/crontabs/root:

vi /var/spool/cron/crontabs/root

добавляя в него следующую строчку:

*/5 * * * * /vmfs/volumes/Path/easyStartupScript2.sh

Чтобы изменения файла /var/spool/cron/crontabs/root вступили в силу, необходимо перезапустить демон crond, получаем номер процесса:

cat /var/run/crond.pid

Полученный номер используем для того, чтобы «убить» процесс crond:

kill № процесса (например: kill 4096)

Перезапускаем процесс crond:

crond

После этого скрипт будет выполнятся каждые 5 минут. Но следует обратить внимание, что после перезагрузки хостов ESXi файл /var/spool/cron/crontabs/root останется девственно чистым и строка, которая в него была вписана, пропадет. Чтобы генерировать задание автоматического запуска после перезагрузки хоста ESXi необходимо в файл /etc/rc.local добавить следующие три строчки:

/bin/kill $(cat /var/run/crond.pid)
/bin/echo '*/5 * * * * /vmfs/volumes/Path/easyStartupScript2.sh' >> /var/spool/cron/crontabs/root
/bin/busybox crond

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

 

 

Интересное:





Зал Славы Рекламодателя
Ближайшие события в области виртуализации:

Быстрый переход:
VMware Veeam Broadcom Offtopic Microsoft Cloud StarWind VMachines NAKIVO vStack Gartner Vinchin Nakivo IT-Grad Teradici VeeamON VMworld PowerCLI Citrix VSAN GDPR 5nine Hardware Nutanix vSphere RVTools Enterprise Security Code Cisco vGate SDRS Parallels IaaS HP VMFS VM Guru Oracle Red Hat Azure KVM VeeamOn 1cloud DevOps Docker Storage NVIDIA Partnership Dell Virtual SAN Virtualization VMTurbo vRealize VirtualBox Symantec Softline EMC Login VSI Xen Amazon NetApp VDI Linux Hyper-V IBM Google VSI Security Windows vCenter Webinar View VKernel Events Windows 7 Caravan Apple TPS Hyper9 Nicira Blogs IDC Sun VMC Xtravirt Novell IntelVT Сравнение VirtualIron XenServer CitrixXen ESXi ESX ThinApp Books P2V Backup Private AI vDefend VCF Workstation Network vSAN Tanzu VMUG HCX VCPP Labs Explore Data Protection ONE AI Intel Live Recovery VCP V2V Aria NSX DPU Update EUC Avi Community Skyline Host Client GenAI Chargeback Horizon SASE Workspace ONE Networking Ransomware Tools Performance Lifecycle AWS API USB SDDC Fusion Whitepaper SD-WAN Mobile SRM ARM HCI Converter Photon OS Operations VEBA App Volumes Certification VMConAWS Workspace Imager SplinterDB DRS SAN vMotion Open Source iSCSI Partners HA Monterey Kubernetes vForum Learning vRNI UAG Support Log Insight AMD vCSA NSX-T Graphics NVMe HCIBench SureBackup Docs Carbon Black vCloud Обучение Web Client vExpert OpenStack UEM CPU PKS vROPs Stencils Bug VTL Forum Video Update Manager VVols DR Cache Storage DRS Visio Manager Virtual Appliance PowerShell LSFS Client Datacenter Agent esxtop Book Photon Cloud Computing SSD Comparison Blast Encryption Nested XenDesktop VSA vNetwork SSO VMDK Appliance VUM HoL Automation Replication Desktop Fault Tolerance Vanguard SaaS Connector Event Free SQL Sponsorship Finance FT Containers XenApp Snapshots vGPU Auto Deploy SMB RDM Mirage XenClient MP iOS SC VMM VDP PCoIP RHEV vMA Award Licensing Logs Server Demo vCHS Calculator Бесплатно Beta Exchange MAP DaaS Hybrid Monitoring VPLEX UCS GPU SDK Poster VSPP Receiver VDI-in-a-Box Deduplication Reporter vShield ACE Go nworks iPad XCP Data Recovery Documentation Sizing Pricing VMotion Snapshot FlexPod VMsafe Enteprise Monitor vStorage Essentials Live Migration SCVMM TCO Studio AMD-V KB VirtualCenter NFS ThinPrint Director Memory SIOC Troubleshooting Stretched Bugs ESA Android Python Upgrade ML Hub Guardrails CLI Driver Foundation HPC Orchestrator Optimization SVMotion Diagram Ports Plugin Helpdesk VIC VDS Migration Air DPM Flex Mac SSH VAAI Heartbeat MSCS Composer
Полезные постеры:

Постер VMware vSphere PowerCLI 10

Постер VMware Cloud Foundation 4 Architecture

Постер VMware vCloud Networking

Постер VMware Cloud on AWS Logical Design Poster for Workload Mobility

Постер Azure VMware Solution Logical Design

Постер Google Cloud VMware Engine Logical Design

Постер Multi-Cloud Application Mobility

Постер VMware NSX (референсный):

Постер VMware vCloud SDK:

Постер VMware vCloud Suite:

Управление памятью в VMware vSphere 5:

Как работает кластер VMware High Availability:

Постер VMware vSphere 5.5 ESXTOP (обзорный):

 

Популярные статьи:
Как установить VMware ESXi. Инструкция по установке сервера ESXi 4 из состава vSphere.

Включение поддержки технологии Intel VT на ноутбуках Sony VAIO, Toshiba, Lenovo и других.

Типы виртуальных дисков vmdk виртуальных машин на VMware vSphere / ESX 4.

Как работают виртуальные сети VLAN на хостах VMware ESX / ESXi.

Как настроить запуск виртуальных машин VMware Workstation и Server при старте Windows

Сравнение Oracle VirtualBox и VMware Workstation.

Что такое и как работает виртуальная машина Windows XP Mode в Windows 7.

Диски RDM (Raw Device Mapping) для виртуальных машин VMware vSphere и серверов ESX.

Работа с дисками виртуальных машин VMware.

Где скачать последнюю версию VMware Tools для виртуальных машин на VMware ESXi.

Подключение локальных SATA-дисков сервера VMware ESXi в качестве хранилищ RDM для виртуальных машин.

Как перенести виртуальную машину VirtualBox в VMware Workstation и обратно

Инфраструктура виртуальных десктопов VMware View 3 (VDI)

Как использовать возможности VMware vSphere Management Assistant (vMA).

Бесплатные утилиты для виртуальных машин на базе VMware ESX / ESXi.

Интервью:

Alessandro Perilli
virtualization.info
Основатель

Ратмир Тимашев
Veeam Software
Президент


Полезные ресурсы:

Последние 100 утилит VMware Labs

Новые возможности VMware vSphere 8.0 Update 1

Новые возможности VMware vSAN 8.0 Update 1

Новые документы от VMware

Новые технологии и продукты на VMware Explore 2022

Анонсы VMware весной 2021 года

Новые технологии и продукты на VMware VMworld 2021

Новые технологии и продукты на VMware VMworld 2020

Новые технологии и продукты на VMware VMworld Europe 2019

Новые технологии и продукты на VMware VMworld US 2019

Новые технологии и продукты на VMware VMworld 2019

Новые технологии и продукты на VMware VMworld 2018

Новые технологии и продукты на VMware VMworld 2017



Copyright VM Guru 2006 - 2025, Александр Самойленко. Правила перепечатки материалов.
vExpert Badge