Proxmox 上 Windows 客户机的快照前脚本挂钩?

Proxmox 上 Windows 客户机的快照前脚本挂钩?

我有一个 Proxmox 服务器,其中有一个 Windows 10 客户机,将运行 MSSQL Express。Windows 客户机已安装并运行 QEMU 客户机代理。对于备份,我有一个单独的服务器运行 Proxmox Backup,该服务器已安排每周对客户机进行一次完整备份(停止模式)。此外,我需要更频繁地进行快照备份,并且几乎不中断访问,但是,由于数据不一致的可能性,简单地“冻结”具有活动数据库的文件系统是有问题的。

如果这是 Linux 客户机上的 MySQL,则已经有一个解决方案,即向 fsfreeze-hook 添加脚本,这样例子包含在 repo 中。但是,从我所能找到的少量具体信息来看,Windows 版本的 QEMU 客户代理似乎缺少这整个功能。

如何在 Windows 上实现类似的客户机挂钩脚本?理想情况下,应在快照开始之前调用该脚本,以便将数据库置于安全状态以便拍摄快照。

答案1

您应该能够使用 在 Windows 机器上编写快照脚本vssadmin create shadow。但是,请注意:

  • Windows 10 上的 vss 快照因快照数据损坏而无法使用(我在尝试通过恢复一些快照文件时亲身经历过此问题ShadowExplorer

  • 任何现代数据库引擎(阅读:几乎任何预期MyISAM)都使用日记帐和/或 WAL 来很好地应对断电或崩溃一致的备份。

除了进行整个虚拟机备份之外,我还建议如果可能的话在其他位置(即网络共享)定期进行脚本数据库转储。

答案2

我理解这里的要求,但不幸的是,“替代”虚拟化平台很难应对微软的诡计。如果你认为 Citrix 甚至放弃了 xenserver 中的静态快照,你就会明白这里的挑战。

我想您可以尝试通过 ssh 或 powershell 调用 vssadmin create shadow,但我实际上从未尝试过。

我知道的唯一方法可靠地使用 Proxmox 之类的工具在企业级维护 Windows VM 的备份:

  1. 由于我们讨论的是 SQL Server 计算机,因此您可以将数据分开保存,因为您使用 SQL Server 自己的功能进行备份。您可以使用任何操作系统,或者只保留备用/克隆 SQL Server 安装(如果停止,则不会违反许可证)。但是,您正在使用 SQL Server Express,这很麻烦,因为您无法安排计划任务,因此您需要找到其他东西。
  2. 在虚拟机内部使用 Windows (服务器) 备份,可能还结合了备份后快照的 ZFS 共享文件夹,这样您就可以从存储管理方面实际控制要保留的历史记录;这是免费的,而且实际上效果很好;恢复不是最快的,因为您需要启动 Windows 安装 iso 并在虚拟机内部执行伪“裸机”恢复。您需要启动 SQL Server VSS 编写器,这也应该为您提供 SQL Server 的一致备份,理论上。我经常在开发和测试环境中这样做,但生产是一个不同的问题,而且文档也不是最清晰的(感谢微软,像往常一样做得很好)。
  3. 使用其他经过认证的备份解决方案,它们比 Windows Backup 做得更好,但同样是从 VM 内部进行的;如果您必须为大量 VM 购买许可证,成本仍然很昂贵,因此在这一点上,我会考虑选择大公司。

事实上,我知道您问的是 Proxmox,但必须说,从专业角度来看,管理承载重要数据的 Windows 机器的最佳方式是使用 VMWare vSphere 或 Hyper-V 和 Veeam Backup;这是最昂贵的解决方案,但也是最酷的灾难恢复解决方案:例如,您可以从备份中运行机器,还有其他很酷的功能。我不是在做广告;我体验过几乎所有有意义的虚拟化平台,如果您使用 Windows,情况就是这样。

答案3

现在,对于不可靠的方法专门在 Proxmox 下执行 SQL Server 备份,我正在修改我之前的回答以完全符合您的要求。我只想强调这根本不是最佳实践,但我见过甚至在 VMWare 上也这样做(这很愚蠢)。

你可以做的是:

  • 在 Windows 中安装 OpenSSH 服务器,现在 Windows 已经

  • 在 proxmox 备份中设置钩子(但您需要从命令行而不是从 Web GUI 运行备份),如下所述:https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_hook_scripts;这样,我就可以通过 SSH 运行一个脚本,在 Windows VM 中执行某些操作

  • 我将运行的脚本不是 VSSADMIN,而是类似这样的脚本:

    SqlCmd -E -S LOCALHOST -Q "BACKUP DATABASE <DATABASENAME> TO DISK ='<PATH>'" 或者也可以是更复杂的东西,比如增量备份等。如果你喜欢 SQL 脚本,你也可以安装这个家伙的脚本来更好地处理备份:https://ola.hallengren.com/sql-server-backup.html

  • 此时,您将使用 Proxmox 备份备份。如果您等待缓冲区刷新,则保证一致(这是从专业角度来看它不能被视为可靠的原因之一。)

但是,我不喜欢这个以及之前做 VSS 快照的建议的原因是:

  • 这似乎过于复杂,而且你做的事情仍然不可靠
  • 事实上,如果我必须依赖 SQL Server VSS 编写器服务(这是强制性的,否则就没有任何一致性),我会恢复到之前的建议,即使用 Windows 备份 + 存储快照,这比仅使用脚本调用 VSS 并备份备份要好得多。

对于我的 Proxmox、XCP-ng 或其他操作系统下的 DB 机器,我从未费心将它们作为机器备份;您只需要确保它们只包含 DB 服务器,如果是某些关键应用程序,通常应该如此。我认为备份这些机器是浪费时间。我总是备份到外部存储(使用脚本、计划任务、mysqldump、SQL Server Agent、sqlcmd),因为如果我真的需要进行灾难恢复,我可以在几分钟内使用我可以提前准备的 docker 容器/VM 重新启动。它还占用空间更小

相关内容