Ceph RBD Snapshots: O Mito do Backup Simples e o Custo da Extração

      20 de dezembro de 2025 Thiago Moreira 8 min de leitura
      Ceph RBD Snapshots: O Mito do Backup Simples e o Custo da Extração

      Snapshots no Ceph são instantâneos, mas não são backups. Entenda a mecânica do RADOS, os perigos do `rbd export`, o custo de I/O e como garantir consistência real sem corromper bancos de dados.

      Compartilhar:

      No mundo do armazenamento distribuído, existe uma armadilha sedutora: a velocidade instantânea de um snapshot. Um administrador executa um comando, o prompt retorna em milissegundos e a sensação de segurança é imediata. "Está salvo", ele pensa. Como Arquiteto de Soluções, meu trabalho é ser o portador das más notícias: persistência local não é Disaster Recovery (DR).

      Se o seu cluster Ceph perder o quorum dos monitores ou sofrer uma corrupção catastrófica no pool de dados, seus snapshots morrem junto com os volumes originais. O snapshot reside no mesmo domínio de falha dos dados produtivos. Para transformar um snapshot em backup real, você precisa extraí-lo. E é na extração que a conta da performance chega.

      O que é um Ceph RBD Snapshot? Um snapshot RBD (RADOS Block Device) é uma imagem lógica read-only que preserva o estado de um volume em um ponto no tempo usando mecanismos de Copy-on-Write (CoW). Diferente de um backup, que é uma cópia independente e isolada em outro domínio de falha, o snapshot depende da integridade dos objetos originais no cluster RADOS para existir e ser restaurado.


      Anatomia do RADOS: O que acontece durante um Snapshot Ceph

      Para entender o custo, precisamos descer ao nível do objeto. O Ceph não "copia" o seu disco de 1TB quando você cria um snapshot. Se fizesse isso, o cluster pararia.

      O RBD divide sua imagem de bloco em objetos menores (geralmente 4MB) distribuídos pelo cluster via algoritmo CRUSH. Quando você emite um rbd snap create, o Ceph apenas atualiza os metadados do volume. Ele marca a versão atual dos objetos como "imutável" para aquele snapshot.

      Mecânica RADOS: O snapshot é apenas metadado até que uma gravação force a clonagem do objeto (CoW). Figura: Mecânica RADOS: O snapshot é apenas metadado até que uma gravação force a clonagem do objeto (CoW).

      O fenômeno real acontece depois, na escrita. O modelo é Copy-on-Write (CoW), mas, sendo purista, no Ceph ele age muitas vezes como um "Redirect-on-Write" lógico dependendo da implementação do backend (BlueStore).

      1. Leitura: Se você ler um dado que não mudou, o Ceph lê o objeto original. Custo zero.

      2. Escrita (O Custo): Quando a VM tenta sobrescrever um bloco que tem um snapshot ativo, o Ceph percebe que não pode tocar no objeto original. Ele clona o objeto original (preservando o estado antigo para o snapshot) e permite a escrita em uma nova versão do objeto.

      Isso significa que o snapshot é "grátis" na criação, mas cobra "juros" na primeira escrita subsequente (latência de clonagem) e no consumo de espaço ao longo do tempo.


      Consistência de Dados no Ceph: Crash vs. Application

      Um erro comum em arquiteturas de virtualização (Proxmox, OpenStack) sobre Ceph é confiar cegamente no snapshot do storage sem avisar o sistema operacional convidado (Guest OS).

      Se você tirar um snapshot do RBD enquanto um banco de dados (PostgreSQL, MySQL) está com páginas sujas na memória RAM (não comitadas no disco), você tem um Crash-Consistent Snapshot. É o equivalente digital a puxar o cabo de força do servidor. O banco de dados provavelmente vai se recuperar usando o WAL (Write Ahead Log) ao iniciar, mas não há garantias de integridade lógica da transação.

      Para ambientes de produção, exigimos Application-Consistent Snapshots. Isso requer orquestração.

      O Papel do QEMU Guest Agent

      Para garantir consistência, o hypervisor deve instruir a VM a fazer o quiesce (congelamento) do sistema de arquivos antes do snapshot do Ceph.

      # Exemplo do fluxo lógico (geralmente automatizado pelo orquestrador):
      
      # 1. Congelar I/O no Guest (via agente)
      virsh qemu-agent-command <vm-id> '{"execute":"guest-fsfreeze-freeze"}'
      
      # 2. Criar o Snapshot no Ceph (agora seguro)
      rbd snap create pool_vm/vm-100-disk-0@backup_consistente
      
      # 3. Descongelar I/O no Guest
      virsh qemu-agent-command <vm-id> '{"execute":"guest-fsfreeze-thaw"}'
      

      Sem o passo 1 e 3, seu backup é uma aposta, não uma estratégia.


      O Custo Oculto da Extração rbd export

      Aqui reside o principal trade-off de TCO e performance. Para ter um DR real, você precisa tirar os dados do cluster Ceph e levá-los para um armazenamento secundário (fita, S3, outro cluster Ceph, NAS).

      O comando rbd export é brutal. Ele lê todos os objetos alocados da imagem e os envia para a saída padrão (stdout).

      Se você tem um volume de 2TB com 1TB ocupado e roda um export completo toda noite:

      1. Você gera 1TB de leitura no seu cluster de produção (Read Amplification).

      2. Você satura a rede de backhaul ou public network do Ceph.

      3. Você aumenta a latência das VMs vizinhas devido à contenção de disco nos OSDs.

      Impacto na Rede: A diferença brutal de carga entre exportações completas e diferenciais no Ceph. Figura: Impacto na Rede: A diferença brutal de carga entre exportações completas e diferenciais no Ceph.

      A imagem acima ilustra o impacto na rede. O pico de tráfego durante um "Full Export" compete diretamente com o tráfego de latência sensível das aplicações. Em clusters com rede de 10Gbps não segregada, isso derruba aplicações.


      A Matemática do Diferencial: Usando rbd export-diff

      A solução para a escalabilidade do backup em Ceph é matemática: extrair apenas o delta. O comando rbd export-diff permite exportar apenas os blocos que mudaram entre dois snapshots ou desde a criação da imagem.

      Tabela Comparativa: Full Export vs. Export Diff

      Característica RBD Export (Full) RBD Export-Diff (Incremental)
      I/O no Cluster Lê todo o volume ocupado (Alto Impacto) Lê apenas objetos modificados (Baixo Impacto)
      Tempo de Janela Proporcional ao tamanho total dos dados Proporcional à taxa de mudança (Churn rate)
      Complexidade de Restore Simples (Arquivo único) Alta (Requer reidratação sequencial dos diffs)
      Uso de Rede Massivo Mínimo
      RTO (Recovery Time) Rápido Lento (se houver muitos diferenciais para aplicar)

      Estratégia de Implementação

      Para evitar a reidratação lenta no restore (ter que aplicar o Full + 30 diferenciais diários), a arquitetura recomendada geralmente é o "Synthetic Full" no destino ou o uso de rbd mirror para outro cluster, que faz a sincronização diferencial nativamente.

      Se for fazer script manual, o fluxo é:

      # 1. Exportar apenas o que mudou desde o snap de ontem
      rbd export-diff pool/imagem@hoje --from-snap ontem /mnt/backup/imagem_delta_hoje.diff
      
      # 2. No caso de restore, aplicar na ordem:
      # rbd import full_base.img
      # rbd import-diff delta_1.diff
      # rbd import-diff delta_2.diff
      

      Arquitetura de Retenção e Degradação de Performance

      Um erro clássico de operação é tratar o Ceph como uma máquina do tempo infinita, mantendo centenas de snapshots antigos "por segurança".

      Snapshots órfãos degradam a performance de leitura.

      Lembra-se da clonagem de objetos do RADOS? Se você tem uma cadeia longa de snapshots e o objeto foi modificado muitas vezes, o Ceph pode ter que percorrer metadados complexos para determinar qual versão do objeto é a correta para uma determinada leitura, ou gerenciar a fragmentação interna no BlueStore.

      Checklist de Saúde de Snapshots

      Ao desenhar sua política de retenção, considere:

      • Limite a profundidade: Evite manter mais de 7-14 snapshots ativos por imagem RBD se o volume tiver alta taxa de escrita (IOPS de escrita aleatória).

      • Flatten no Clone: Se você criar um clone a partir de um snapshot (ex: para ambiente de Dev/Test), execute o rbd flatten assim que possível. Isso quebra a dependência do snapshot original (pai) e evita penalidades de leitura cruzada.

      • Trim Automático: Implemente scripts que removem snapshots antigos após a confirmação do export para o backup externo.

      Veredito Técnico

      Snapshots Ceph são ferramentas operacionais excelentes para rollbacks rápidos (ex: antes de um yum update), mas são péssimos substitutos para backup. O arquiteto deve desenhar a solução considerando o custo da extração.

      Se o seu RPO (Recovery Point Objective) exige backups a cada hora, fazer rbd export completo é inviável. Você deve usar export-diff ou rbd mirroring. Se a performance de leitura do cluster começar a degradar misteriosamente, verifique a quantidade de snapshots antigos pendurados nos volumes.

      No armazenamento distribuído, não existe mágica, apenas gerenciamento eficiente de metadados e blocos.


      Referências & Leitura Complementar

      1. Ceph Documentation - RBD Snapshots: Detalhes oficiais sobre a implementação de camadas e clonagem de objetos.

      2. QEMU Guest Agent Protocol: Documentação sobre os comandos guest-fsfreeze para consistência de aplicação.

      3. Sage Weil et al. (2006): "Ceph: A Scalable, High-Performance Distributed File System" - O paper original que define o algoritmo CRUSH e a distribuição de objetos.

      4. RFC 3720 (iSCSI): Para comparação de mecanismos de snapshot em protocolos de bloco tradicionais vs. distribuídos.

      #Ceph Backup #RBD Snapshot #Disaster Recovery #Storage Performance #Ceph RBD Export
      Thiago Moreira

      Thiago Moreira

      High-Performance Computing Researcher

      Trabalha com supercomputadores. Para ele, velocidade é tudo, e redundância é problema do software.