
Eu tenho uma configuração de servidor Proxmox com um convidado do Windows 10 que executará o MSSQL Express. O convidado do Windows tem o agente convidado QEMU instalado e funcionando. Para backups, tenho um servidor separado rodando o Proxmox Backup, que já está programado para fazer backups completos do convidado uma vez por semana (modo stop). Além disso, preciso ter backups de snapshots mais frequentes com pouca ou nenhuma interrupção de acesso; no entanto, simplesmente “congelar” o sistema de arquivos com um banco de dados ativo é problemático devido à chance de inconsistência de dados.
Se este fosse o MySQL em um convidado Linux, já existe uma solução na forma de adicionar um script ao fsfreeze-hook, a tal ponto que existe umexemploincluído no repositório. Mas, todo esse recurso parece estar faltando na versão do agente convidado QEMU para Windows, pelas poucas informações específicas que pude encontrar.
Como posso obter um script de gancho de convidado semelhante no Windows? Idealmente, o script seria chamado logo antes do início do instantâneo, a fim de colocar o banco de dados em um estado seguro para a captura de um instantâneo.
Responder1
Você deve ser capaz de criar um script de snapshot em uma máquina Windows usando vssadmin create shadow
. No entanto, observe que:
Os snapshots vss no Windows 10 têm a reputação de serem inutilizáveis devido à corrupção de dados do snapshot (tive experiência em primeira mão sobre o problema ao tentar recuperar alguns arquivos de snapshot via
ShadowExplorer
)qualquer mecanismo de banco de dados moderno (leia-se: quase tudo o que é esperado
MyISAM
) usa jornaling e/ou WAL para sobreviver perfeitamente a uma perda de energia ou a um backup consistente com falhas.
Além de fazer backups de toda a VM, sugiro fazer dumps regulares de banco de dados com script em outros locais (ou seja: um compartilhamento de rede), se possível.
Responder2
Entendo os requisitos aqui, mas infelizmente não é fácil para plataformas de virtualização “alternativas” lidar com as travessuras da Microsoft. Se você acha que até a Citrix desistiu dos snapshots inativos no xenserver, você entende o desafio aqui.
Eu acho que você poderia tentar chamar vssadmin create shadow via ssh ou powershell, mas na verdade nunca tentei.
As únicas maneiras que conheçode forma confiávelmanter backups de uma VM do Windows em nível empresarial com algo como Proxmox são:
- Como estamos falando especificamente de uma máquina SQL Server, você mantém os dados separados porque faz backup com funcionalidades próprias do SQL Server. O sistema operacional que você pode usar ou apenas manter uma instalação sobressalente/clone do SQL Server (sem violação de licença se estiver interrompido). No entanto, você está usando o SQL Server Express, o que é problemático porque você não pode ter tarefas agendadas, então você precisa encontrar outra coisa.
- Usando o backup do Windows (servidor) de dentro da VM, talvez acoplado a uma pasta compartilhada ZFS da qual você tira um snapshot após o backup ser feito, para que você possa realmente controlar o histórico que deseja manter do lado do gerenciamento de armazenamento; isso é gratuito e realmente funciona muito bem; a recuperação não é a mais rápida, pois você precisa inicializar a iso de instalação do Windows e executar uma restauração "bare metal" falsa dentro da VM. Você precisa iniciar o gravador VSS do SQL Server, e isso também deve fornecer backups consistentes do SQL Server,em teoria. Faço isso regularmente em ambientes de desenvolvimento e teste, mas a produção é uma fera diferente e a documentação não é das mais claras (obrigado Microsoft, bom trabalho, como sempre).
- Use outras soluções de backup certificadas que façam um trabalho melhor que o Backup do Windows, mas novamente de dentro da VM; ainda é caro se você tiver que comprar licenças para muitas VMs, então, neste ponto, eu consideraria optar pelos grandes.
Na verdade, sei que você está perguntando sobre o Proxmox, mas devo dizer que, profissionalmente, a melhor maneira de gerenciar máquinas Windows que carregam dados importantes é usando VMWare vSphere ou Hyper-V com Veeam Backup; é a solução mais cara, mas também a mais legal para recuperação de desastres: você pode rodar a máquina a partir de backups, por exemplo, e outros recursos interessantes. Não estou anunciando nada; Eu experimentei praticamente todas as plataformas de virtualização que fazem sentido e, se você usar o Windows, é assim que as coisas são.
Responder3
Agora, para omaneiras não confiáveispara fazer backups do SQL Server especificamente no Proxmox, estou alterando minha resposta anterior para cumprir exatamente o que você está perguntando. Só quero sublinhar que esta não é uma prática recomendada, mas já vi isso ser feito até com VMWare (isso é estúpido).
O que você poderia fazer é:
instale o servidor OpenSSH no Windows, que agora o Windows possui
configure ganchos no backup proxmox (mas você precisa executar backups na linha de comando, não na GUI da web), conforme descrito aqui:https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_hook_scripts;desta forma, posso executar um script que executa algo dentro da VM do Windows via SSH
esse script que irei executar não é VSSADMIN, mas algo como:
SqlCmd -E -S LOCALHOST -Q "BACKUP DATABASE <DATABASENAME> TO DISK ='<PATH>'"
ou também pode ser algo mais complicado, como backups incrementais e tal. Você também pode instalar os scripts desse cara para lidar melhor com os backups, se você gosta de scripts SQL:https://ola.hallengren.com/sql-server-backup.html.Neste ponto você fará backup do backup com Proxmox. É garantido que isso seja consistente, se você esperar que os buffers sejam liberados (essa é uma das razões pelas quais não pode ser considerado confiável do ponto de vista profissional).
No entanto, os motivos pelos quais não gosto disso e da sugestão anterior de fazer snapshots VSS são:
- Parece muito complicado e você ainda está fazendo algo que não é confiável
- Na verdade, se eu tiver que confiar no serviço de gravador VSS do SQL Server (que é obrigatório, caso contrário, não há consistência alguma), eu voltaria à minha sugestão anterior de usar o Backup do Windows + instantâneos de armazenamento, que é melhor de gerenciar do que apenas chamar o VSS com um script e fazendo backup do backup.
Para minhas máquinas de banco de dados em Proxmox, XCP-ng ou qualquer outra coisa, nunca me preocupei em fazer backup delas como máquinas; você só precisa garantir que eles contenham apenas o servidor de banco de dados, como deveria ser em geral se for algum aplicativo crítico. Acho que fazer backup dessas máquinas é uma perda de tempo. Eu sempre faço backup em um armazenamento externo (com scripts, tarefas agendadas, mysqldump, SQL Server Agent, sqlcmd) porque posso voltar a funcionar em minutos com um contêiner/VM docker que posso preparar com antecedência se realmente precisar fazer recuperação de desastres. Também ocupamuito menos espaço.