Скрипт-хук перед снимком для гостевой ОС Windows на Proxmox?

Скрипт-хук перед снимком для гостевой ОС Windows на Proxmox?

У меня есть сервер Proxmox с гостевой ОС Windows 10, на которой будет работать MSSQL Express. На гостевой ОС Windows установлен и работает гостевой агент QEMU. Для резервного копирования у меня есть отдельный сервер, на котором запущен Proxmox Backup, который уже запланирован для создания полных резервных копий гостевой ОС раз в неделю (режим остановки). Кроме того, мне нужно чаще делать моментальные снимки с небольшим или нулевым прерыванием доступа, однако простое «замораживание» файловой системы с активной базой данных проблематично из-за вероятности несогласованности данных.

Если это был MySQL на гостевой ОС Linux, то уже есть решение в виде добавления скрипта в fsfreeze-hook, вплоть до того, что естьпримервключено в репозиторий. Но, судя по той небольшой конкретной информации, которую мне удалось найти, вся эта функция, похоже, отсутствует в сборке гостевого агента QEMU для Windows.

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

решение1

Вы должны иметь возможность написать скрипт моментального снимка на машине Windows с помощью vssadmin create shadow. Однако, обратите внимание, что:

  • Снимки vss в Windows 10 имеют репутацию непригодных к использованию из-за повреждения данных снимка (я столкнулся с этой проблемой лично, когда пытался восстановить некоторые файлы снимка с помощью ShadowExplorer)

  • любая современная СУБД (читай: почти любая, ожидаемая MyISAM) использует журналирование и/или WAL, чтобы без проблем пережить отключение питания или резервное копирование, устойчивое к сбоям.

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

решение2

Я понимаю требования здесь, но, к сожалению, "альтернативным" платформам виртуализации нелегко иметь дело с махинациями Microsoft. Если вы думаете, что даже Citrix отказался от неподвижных снимков в xenserver, вы понимаете, в чем здесь проблема.

Думаю, можно попробовать вызвать vssadmin create shadow через ssh или powershell, но я этого никогда не пробовал.

Единственные способы, которые я знаю,надежнорезервное копирование виртуальных машин Windows на корпоративном уровне с помощью чего-то вроде Proxmox:

  1. Поскольку мы говорим конкретно о машине SQL Server, вы храните данные отдельно, поскольку вы делаете резервное копирование с помощью собственных функций SQL Server. Вы можете использовать любую ОС или просто сохранить резервную/клонированную установку SQL Server (без нарушения лицензии, если она остановлена). Однако вы используете SQL Server Express, что проблематично, поскольку вы не можете иметь запланированные задачи, поэтому вам нужно найти что-то другое.
  2. Использование резервного копирования Windows (Server) изнутри виртуальной машины, возможно, в сочетании с общей папкой ZFS, которую вы делаете моментальным снимком после создания резервной копии, так что вы можете фактически контролировать историю, которую вы хотите сохранить со стороны управления хранилищем; это бесплатно и на самом деле работает довольно хорошо; восстановление не самое быстрое, так как вам нужно загрузить установочный образ Windows iso и выполнить поддельное восстановление "голого железа" внутри виртуальной машины. Вам нужно запустить SQL Server VSS writer, и это должно также обеспечить вам согласованные резервные копии SQL Server,в теории. Я регулярно делаю это в средах разработки и тестирования, но производство — это совсем другое дело, и документация не самая понятная (спасибо Microsoft, как обычно, хорошая работа).
  3. Используйте другие сертифицированные решения для резервного копирования, которые справляются с этой задачей лучше, чем Windows Backup, но опять же изнутри виртуальной машины; это все равно дорого, если вам придется покупать лицензии для большого количества виртуальных машин, поэтому на данном этапе я бы рассмотрел вариант с более крупными решениями.

На самом деле, я знаю, что вы спрашиваете о Proxmox, но нужно сказать, что с профессиональной точки зрения, лучший способ управлять машинами Windows, которые содержат важные данные, — это использовать VMWare vSphere или Hyper-V с Veeam Backup; это самое дорогое решение, но и самое крутое для аварийного восстановления: вы можете запустить машину из резервных копий, например, и другие крутые функции. Я ничего не рекламирую; я испытал практически все платформы виртуализации, которые имеют смысл, и если вы переходите на Windows, то это так.

решение3

Теперь, дляненадежные способыдля выполнения резервного копирования SQL Server в Proxmox, я вношу поправки в свой предыдущий ответ, чтобы он соответствовал тому, о чем вы спрашиваете. Я только хочу подчеркнуть, что это вообще не лучшая практика, но я видел, как это делалось даже с VMWare (это глупо).

Что вы можете сделать:

  • установить сервер OpenSSH в Windows, который теперь есть в Windows

  • настройте хуки в резервном копировании proxmox (но вам нужно запускать резервное копирование из командной строки, а не из веб-интерфейса), как описано здесь:https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_hook_scripts;таким образом, я могу запустить скрипт, который выполняет что-то внутри виртуальной машины Windows через SSH

  • скрипт, который я запущу, не VSSADMIN, а что-то вроде:

    SqlCmd -E -S LOCALHOST -Q "BACKUP DATABASE <DATABASENAME> TO DISK ='<PATH>'" или это может быть что-то более сложное, например, инкрементальные резервные копии и т. п. Вы также можете установить скрипты этого парня, чтобы лучше обрабатывать резервные копии, если вы увлекаетесь скриптами SQL:https://ola.hallengren.com/sql-server-backup.html.

  • На этом этапе вы сделаете резервную копию с помощью Proxmox. Это гарантированно будет согласованным, если вы дождетесь очистки буферов (это одна из причин, по которой это нельзя считать надежным с профессиональной точки зрения).

Однако причины, по которым мне это не нравится, а также предыдущее предложение делать снимки VSS, следующие:

  • Это кажется слишком сложным, и вы все равно делаете что-то ненадежное.
  • На самом деле, если мне придется положиться на службу записи VSS SQL Server (это обязательно, иначе не будет никакой согласованности), я бы вернулся к своему предыдущему предложению использовать резервное копирование Windows + моментальные снимки хранилища, что в целом удобнее, чем просто вызывать VSS со скриптом и создавать резервную копию.

Для моих машин БД под Proxmox, XCP-ng или чем-то еще я никогда не беспокоился о резервном копировании их как машин; вам просто нужно убедиться, что они содержат только сервер БД, как это должно быть в общем случае, если это какое-то критическое приложение. Я думаю, что резервное копирование этих машин — пустая трата времени. Я всегда делаю резервное копирование на внешнее хранилище (с помощью скриптов, запланированных задач, mysqldump, SQL Server Agent, sqlcmd), потому что я могу снова работать за считанные минуты с контейнером docker/VM, который я могу подготовить заранее, если мне действительно нужно выполнить аварийное восстановление. Это также занимаетгораздо меньше места.

Связанный контент