вторник, 14 февраля 2017 г.

Решение проблемы msg.snapshot.error-QUIESCINGERROR при создании снапшотов VMware


    Решение описанной ниже проблемы заняло 6 месяцев. Было перепробовано множество различных решений, обновлений, изменений таймеров, перелопачено куча форумов и коммьюнити. В конечном итоге решение было найдено экспериментально с помощью техподдержки VMware. 
   Описание работы системы: организовано резервное копирование виртуальных машин с помощью Veritas NetBackup. Одним из вариантов резервного копирования виртуальных машин является создание снапшотов этих машин и запись их на ленточное хранилище. Этот вариант не самый лучший, поскольку создание снапшотов виртуальных машин в принципе нельзя рассматривать как полноценный бэкап: есть вероятность возникновения ошибок ввода-вывода с последующим созданием "inconsistent backup". Тем не менее этот вариант был выбран и реализован, поскольку позволял вместо общей LAN использовать SAN-сеть для бэкапа, что увеличивало скорость копирования в существенное количество раз и разгружало LAN. 
   Перед резервным копированием машины через создание снапшота необходимо в идеале выключить виртуальную машину, но в продакшене это сделать проблематично. Поэтому используются специальные pre_- и post_freeze_scripts, которые останавливают нужные сервисы до создания снапшота, а потом восстанавливают работоспособность сервисов после завершения создания снапшотов. Такие скрипты используются и в других продуктах по созданию резервных копий, и даже в базе знаний VMware есть KB, посвященные созданию нужных скриптов.
   Суть проблемы: резервное копирование производится с помощью ПО Veritas Netbackup через VMware vStorage APIs for data protection с использованием SAN транспорта. Для того, чтобы сделать резервное копирование машины, NetBackup должен отправить запрос в VMware, которая в свою очередь с помощью VMware Tools запустит ранее созданные скрипты для остановки сервисов. Однако в случае высоконагруженных приложений, которые непрерывно получают\отправляют большой объем данных, может случиться, что сервисы не могут быть остановлены быстро из-за большой нагрузки I\O. 
   В итоге видим следующую картину: после 15 минут и обрыва создания снапшота в логе ВМ vmware.log появляется сообщение вида:

2016-09-19T14:43:46.971Z| vmx| I120: Msg_Post: Warning
2016-09-19T14:43:46.971Z| vmx| I120: [msg.snapshot.quiesce.timeout] Timed out while quiescing the virtual machine.
2016-09-19T14:43:46.971Z| vmx| I120: ----------------------------------------
2016-09-19T14:43:46.976Z| vmx| I120: ToolsBackup: changing quiesce state: STARTED -> DONE
2016-09-19T14:43:46.976Z| vmx| I120: SnapshotVMXTakeSnapshotComplete: Done with snapshot 'test_snap_vm_2': 0
2016-09-19T14:43:46.976Z| vmx| I120: SnapshotVMXTakeSnapshotComplete: Snapshot 0 failed: Failed to quiesce the virtual machine (40).

В интерфейсе (vSplere client, vSphere Web client) появляется соответствующее сообщение об ошибке msg.snapshot.error-QUIESCINGERROR. 


     Проблема проявляется независимо от размещения ВМ на одном или другом хосте. Проблема проявляется независимо от того, какими инструментами создается снапшот (vSplere client, vSphere Web client или задача Netbackup). Проблема проявляется независимо от того, подключены мы к хосту или к vCenter. Т.к. проблема воспроизводится в Vmware, а таймаут в Netbackup отрабатывает корректно (об этом ниже), считаем, что Netbackup мы исключаем из диагностики.

Этапы решения:


 
   1. Для того, чтобы исключить возможное влияние нехватки ресурсов СХД или иных ресурсов серверов или ошибок в pre/post скриптах, создан простой скрипт, который работает чуть более 15 минут и отлично воспроизводит проблему. Примерно следующее содержание скрипта:

echo start timer
ping –n 1500 127.0.0.1
echo stop timer


    После проведения нескольких тестов выявлено, что проблема полностью на стороне VMware. 
   2. Далее действия, которые описаны в доступных KB-статьях на сайте VMware. Основные файлы, подвергающиеся редактированию, и их место расположения:
 
/etc/vmware/vpxa/vpxa.cfg - файл находится на каждом из хостов ESXi
C:\ProgramData\VMware\vCenterServer\cfg\vmware-vpx\vpxd.cfg – файл на сервере vCenter
C:\ProgramData\VMware\VMware Tools\tools.conf – файл внутри каждой виртуальной машины


   2a. Увеличиваем таймаут на vCenter:
https://kb.vmware.com/kb/1004790 указывает на таймаут в 15 минут. Меняем таймаут на 1500 секунд – файл C:\ProgramData\VMware\vCenterServer\cfg\vmware-vpx\vpxd.cfg.
   2b. Увеличиваем таймаут для хоста ESX согласно https://kb.vmware.com/kb/1017253. После выполнения изменений перезагрузить хост.
   2c. Установить таймаут для C:\ProgramData\VMware\VMware Tools\tools.conf в следующем виде:

[vmbackup]

timeout=<count>


   В итоге вышеуказанные действия из общедоступных рекомендаций не принесли результата. После обращения в техподдержку были получены дополнительные рекомендации по редактированию файла виртуальных машин vmx:
snapshot.quiesce.timeout = "<numSeconds>"

   Рекомендованное значение – 2100.

   Данную строку необходимо внести на все VMX файлы всех виртуальных машин. После этого снапшот заработал корректно, выполняется ровно столько, сколько указано в таймауте. При этом выставляемого значения хватает для корректной отработки pre\post скрипта.

4 комментария:

  1. Для решения проблемы нужно в VMware Tools удалить Volume Shadow Copy Service Support.
    Для удаления запускаем установку и помечаем этот пакет как недоступный.

    ОтветитьУдалить
    Ответы
    1. Доброго дня. Спасибо за комментарий. Вероятно, тоже вариант=)

      Удалить
    2. Спасибо. Именно это и работает!

      Удалить
    3. Да!!! Это помогло! нужно в VMware Tools удалить Volume Shadow Copy Service Support.

      Удалить