Skip to content
🟡In Arbeit52%
Vollständigkeit:
80%
Korrektheit:
50%
⏳ Noch nicht geprüft

Estratégia de Backup

Proxmox Backup Server (PBS)

Configuração de Armazenamento

Nome do Armazenamento: p2d2-pbs
Tipo: Proxmox Backup Server (deduplicando)
Conteúdo: Backups (VMs + LXCs)
Status: Ativo, Compartilhado
Deduplicação: Habilitada (baseada em chunks)
Criptografia: Configurável opcionalmente

Vantagens do PBS

  • Backups Incrementais: Apenas alterações desde o último backup
  • Deduplicação: Dados duplicados armazenados apenas uma vez
  • Verificação: Verificação automática da integridade do backup
  • Restaurações Rápidas: Acesso direto aos snapshots :::

Agendamento de Backup (Generalizado)

Tarefas de Backup (configuradas via Proxmox Web-UI):

ComponenteAgendamentoRetençãoTipo
OPNSense (Firewall)Diário7 diasSnapshot
PostgreSQL/PostGISDiário14 diasSnapshot
GeoServerSemanal4 semanasSnapshot
MapProxySemanal4 semanasSnapshot
OSM-TilerMensal3 mesesSnapshot
Frontend (AstroJS)Diário7 diasSnapshot

Janela de Backup

Backups devem ocorrer fora do horário de pico (tipicamente à noite). Horários de backup não são documentados especificamente (boa prática de segurança).

Tipos de Backup

Snapshots de Contêiner (LXC)

# Criar backup manual
vzdump <VMID> --storage p2d2-pbs --mode snapshot --compress zstd

# Verificar status do backup
pvesm list p2d2-pbs | grep "ct-<VMID>"

# Restaurar contêiner do backup
pct restore <VMID> p2d2-pbs:backup/ct-<VMID>-*.tar.zst --force

Vantagens dos Snapshots LVM-Thin:

  • Consistentes (nível de sistema de arquivos)
  • Rápidos (apenas cópia de metadados)
  • Sem downtime do serviço durante o backup

Backups de VM (QEMU/KVM)

# Backup de VM (com suspensão para consistência)
vzdump <VMID> --storage p2d2-pbs --mode suspend

# Restaurar VM
qmrestore p2d2-pbs:backup/vm-<VMID>-*.vma.zst <VMID>

Política de Retenção

Backups Diários: 
  - Retenção: 7 dias
  - Serviços: PostgreSQL, Frontend, Firewall

Backups Semanais:
  - Retenção: 4 semanas
  - Serviços: GeoServer, MapProxy

Backups Mensais:
  - Retenção: 3 meses
  - Serviços: OSM-Tiler (grandes volumes de dados)

Limpeza Automática: Tarefa Prune do PBS (diária)

Backups de Banco de Dados (Adicional ao PBS)

PostgreSQL pg_dump

# SQL-Dump (no contêiner PostgreSQL)
sudo -u postgres pg_dump data-dna | gzip > /backup/data-dna_$(date +%Y%m%d).sql.gz

# Automação via Cron
# /etc/cron.daily/postgres-backup
#!/bin/bash
BACKUP_DIR="/backup/postgres"
mkdir -p "$BACKUP_DIR"
sudo -u postgres pg_dump data-dna | gzip > "$BACKUP_DIR/data-dna_$(date +%Y%m%d).sql.gz"

# Excluir backups antigos (>30 dias)
find "$BACKUP_DIR" -name "data-dna_*.sql.gz" -mtime +30 -delete

Por que adicional ao PBS?:

  • ✅ Restauração seletiva de tabelas individuais
  • ✅ Portátil entre versões do PostgreSQL
  • ✅ Tamanho de backup menor (comprimido)
  • ✅ Importação para ambientes de teste sem restauração de contêiner

Formato Personalizado PostGIS

# Formato personalizado (com objetos binários)
pg_dump -Fc -b -v -f /backup/data-dna_postgis.backup data-dna

# Restauração (seletiva possível)
pg_restore -d data-dna --table=kommunen /backup/data-dna_postgis.backup

Backups de Configuração

Caddy (OPNSense)

# Backup Caddyfile + Configs personalizadas
tar -czf /backup/caddy-config_$(date +%Y%m%d).tar.gz \
  /usr/local/etc/caddy/Caddyfile \
  /usr/local/etc/caddy/caddy.d/

# Certificados TLS (automaticamente sauvegardados via backup VM PBS)

Serviços Systemd (Frontend)

# Backup de todos os serviços p2d2
tar -czf /backup/systemd-services_$(date +%Y%m%d).tar.gz \
  /etc/systemd/system/astro-*.service \
  /etc/systemd/system/webhook-server.service

Recuperação de Desastres (Disaster Recovery)

Falha Total do Host

Cenário: Falha de hardware do servidor Proxmox

Etapas de Recuperação:

  1. Configurar novo host Proxmox

    # Instalar Proxmox VE a partir da ISO
    # Restaurar configuração de rede (Bridges)
  2. Montar Armazenamento PBS

    # Na Proxmox Web-UI: Datacenter → Storage → Add → PBS
    # Servidor PBS: <PBS_IP_OR_HOSTNAME>
    # Datastore: p2d2-backups
  3. Restaurar Contêineres/VMs

    # Via Web-UI: Storage → p2d2-pbs → Content → Restore
    # Ou CLI:
    pct restore <VMID> p2d2-pbs:backup/ct-<VMID>-latest.tar.zst
    qmrestore p2d2-pbs:backup/vm-<VMID>-latest.vma.zst <VMID>
  4. Verificar Serviços

    # PostgreSQL
    pct exec <PG_VMID> -- systemctl status postgresql
    
    # Integridade do banco de dados
    pct exec <PG_VMID> -- sudo -u postgres psql -c "SELECT COUNT(*) FROM kommunen;"

Falha de Contêiner Individual

Cenário: Contêiner PostgreSQL corrompido

# Parar contêiner
pct stop <PG_VMID>

# Restaurar do backup
pct restore <PG_VMID> p2d2-pbs:backup/ct-<PG_VMID>-<DATA>.tar.zst --force

# Iniciar contêiner
pct start <PG_VMID>

# Verificar status do serviço
pct exec <PG_VMID> -- systemctl status postgresql

Corrupção de Banco de Dados

Cenário: Dados PostgreSQL corrompidos, mas contêiner OK

# Dropar banco de dados
sudo -u postgres dropdb data-dna

# Recriar
sudo -u postgres createdb data-dna

# Restaurar SQL-Dump
gunzip < /backup/data-dna_20251129.sql.gz | sudo -u postgres psql data-dna

# Reativar extensão PostGIS
sudo -u postgres psql -d data-dna -c "CREATE EXTENSION postgis;"

Backups Off-Site

Atualmente, todas as instâncias são sauvegardadas no Proxmox-Backup local. Após o backup, os backups são sincronizados com um PBS remoto localizado na Alemanha.

Verificação de Backup

Todos os backups são verificados uma vez por semana em ambos os PBS.

Teste de Restauração Mensual (planejado)

# Criar contêiner de teste a partir do backup
pct restore 999 p2d2-pbs:backup/ct-<PG_VMID>-latest.tar.zst \
  --hostname postgresql-test \
  --storage local-lvm

# Verificar início do serviço
pct start 999
pct exec 999 -- systemctl status postgresql

# Testar acesso ao banco de dados
pct exec 999 -- sudo -u postgres psql -c "SELECT version();"

# Limpeza
pct stop 999
pct destroy 999

Verificar Integridade do Banco de Dados

-- Funcionalidade PostGIS
SELECT PostGIS_Full_Version();

-- Número de registros (verificação de plausibilidade)
SELECT 
  'kommunen' AS table_name, COUNT(*) AS records FROM kommunen
UNION ALL
SELECT 
  'geometries' AS table_name, COUNT(*) FROM geometries;

-- Validade da geometria
SELECT COUNT(*) AS invalid_geometries
FROM kommunen
WHERE NOT ST_IsValid(geom);

Monitoramento de Backup

Logs de Tarefas Proxmox

# Exibir logs de backup
cat /var/log/vzdump.log | grep "ERROR\|WARN"

# Verificar status do PBS
proxmox-backup-manager tasks list

# Uso de armazenamento
pvesm status p2d2-pbs

Configuração de Alertas

# Notificações por e-mail para falhas de backup
# Na Proxmox Web-UI: Datacenter → Notifications

# Script de monitoramento personalizado
#!/bin/bash
# /etc/cron.hourly/backup-check
LAST_BACKUP=$(find /var/lib/proxmox-backup/datastore/ -name "*.log" -mtime -1 | wc -l)
if [ $LAST_BACKUP -eq 0 ]; then
    echo "ALERT: No recent backups found" | mail -s "Backup Alert" admin@data-dna.eu
fi

Melhores Práticas

Fazer:

  • Realizar testes de restauração regulares
  • Monitorar logs de backup e analisar erros
  • Adaptar políticas de retenção às necessidades de negócios
  • Documentar alterações de configuração
  • Configurar monitoramento para tarefas de backup

Não Fazer:

  • Assumir que backups funcionam sem verificação
  • Fazer backup de dados críticos em apenas uma mídia
  • Ignorar falhas de backup
  • Operar sem um plano de recuperação de desastres
  • Não monitorar a capacidade de backup

Referências

Nota: Este texto foi traduzido automaticamente com assistência de IA e ainda não foi revisado por um humano.