Skip to content

Estratégia de Storage

Estrategia de storage — SP, Franca e cross-site

Documento de decisao sobre escolha de tecnologias de storage pra infra UNESP CPPS/IPPRI: por que usamos o que usamos, quando faria sentido trocar, e como replicar entre os 2 sites.

Complementa linstor-conceitos.md (conceitos tecnicos) e rede-sp.md (topologia).

Contexto

Dois sites Proxmox em UNESP:

  • SP (clusterippri, 6 nos): infraestrutura central, GPU labs, OpenEdX, CPPS apps, workstations
  • Franca (cluster-labri, 7-8 nos): laboratorio de pesquisa, gateway, servicos descentralizados

Workloads:

  • VMs gerais (web, app servers, gateways)
  • DBs nao-criticos (Postgres, MySQL pra apps academicos)
  • GPU/ML (training, inference)
  • File serving (NextCloud)
  • Containers/K8s control plane (planejado)

Caracteristicas da equipe e contexto:

  • Equipe pequena, prioriza simplicidade
  • Orcamento academico — preferir open-source sem subscricao
  • RPO/RTO toleravel: minutos a horas (nao e high-frequency trading)
  • Compliance: dados de pesquisa (LGPD) — encriptacao seletiva quando aplicavel

LVM_THIN — por que e a escolha certa pra nos

LINSTOR suporta varios storage providers (ver linstor-conceitos.md#storage-pool-drivers). Pra nosso cenario, LVM_THIN e o padrao adotado.

A favor

PontoPor que importa pra nos
Padrao LINBIT — caminho mais testadoEquipe pequena nao tem tempo pra debugar caminhos exoticos
Maturidade no kernel ha anosEstabilidade > novidade
Snapshots CoW eficientesPermite rollback rapido em upgrades, testes
Thin provisioning (overcommit)Util em lab — alocar 200G pra VM que usa 30G
Integra nativo com ProxmoxPVE ja usa LVM em todo lugar — operadores ja conhecem
Operacao simpleslvs, vgs, lvextend — comandos triviais
Performance proxima ao raw NVMe/SSDSem overhead significativo do thin layer

Limites a monitorar

LimiteImpacto se ignoradoMitigacao
Thin pool pode estourarTodas VMs no pool travam — recovery dolorosaAlarme em 70-80% + MaxOversubscriptionRatio no LINSTOR
Sem checksumsCorrupcao silenciosa nao detectadaBackup com checksum (PBS faz)
Sem dedupVMs identicas ocupam 1x cada (sem economia)Aceitar — dedup vive na camada de backup (PBS)
Snapshots crescem linearReter muitos snapshots no pool consome espacoPolitica de retencao curta (7 dias local)

Quando outras opcoes caberiam (e por que nao no nosso caso)

AlternativaCenario que justificariaAplicavel a nos?
LVM thickDB transacional sensivel a latencia cauda (trading, telecom)Nao — workloads acadamicos toleram thin
ZFS_THINQuer dedup, checksums, snapshots avancadosNao — sync semantics do ZFS interagem mal com DRBD sync (workarounds existem mas LINBIT recomenda LVM_THIN); complexidade operacional adicional sem ganho claro pra nosso perfil
dm-cache / bcacheMix HDD + NVMe pra reduzir custo $/TiBNao hoje — parque so NVMe/SSD. Reconsiderar se entrar HDD pra archive
SPDKLatencia sub-microssegundo userspaceOverkill — academico nao precisa
EXOS / EBS / OPENFLEXStorage array gerenciado externoNao — nao temos esse hardware

Veredito: LVM_THIN. Nao ha ganho real em trocar. Risco principal e o thin pool estourar — ja documentado em linstor-conceitos.md#over-provisioning-ratios.

LINSTOR cross-site SP↔Franca — 3 modos possiveis

Distancia: ~440 km. Link UNESP via RNP/IPÊ. RTT estimado 5-15ms (medir antes de dimensionar). Banda: provavel 1G compartilhado.

Modo A — Cluster LINSTOR unico cross-site (sync)

Nao funciona pra producao. Razoes:

  • DRBD Protocolo C (sync) exige RTT baixo. WAN 5-15ms vs LAN 0.05ms = writes 100-300x mais lentos.
  • Cada commit em DB transacional fica esperando ack remoto — latencia se acumula.
  • Quorum cross-site fragil — particao de WAN partiona o cluster (split-brain entre sites).
  • Corosync/Proxmox cluster nao foi desenhado pra WAN.

Veredito: descartar.

Modo B — 2 clusters LINSTOR + DRBD Proxy (async, comercial)

Funciona tecnicamente. Comercial.

DRBD Proxy e um daemon que:

  • Bufferiza writes localmente em RAM
  • Comprime + envia em batch via WAN
  • Opera em Protocolo A (async) — ack apos buffer local
  • Tolera glitches de rede sem disconnect

Resultado:

  • Cada site tem cluster proprio (HA local independente)
  • Resources selecionados sao replicados async pro outro site
  • RPO de minutos, RTO de minutos (failover assistido)

Custo: DRBD Proxy e parte do LINBIT SDS pago (subscricao anual por node). Nao e gratuito.

Veredito: descartar por custo. Reconsiderar se UNESP comprar subscricao LINBIT pra producao critica.

Modo C — 2 clusters LINSTOR + snapshot shipping (free)

Funciona, recomendado pra nos. Cada site e um cluster LINSTOR independente; snapshots sao enviados periodicamente pro outro:

SP cluster ─── snapshot ship (cron 6h) ──→ Franca cluster
(storage cold/DR)
Franca cluster ─── snapshot ship ──────────→ SP cluster

Como funciona (sintaxe validada no client v1.27):

Terminal window
# 1. Configurar remote no SP apontando pra Franca (URL HTTP do controller remoto)
linstor remote create linstor franca-cluster http://<ip-controller-franca>:3370
# 2. Criar schedule (full_cron e POSITIONAL, nao --full-cron)
linstor schedule create dr-franca "0 2 * * 0" \
-i "0 */6 * * *" \
-l 7 -r 14 \
--on-failure RETRY --max-retries 3
# 3. Aplicar ao resource group de VMs criticas
# Sintaxe: backup schedule enable <remote_name> <schedule_name> --rg <rg>
linstor backup schedule enable franca-cluster dr-franca --rg sp-ssd-replicated

Caracteristicas:

  • RPO: definido pelo cron (6h, 24h, etc.)
  • RTO: tempo pra importar snapshot + subir VM (~minutos a horas)
  • Custo: zero (feature open-source LINSTOR)
  • Banda: incremental + compressao — transfere so delta
  • Robustez: tolera glitches WAN — snapshot e atomico, retry trivial
  • Nao exige link sempre-on

Limites:

  • Nao e RPO 0 — janela de perda igual ao intervalo
  • Restore exige passos manuais (importar, criar resource, anexar a VM)
  • Nao testa automaticamente — precisa drill periodico

Veredito: implementar este modo pra DR de VMs criticas (CPPS, gateway, OpenEdX).

Comparacao das 3 opcoes

OpcaoRPORTOCustoQuando
A Sync cross-site0imediatoinviavel tecnicamentenunca
B DRBD Proxy asyncminutosminutos$$$ subscricaoproducao critica + budget
C Snapshot shippinghorashoras$0nosso caso

Outras tecnologias — onde se encaixam

Categorizando alternativas por funcao:

Block storage primario (substituir LINSTOR)

TecnologiaProsContrasQuando trocariamos
CephMadurissimo, S3+block+FS, scale a PB, erasure codingComplexidade alta, RAM/CPU pesado, latencia maiorCluster passar de ~5 nodes E equipe se tornar familiar com Ceph
GlusterFSSimples, scale-outPerformance inferior, suporte Red Hat reduzidoNao consideraria mais
OpenEBS / LonghornK8s-nativeSo pra K8s, nao serve VMs ProxmoxSo se migrar tudo pra K8s
MooseFS / LizardFS / SeaweedFSSimples, nicheAdocao baixa, ecossistema pequenoNicho, nao recomendo
PVE Storage Replication (ZFS-based)Built-in PVE, simples (zfs send/receive)Async only, sem HA real, RPO ~1minSubstituiria LINSTOR se simplicidade > HA online

Realidade: LINSTOR cobre block storage HA pra VMs muito bem no nosso tamanho. Ceph seria a unica substituicao “completa” e so compensa em escala bem maior (10+ nodes, multi-PB).

Backup (camada 3 do 3-2-1)

TecnologiaProsContrasRecomendacao
Proxmox Backup Server (PBS)Native PVE, dedup, incremental forever, restore granular, sync entre PBSMais um servico pra operarPadrao recomendado — adotar
vzdump + S3Simples, sem servico extraSem dedup, restore lento, full a cada vezAceitavel pra escala pequena
Borg/Restic + S3Dedup, encryption, off-sitePra arquivos, nao block VMsComplementa PBS pra dados nao-VM
Velero (K8s)K8s-nativeSo K8sNao se aplica

Object storage (S3-compativel)

TecnologiaProsContrasQuando
MinIO localS3 puro, simples, performante, single binaryMais um servicoDatasets pesquisa, NextCloud, backup PBS off-site
Ceph RGWJunto com Ceph blockSo se ja tem CephNao recomendaria implantar Ceph so por isto
AWS S3 / Wasabi / Backblaze B2Off-site real, sem operacaoCusto recorrente, bandaBackup imutavel cross-region (compliance)
SeaweedFSObject + filer leveMaturidade menorLab, evitar em producao

Filesystem distribuido (NFS/POSIX)

TecnologiaProsContrasQuando
NFS classicoUniversal, simplesSingle-server, nao HA por padraoShares pequenos entre VMs
CephFSPOSIX HA, scaleRequer Ceph clusterSo se ja tem Ceph
GlusterFSScale-out POSIXSuporte reduzidoNao recomendo novos deploys
JuiceFSPOSIX sobre object storageLatencia metadataLab, casos especificos

Network/CNI (nao e storage)

Cilium e CNI Kubernetes (eBPF-based). Resolve conectividade entre pods, nao storage. Confusao comum porque tem features de mesh.

Feature CiliumResolve o queSubstitui LINSTOR?
ClusterMeshInterconectar clusters K8s, replicar servicesNao — services, nao volumes
HubbleObservability de redeNao — diagnostico, nao storage
Service MeshmTLS, policies entre appsNao — rede

Cross-site networking (separado de storage) usaria: WireGuard / IPSec / OpenVPN site-to-site, ou link MPLS dedicado da RNP. Independente da decisao de storage.

Arquitetura recomendada

Stack alvo pra SP + Franca:

SITE SP SITE FRANCA
───────────────────────── ─────────────────────────
LINSTOR cluster SSD (atual) LINSTOR cluster NVMe (apos reset)
pve-ippri-11/12/31 COMBINED pve-labri-21/22/31[/33] COMBINED
HA via VIP 10.10.10.1 HA via VIP 10.10.10.1 (sera criado)
rede 10G dedicada 10.10.10.0/24 rede 10G dedicada 10.10.10.0/24
PlaceCount 2 + TieBreaker PlaceCount 2 + TieBreaker
LVM_THIN (linstor_ssd/thinpool) LVM_THIN (linstor_franca/thinpool)
│ │
│ LINSTOR snapshot shipping │
│ (cron 6h-24h, incremental) │
│ ◄────────────────────────────────────► │
│ │
│ │
PBS (Proxmox Backup Server) PBS (Proxmox Backup Server)
VM dedicada com storage HDD VM dedicada com storage HDD
Backup diario de VMs criticas Backup diario de VMs criticas
│ │
│ PBS sync (nativo) │
│ ◄────────────────────────────────────► │
│ │
│ │
MinIO (opcional, pra datasets) MinIO (opcional, pra datasets)
Buckets: pesquisa, modelos-ml, Buckets: pesquisa, modelos-ml,
nextcloud-objstore, pbs-cold nextcloud-objstore, pbs-cold
│ │
└──── PBS pode dump em S3/MinIO ───────────┘
(camada 4 — backup imutavel
cross-site retencao longa)

O que isso entrega

Cenario de falhaProtege?Como
1 disco falhaDRBD replica no peer
1 node morreLINSTOR HA, VIP migra, VMs continuam
2 nodes morrem mesmo siteparcialI/O bloqueia ate 1 voltar (quorum). Sem perda de dados
Site SP inteiro caiSnapshot shipping em Franca → restaurar VMs criticas; PBS sync tem backup completo
Ransomware na infra ProxmoxPBS com --no-overwrite + retencao longa em MinIO/S3
Operador apaga VMPBS retem dump diario + LINSTOR snapshots locais
Bug que corrompe DBLINSTOR snapshots locais (rollback rapido) + PBS (granular)
rm -rf dentro da VMPBS restore do dia anterior

Custo de implementacao

ItemTrabalhoQuando
Reset LINSTOR Franca alinhado a SPmedio (1-2 dias)em andamento (feat/renumeracao-sp)
Configurar VIP HA controller Francabaixo (horas)parte do reset
Criar resource groups + anti-afinidade Francabaixoparte do reset
Subir PBS em SP e Francamedio (1 dia cada)apos reset
Configurar snapshot shipping LINSTOR cross-sitebaixo (horas)apos PBS
Configurar PBS sync cross-sitebaixoapos PBS
MinIO local (opcional)baixoquando precisar
Drill de DR (testar restore)medio (1 dia)trimestral

Total: ~1 semana de trabalho pra estado-alvo, distribuido em fases.

Decisoes pendentes (a confirmar)

  1. Numero de nodes COMBINED em Franca: 3 (.21, .22, .31) ou 4 (incluir .33)?
    • 3 = aguenta 1 falha, paridade com SP
    • 4 = aguenta 1 falha por volume, mas controller-DB pode ir a PlaceCount 3 (aguenta 2 falhas no controle)
  2. Esquema de IPs LINSTOR Franca: padronizar 10.10.10.{node-id} (alinhar com SP) ou manter atual (.5/.6/.7)?
  3. Onde vai morar o PBS em cada site? VM dedicada num node especifico? Hardware separado?
  4. MinIO: implantar agora ou adiar ate primeiro use case (NextCloud ou similar)?
  5. Encriptacao LUKS: aplicar em algum pool especifico (dados pesquisa LGPD)?
  6. DR drill cadence: trimestral, semestral?

Referencias