Replicação contínua entre clusters PodHeitor. Replica jobs cross-site em tempo real, com filtro de pool, transformação de cliente, e dedup global compartilhado entre origem e destino.
- Replicação contínua entre Storage Daemons — RPO em minutos.
- Transformação cross-site — renomeio de Storage, Pool e Client no destino, automático.
- Dedup compartilhada — só envia chunks novos, banda mínima.
- Bandwidth throttling adaptativo — não compete com produção, recupera capacidade quando ociosa.
- Verify automático no destino — checksums per-chunk garantem integridade end-to-end.
Comece em 30 dias, no mínimo 50% mais barato. Trial gratuito, RPMs e DEBs assinados, suporte direto com Heitor Faria. Substitua sua licença Veeam, Commvault ou Bacula Enterprise sem quebrar a janela noturna.
Solicitar trial gratuito de 30 dias →
Sumário
- Resumo Executivo
- Descrição do Problema
- Visão Geral da Solução
- Arquitetura
- Casos de Uso
- Instalação
- Referência de Configuração
- Dimensionamento e Requisitos
- Matriz de Compatibilidade
- Opções de Backup e Restauração
- Exemplos de Configuração
- Procedimentos Operacionais
- Segurança
- Conformidade e Relatórios
- Considerações de Desempenho
- Resolução de Problemas
- Evidências Validadas
- Roadmap
- Informações Comerciais
1. Resumo Executivo
PodHeitor BRC (Backup, Replication and Conversion) é um plugin comercial para o PodHeitor Backup Edition que transforma o Storage Daemon em um motor de replicação de arquivos em tempo real. Ao interceptar os fluxos de dados de backup no nível do SD, o BRC replica os arquivos para um sistema de arquivos de destino enquanto o backup está sendo realizado — entregando disponibilidade imediata dos arquivos sem a latência de uma restauração tradicional do Bacula.
Principais Benefícios
| Benefício | Impacto |
|---|---|
| Recuperação instantânea de arquivos | Acesse os arquivos replicados diretamente — sem necessidade de fluxo de restauração |
| Redução do RTO | Recuperação em minutos em vez de horas |
| Integração nativa com o Bacula | Aproveita a infraestrutura de backup existente — sem agentes adicionais |
| Automação de conformidade | Relatórios de RPO/RTO para auditoria e governança |
| Fidelidade de metadados | Preservação completa de ACLs, xattrs, arquivos esparsos, proprietário e timestamps |
| Recursos empresariais | Criptografia, grupos de consistência, multi-site, failover, snapshots |
Como Funciona
- Um job de backup padrão do Bacula é executado (Full, Incremental ou Differential)
- O File Daemon envia os dados dos arquivos ao Storage Daemon normalmente
- O plugin PodHeitor BRC intercepta o fluxo de dados no SD
- Os arquivos são gravados em tempo real no destino de réplica configurado
- O backup é concluído normalmente — os arquivos ficam disponíveis tanto no volume do Bacula quanto no caminho da réplica
Resultado: uma cópia de DR aquecida, sempre sincronizada com o último backup e acessível como arquivos regulares no sistema de arquivos.
2. Descrição do Problema
Os fluxos de restauração tradicionais do Bacula exigem:
- Identificar o conjunto de backup correto
- Iniciar um job de restauração via bconsole ou Bacularis
- Aguardar a leitura dos dados nos volumes de armazenamento
- Gravar os arquivos no local de destino
Para grandes volumes de dados, esse processo pode levar horas para ser concluído. Em cenários de recuperação de desastres, cada minuto de indisponibilidade impacta diretamente as operações do negócio.
Desafios Operacionais
- RTO elevado: tempo de restauração proporcional ao tamanho do conjunto de dados
- Intervenção manual: a restauração requer ação do operador
- Sem acesso imediato: arquivos indisponíveis até a conclusão da restauração
- Validação de DR: difícil verificar a recuperabilidade sem realizar uma restauração de fato
- Carga de conformidade: comprovar a aderência ao RPO/RTO requer evidências manuais
O PodHeitor BRC resolve todos esses desafios mantendo uma réplica continuamente sincronizada e sempre pronta para uso.
3. Visão Geral da Solução
Três Pilares
B — Orquestração de Backup
O plugin opera de forma transparente dentro do fluxo de backup existente do Bacula. Suporta todos os três níveis de backup (Full, Incremental, Differential) e mantém fidelidade total de metadados, incluindo ACLs POSIX, atributos estendidos, otimização de arquivos esparsos e proprietário/permissões/timestamps precisos.
Um recurso diferencial é o modo FIFO, que elimina a sobrecarga de I/O local fazendo o backend ler os blocos de volume do Bacula diretamente de um named pipe. Isso significa que o Storage Daemon não grava em um volume tradicional — o plugin processa o fluxo de dados em voo.
R — Replicação
Dois modos de replicação estão disponíveis:
- Mirror: mantém uma cópia 1:1 da origem. Em backups Full, arquivos órfãos (presentes na réplica, mas excluídos da origem) são removidos automaticamente.
- Retention: mantém cópias versionadas dos arquivos, permitindo recuperação a um ponto no tempo a partir da própria réplica.
Recursos avançados de replicação incluem:
- BLAKE3 skip-unchanged: compara hashes do conteúdo dos arquivos para evitar gravações redundantes
- Multi-site fan-out: replica para múltiplos destinos simultaneamente com limites de bandwidth por destino
- Throttling de bandwidth: limites de taxa de transferência configuráveis
- Grupos de consistência: coordena a replicação entre múltiplos jobs relacionados
- Automação de failover: hooks de verificação de saúde, promoção e rebaixamento para alternância automática de DR
- Integração com snapshots: criação de snapshots pré-replicação no LVM, ZFS ou Btrfs
C — Conversão e Normalização
O plugin processa o fluxo de dados do Bacula, tratando:
- Descompressão: fluxos comprimidos com zlib e LZ4 são descomprimidos de forma transparente
- Criptografia em repouso: criptografia AES-256-GCM opcional para os arquivos replicados
- Relatórios de conformidade: relatórios automatizados de RPO/RTO nos formatos JSONL, JSON e Markdown
4. Arquitetura
Diagrama de Componentes
┌────────────────────────────────────────────────────────────────────┐
│ BACULA INFRASTRUCTURE │
│ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ File │───▶│ Storage │───▶│ Rust cdylib │ │
│ │ Daemon │ │ Daemon │ │ (.so / SD v13) │ │
│ └──────────┘ └──────────────┘ └────────┬─────────┘ │
│ │ canal / FIFO │
└────────────────────────────────────────────────┼──────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────────┐
│ PODHEITOR BRC BACKEND (Rust) │
│ │
│ ┌──────────┐ ┌───────────┐ ┌───────────┐ ┌──────────────┐ │
│ │ Record │─▶│ Pipeline │─▶│ Policy │─▶│ File Writer │ │
│ │ Parser │ │ (decomp/ │ │ (mirror/ │ │ (Linux/Win) │ │
│ │ │ │ decrypt) │ │ retention)│ │ │ │
│ └──────────┘ └───────────┘ └───────────┘ └──────┬───────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────┐│ │
│ │ Cross-cutting: Checksum · Manifest · Logging ││ │
│ │ Throttle · Consistency · Failover · Snapshot ││ │
│ │ RPO/RTO Reporting · Dashboard ││ │
│ └──────────────────────────────────────────────────┘│ │
└──────────────────────────────────────────────────────┼────────────┘
│
▼
┌──────────────────┐
│ REPLICA TARGET │
│ FILESYSTEM │
│ (ext4/XFS/ │
│ Btrfs/NFS) │
└──────────────────┘
Stack Tecnológica
| Componente | Tecnologia | Finalidade |
|---|---|---|
| Plugin SD (cdylib) | Rust (edição 2021) — ABI SD Plugin API v13 em clean-room | Integração com SD, canal de comunicação interno, gerenciamento de pipe FIFO |
| Backend | Rust (edição 2021) | Análise de registros, processamento de fluxo, gravação de arquivos |
| Criptografia | AES-256-GCM (autenticada) | Criptografia em repouso |
| Hashing | BLAKE3 | Skip-unchanged por endereçamento de conteúdo, verificação de integridade |
| Compressão | zlib / LZ4 | Descompressão de fluxo |
| Serialização | JSON | Relatórios RPO/RTO, status do dashboard, manifesto |
Protocolo de Comunicação Interno
O plugin e o backend se comunicam via canal binário interno:
| Fase | Direção | Conteúdo |
|---|---|---|
| 1 — Hello | cdylib → Backend | Versão do protocolo, identificação do plugin |
| 2 — Job Info | cdylib → Backend | Nome do job, ID, tipo, nível, timestamp de referência |
| 3 — Params | cdylib → Backend | Todos os parâmetros do plugin (key=value) |
| 4 — Start | cdylib → Backend | Comando ReplicaStart |
| 5 — Data | cdylib → Backend | Fluxo de registros do Bacula (atributos de arquivo + dados) |
| 6 — End | cdylib → Backend | Sinal de fim de fluxo |
No modo FIFO, as fases de controle ocorrem via canal interno, mas os dados são lidos diretamente de um named pipe, contornando o canal de dados para maximizar o throughput.
Fluxo de Dados — Modo FIFO
┌──────────┐ ┌──────────┐ ┌───────────────┐
│ Bacula │─────▶│ Named │─────▶│ BRC Backend │
│ SD │ │ Pipe │ │ (volume │
│ (writes │ │ (FIFO) │ │ block reader)│
│ volume) │ └──────────┘ └───────┬───────┘
└──────────┘ │
▼
┌──────────────────┐
│ Replica Target │
└──────────────────┘
5. Casos de Uso
5.1 Site de DR Aquecido
Cenário: Uma organização precisa manter uma cópia de DR aquecida de servidores de arquivos críticos.
Solução: Configure o PodHeitor BRC em modo mirror apontando para um sistema de arquivos de DR (montagem local ou NFS). Cada backup sincroniza a réplica automaticamente. Em caso de desastre, os arquivos ficam imediatamente acessíveis.
target_base=/mnt/dr_site/replicas
mode=mirror
delete_removed=yes
skip_unchanged=yes
5.2 Recuperação Instantânea de Arquivos Near-line
Cenário: Usuários solicitam frequentemente restaurações individuais de arquivos, e o processo tradicional de restauração do Bacula é demorado.
Solução: Use o BRC para manter uma réplica atualizada. Quando um usuário precisar de um arquivo, basta copiá-lo do caminho da réplica — sem necessidade de um job de restauração do Bacula.
target_base=/mnt/fast_recovery
mode=mirror
verify_after=yes
5.3 Atualização de Dados para Desenvolvimento/Teste
Cenário: As equipes de desenvolvimento precisam de cópias atualizadas regularmente dos dados de produção.
Solução: Aponte o BRC para um sistema de arquivos acessível pelo time de desenvolvimento. Após cada ciclo de backup, os ambientes de dev/teste terão dados atuais automaticamente.
target_base=/mnt/dev_data
mode=mirror
bandwidth_limit=50M
exclude_patterns=*.log,*.tmp,*.pid
5.4 Evidências de Conformidade e Auditoria
Cenário: Requisitos regulatórios exigem comprovação de conformidade com RPO/RTO.
Solução: Ative o relatório de conformidade do BRC. Cada job gera arquivos de evidência com timestamp nos formatos JSONL, JSON e Markdown.
target_base=/mnt/compliant_replica
rpo_report_dir=/var/lib/podheitor/compliance
sla_rpo_secs=14400
sla_rto_secs=3600
5.5 Replicação Multi-site
Cenário: Dados críticos precisam ser replicados tanto para um SSD local rápido quanto para um local de DR remoto.
Solução: Use o fan-out multi-site com limites de bandwidth por destino.
target_base=/mnt/primary_replica
targets=/mnt/fast_ssd;/mnt/remote_dr:bwlimit=10M
5.6 Replicação Criptografada para Dados Sensíveis
Cenário: Os arquivos replicados contêm dados sensíveis que exigem criptografia em repouso.
Solução: Ative a criptografia AES-256-GCM.
target_base=/mnt/secure_replica
encrypt_key=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
6. Instalação
6.1 Pré-requisitos
- PodHeitor Backup Edition 11.x, 14.x ou 15.x instalado e em execução
- Storage Daemon em uma distribuição Linux suportada
- Sistema de arquivos de destino da réplica montado e com permissão de escrita
- Para modo FIFO:
Device Type = Fifoconfigurado no SD
6.2 Instalação via RPM (RHEL/Rocky/OEL 8-9)
# Install the package
sudo rpm -Uvh podheitor-replica-sd-2.0.0-1.el9.x86_64.rpm
# Verify installation
ls -la /opt/bacula/lib/bacula/plugins/podheitor-replica-sd.so
ls -la /opt/bacula/lib/bacula/plugins/podheitor-replica-sd-backend
# Create configuration
sudo cat > /opt/bacula/etc/podheitor-replica-sd.conf << 'EOF'
target_base=/mnt/replica_dest
mode=mirror
delete_removed=yes
log_level=info
EOF
# Set permissions
sudo chown bacula:bacula /opt/bacula/etc/podheitor-replica-sd.conf
sudo chmod 640 /opt/bacula/etc/podheitor-replica-sd.conf
# Restart Storage Daemon
sudo systemctl restart bacula-sd
# Verify plugin is loaded
sudo journalctl -u bacula-sd -n 20 | grep -i podheitor
6.3 Instalação via DEB (Debian 11-12 / Ubuntu 22.04+)
# Install the package
sudo dpkg -i podheitor-replica-sd_2.0.0_amd64.deb
# Create configuration (same as RPM)
sudo cat > /opt/bacula/etc/podheitor-replica-sd.conf << 'EOF'
target_base=/mnt/replica_dest
mode=mirror
delete_removed=yes
log_level=info
EOF
# Set permissions
sudo chown bacula:bacula /opt/bacula/etc/podheitor-replica-sd.conf
sudo chmod 640 /opt/bacula/etc/podheitor-replica-sd.conf
# Restart Storage Daemon
sudo systemctl restart bacula-sd
6.4 Verificação Pós-instalação
# Check the plugin loads
echo "status storage=MySD" | bconsole | grep -i plugin
# Run a test backup
echo "run job=TestBackup yes" | bconsole
# Verify replicated files
ls -la /mnt/replica_dest/
7. Referência de Configuração
7.1 Arquivo de Configuração
O plugin lê os parâmetros de /opt/bacula/etc/podheitor-replica-sd.conf e da diretiva Plugin= do Bacula no recurso Storage.
Formato do arquivo de configuração: um key=value por linha. Linhas iniciadas com # são comentários.
# PodHeitor BRC Configuration
# /opt/bacula/etc/podheitor-replica-sd.conf
target_base=/mnt/replica_dest
mode=mirror
delete_removed=yes
skip_unchanged=yes
bandwidth_limit=100M
log_level=info
7.2 Tabela Completa de Parâmetros — Replicação
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
target_base |
(obrigatório) | caminho | Caminho de destino para os arquivos replicados |
mode |
mirror |
enum | Modo de replicação: mirror (cópia 1:1) ou retention (versionado) |
delete_removed |
yes |
bool | Remove arquivos órfãos no backup Full (apenas modo mirror) |
skip_unchanged |
no |
bool | Ignora arquivos cujo hash BLAKE3 corresponde à réplica existente |
preserve_acl |
yes |
bool | Preserva as Listas de Controle de Acesso POSIX |
preserve_xattr |
yes |
bool | Preserva atributos estendidos |
preserve_sparse |
yes |
bool | Preserva buracos de arquivos esparsos (seek-based) |
bandwidth_limit |
0 |
tamanho | Limite de taxa de transferência. 0 = ilimitado. Suporta sufixos K/KB, M/MB, G/GB |
exclude_patterns |
(vazio) | csv | Padrões glob separados por vírgula a excluir da replicação |
log_level |
info |
enum | Verbosidade do log: debug, info, warn, error |
verify_after |
no |
bool | Executa verificação de integridade BLAKE3 após a conclusão da replicação |
delta_enabled |
no |
bool | Habilita transferência delta em nível de bloco para arquivos grandes |
7.3 Tabela Completa de Parâmetros — Modo FIFO
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
fifo_path |
(vazio) | caminho | Caminho do named pipe para leitura direta de volume. Requer Device Type = Fifo no SD do Bacula |
archive_device |
(alias) | caminho | Alias para fifo_path — lido automaticamente da configuração do SD |
fifo_mode |
no |
bool | Habilita o modo FIFO na porta de ativação do cdylib |
7.4 Tabela Completa de Parâmetros — Retention
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
retention_versions |
0 |
int | Número de versões históricas de arquivos a manter. Defina > 0 com mode=retention |
7.5 Tabela Completa de Parâmetros — Multi-site
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
targets |
(vazio) | string | Destinos adicionais separados por ponto-e-vírgula. Formato: /caminho ou /caminho:bwlimit=10M |
7.6 Tabela Completa de Parâmetros — Snapshot
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
snapshot_backend |
none |
enum | Backend de snapshot pré-replicação: none, lvm, zfs, btrfs |
7.7 Tabela Completa de Parâmetros — Consistência e Failover
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
consistency_group |
(vazio) | string | Nome do grupo para replicação coordenada de múltiplos jobs |
healthcheck_cmd |
(vazio) | string | Comando externo de verificação de saúde. Saída 0 = saudável |
promote_cmd |
(vazio) | string | Comando para promover a réplica ao papel primário |
demote_cmd |
(vazio) | string | Comando para rebaixar o papel primário |
7.8 Tabela Completa de Parâmetros — Criptografia
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
encrypt_key |
(vazio) | hex | Chave de criptografia AES-256-GCM como string hexadecimal de 64 caracteres |
7.9 Tabela Completa de Parâmetros — Conformidade
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
rpo_report_dir |
(vazio) | caminho | Diretório para relatórios de conformidade RPO/RTO. Vazio = /var/lib/podheitor/rpo |
sla_rpo_secs |
14400 |
int | Limiar de RPO do SLA em segundos (padrão: 4 horas) |
sla_rto_secs |
3600 |
int | Limiar de RTO do SLA em segundos (padrão: 1 hora) |
7.10 Tabela Completa de Parâmetros — Dashboard e Filtro de Job
| Parâmetro | Padrão | Tipo | Descrição |
|---|---|---|---|
dashboard_enabled |
no |
bool | Gera status JSON do dashboard compatível com Bacularis |
job_filter |
(vazio) | string | Prefixo do nome do job — o plugin ativa somente para jobs correspondentes (porta cdylib) |
Valores Booleanos
Parâmetros booleanos aceitam os seguintes valores:
- Verdadeiro:
yes,true,1,on - Falso:
no,false,0,off(ou qualquer outro valor)
8. Dimensionamento e Requisitos
8.1 Host do Storage Daemon
| Recurso | Mínimo | Recomendado | Notas |
|---|---|---|---|
| CPU | 4 vCPU | 8 vCPU | Mais núcleos para cargas de trabalho com criptografia/BLAKE3 |
| RAM | 8 GB | 16 GB | Adicional para operações com arquivos grandes e delta |
| Disco de SO/log | 40 GB | 60 GB | Inclui espaço de log e relatórios de conformidade |
| Disco da réplica | Volume de origem + 20% | Volume de origem + 50% | No modo retention: multiplique por retention_versions |
| Rede | 1 Gbps | 10 Gbps | Crítico para grandes volumes de dados com multi-site |
8.2 Fórmula de Dimensionamento de Disco
Disco da réplica (mirror) = Tamanho dos dados de origem × 1,2
Disco da réplica (retention) = Tamanho dos dados de origem × retention_versions × 1,1
Relatórios de conformidade = ~50 KB por job por execução
8.3 Dimensionamento de Rede
| Cenário | Taxa de Variação Diária | Rede Recomendada |
|---|---|---|
| Pequeno (< 100 GB de origem) | 5-10% | 1 Gbps |
| Médio (100 GB – 1 TB) | 5-10% | 1 Gbps |
| Grande (1 TB – 10 TB) | 2-5% | 10 Gbps |
| Muito Grande (> 10 TB) | 1-2% | 10 Gbps + throttling |
9. Matriz de Compatibilidade
9.1 Versões do Bacula
| Versão do Bacula CE | Plugin API | Status |
|---|---|---|
| 15.0.x | v13 | Validado |
| 14.0.x | v13 | Suportado |
| 11.0.x | v13 | Suportado |
9.2 Sistemas Operacionais
| Distribuição | Versões | Formato do Pacote | Status |
|---|---|---|---|
| RHEL | 8, 9 | RPM | Validado |
| Rocky Linux | 8, 9 | RPM | Validado |
| Oracle Linux | 8, 9 | RPM | Validado |
| Debian | 11, 12 | DEB | Suportado |
| Ubuntu | 22.04, 24.04 | DEB | Suportado |
9.3 Sistemas de Arquivos
| Sistema de Arquivos | ACL | xattr | Esparso | Snapshot | Status |
|---|---|---|---|---|---|
| ext4 | Sim | Sim | Sim | Não | Validado |
| XFS | Sim | Sim | Sim | Não | Suportado |
| Btrfs | Sim | Sim | Sim | Sim (nativo) | Suportado |
| ZFS | Sim | Sim | Sim | Sim (nativo) | Suportado |
| NFS v4 | Parcial | Parcial | Não | Não | Suportado (destino remoto) |
10. Opções de Backup e Restauração
10.1 Suporte a Níveis de Backup
| Nível | Comportamento | Efeito de delete_removed |
|---|---|---|
| Full (F) | Replica todos os arquivos do conjunto de backup | Remove arquivos órfãos da réplica |
| Incremental (I) | Replica somente os arquivos alterados desde o último backup | Sem remoção de órfãos |
| Differential (D) | Replica os arquivos alterados desde o último Full | Sem remoção de órfãos |
10.2 Modos de Replicação
| Modo | delete_removed |
Tratamento de Arquivos | Ideal Para |
|---|---|---|---|
| mirror | yes | Cópia 1:1, órfãos removidos no Full | DR, recuperação instantânea |
| mirror | no | Cópia 1:1, órfãos preservados | Replicação conservadora |
| retention | N/A | Cópias versionadas (até retention_versions) |
Recuperação a ponto no tempo |
10.3 Procedimentos de Recuperação
Acesso Direto a Arquivos (Sem Necessidade de Restauração)
# Files are already available at the replica target
cp /mnt/replica_dest/path/to/needed/file /restore/location/
# Or create a symlink for applications
ln -s /mnt/replica_dest/app/data /app/data
Restauração Tradicional do Bacula (Ainda Suportada)
O plugin não interfere nas operações normais de restauração do Bacula. Todos os procedimentos padrão de restauração continuam funcionando de forma independente.
*restore
Select job=TestBackup
...
10.4 Procedimento de Recuperação Instantânea
- Verifique a integridade da réplica: confira o manifesto e execute a verificação se configurado
- Monte/exponha o caminho da réplica para a aplicação
- Inicie os serviços apontando para o local da réplica
- (Opcional) Execute a restauração do Bacula em segundo plano para reconstruir o armazenamento primário
11. Exemplos de Configuração
11.1 Replicação Mirror Básica
Cenário: Réplica 1:1 simples para recuperação instantânea de arquivos.
Arquivo de configuração (/opt/bacula/etc/podheitor-replica-sd.conf):
target_base=/mnt/replica_dest
mode=mirror
delete_removed=yes
log_level=info
Recurso Device do Bacula SD:
Device {
Name = FileStorage
Media Type = File1
Archive Device = /mnt/bacula/volumes
LabelMedia = yes
Random Access = yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
}
11.2 Modo FIFO (Replicação sem Volume)
Cenário: Eliminar o I/O de volume local — os dados fluem diretamente para a réplica.
Arquivo de configuração:
target_base=/mnt/replica_dest
mode=mirror
fifo_path=/tmp/podheitor_fifo
job_filter=Replicate-
log_level=info
Recurso Device do Bacula SD:
Device {
Name = ReplicaFIFO
Media Type = FIFO
Device Type = Fifo
Archive Device = /tmp/podheitor_fifo
LabelMedia = yes
Random Access = no
AutomaticMount = no
RemovableMedia = no
AlwaysOpen = no
MaximumOpenWait = 60
}
Recurso FileSet do Bacula:
FileSet {
Name = "ReplicaFileSet"
Include {
Options {
Signature = SHA256
Compression = LZ4
AclSupport = yes
XattrSupport = yes
}
File = /etc
File = /home
File = /var/www
}
Exclude {
File = /etc/shadow
File = *.tmp
}
}
Recurso Job do Bacula:
Job {
Name = "Replicate-DailyFiles"
Type = Backup
Client = server-fd
FileSet = "ReplicaFileSet"
Storage = SD-Replica
Pool = ReplicaPool
Schedule = "DailySchedule"
Messages = Standard
Priority = 10
}
11.3 Modo Retention com Versionamento
Cenário: Manter 5 versões de cada arquivo para recuperação a ponto no tempo.
Arquivo de configuração:
target_base=/mnt/versioned_replica
mode=retention
retention_versions=5
skip_unchanged=yes
log_level=info
11.4 Fan-out Multi-site com Limites de Bandwidth
Cenário: Replicar para SSD local rápido e DR remoto com throttling.
Arquivo de configuração:
target_base=/mnt/fast_local
targets=/mnt/fast_local;/mnt/remote_dr:bwlimit=10M
mode=mirror
skip_unchanged=yes
bandwidth_limit=100M
11.5 Enterprise: Criptografia + Conformidade + Failover
Cenário: Ambiente regulado que exige réplicas criptografadas, evidências de conformidade e failover automatizado.
Arquivo de configuração:
target_base=/mnt/secure_replica
mode=mirror
delete_removed=yes
skip_unchanged=yes
# Encryption (AES-256-GCM)
encrypt_key=a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
# Compliance reporting
rpo_report_dir=/var/lib/podheitor/compliance
sla_rpo_secs=14400
sla_rto_secs=3600
# Consistency group
consistency_group=critical-data
# Failover automation
healthcheck_cmd=/opt/scripts/check_primary.sh
promote_cmd=/opt/scripts/promote_replica.sh
demote_cmd=/opt/scripts/demote_primary.sh
# Snapshot before replication
snapshot_backend=lvm
# Post-replication integrity check
verify_after=yes
log_level=info
11.6 Configuração de Alto Desempenho
Cenário: Grande volume de dados (> 1 TB) com sobrecarga mínima.
Arquivo de configuração:
target_base=/mnt/fast_nvme/replica
mode=mirror
fifo_path=/tmp/podheitor_fifo
skip_unchanged=yes
delta_enabled=yes
bandwidth_limit=0
preserve_sparse=yes
log_level=warn
11.7 Exemplos de FileSet Orientados à Restauração
Servidor de arquivos geral:
FileSet {
Name = "FileServer-Full"
Include {
Options {
Signature = SHA256
Compression = LZ4
AclSupport = yes
XattrSupport = yes
OneFS = no
}
File = /srv/shares
File = /home
}
Exclude {
File = *.tmp
File = *.bak
File = /home/*/.cache
File = /home/*/Downloads
}
}
Arquivos de configuração de banco de dados (não os dados):
FileSet {
Name = "DB-ConfigFiles"
Include {
Options {
Signature = SHA256
Compression = GZIP
}
File = /etc/postgresql
File = /etc/mysql
File = /var/lib/pgsql/data/postgresql.conf
File = /var/lib/pgsql/data/pg_hba.conf
}
}
Aplicação web:
FileSet {
Name = "WebApp-Assets"
Include {
Options {
Signature = SHA256
Compression = LZ4
AclSupport = yes
XattrSupport = yes
}
File = /var/www
File = /etc/nginx
File = /etc/apache2
}
Exclude {
File = /var/www/*/node_modules
File = /var/www/*/.git
File = *.log
}
}
12. Procedimentos Operacionais
12.1 Iniciando um Job de Replicação
# Via bconsole
echo "run job=Replicate-DailyFiles level=Full yes" | bconsole
# Check status
echo "status dir" | bconsole
12.2 Monitorando a Replicação
# Check backend logs
tail -f /opt/bacula/working/podheitor-replica-sd-backend.log
# Check replicated files
find /mnt/replica_dest -newer /tmp/last_check -type f | wc -l
# Check compliance reports
ls -la /var/lib/podheitor/compliance/
cat /var/lib/podheitor/compliance/*latest*.md
12.3 Verificando a Integridade da Réplica
# If verify_after=yes (automatic)
grep "VERIFY" /opt/bacula/working/podheitor-replica-sd-backend.log
# Manual verification
diff -r /original/path /mnt/replica_dest/original/path
12.4 Procedimento de Failover
- Automático (se
healthcheck_cmdestiver configurado): o plugin executa a verificação de saúde após cada job. Se o primário estiver com problemas, opromote_cmdé executado automaticamente.
- Manual:
# Verify replica is current
stat /mnt/replica_dest/critical/data
# Promote replica
/opt/scripts/promote_replica.sh
# Update application configuration to point to replica
systemctl restart application
13. Segurança
13.1 Criptografia em Repouso
O PodHeitor BRC suporta criptografia AES-256-GCM para todos os arquivos replicados:
- Algoritmo: AES-256-GCM (criptografia autenticada)
- Formato da chave: string hexadecimal de 64 caracteres (chave de 256 bits)
- Implementação: AES-256-GCM com nonce único por arquivo
- Escopo: somente o conteúdo do arquivo (nomes de arquivos e estrutura de diretórios permanecem visíveis)
Gerenciamento de chaves:
- Armazene a chave no arquivo de configuração com permissões restritas (
chmod 640) - Arquivo de configuração de propriedade de
bacula:bacula - Nunca confirme chaves no controle de versão
- Faça a rotação das chaves atualizando a configuração e executando um novo backup Full
13.2 Permissões de Arquivos
# Plugin binaries
-rwxr-xr-x root:bacula /opt/bacula/lib/bacula/plugins/podheitor-replica-sd.so
-rwxr-xr-x root:bacula /opt/bacula/lib/bacula/plugins/podheitor-replica-sd-backend
# Configuration
-rw-r----- bacula:bacula /opt/bacula/etc/podheitor-replica-sd.conf
# Replica target
drwxr-xr-x bacula:bacula /mnt/replica_dest
13.3 Considerações de Rede
- O plugin opera inteiramente no host do Storage Daemon — sem comunicação de rede além do que o Bacula já utiliza
- Para destinos de réplica montados via NFS, garanta NFS v4 com Kerberos ou restrinja o acesso por IP
- Os relatórios de conformidade contêm metadados de jobs — restrinja o acesso ao diretório de relatórios
14. Conformidade e Relatórios
14.1 Relatórios de RPO/RTO
Quando rpo_report_dir está configurado, o plugin gera três formatos de relatório por job:
| Formato | Arquivo | Finalidade |
|---|---|---|
| JSONL | {job_name}_rpo.jsonl |
Log de eventos apenas para acréscimo para processamento automatizado |
| JSON | {job_name}_rpo_latest.json |
Snapshot do estado atual para dashboards |
| Markdown | {job_name}_rpo_report.md |
Relatório legível por humanos para auditores |
14.2 Conteúdo dos Relatórios
Cada relatório inclui:
- Nome, ID e horário de conclusão do job
- Nível do backup (Full/Incremental/Differential)
- Contagem de arquivos e total de bytes replicados
- Medição de RPO: tempo desde a última replicação bem-sucedida
- Estimativa de RTO: tempo de recuperação a partir da réplica
- Status de conformidade com o SLA (aprovado/reprovado em relação aos limiares configurados)
- Status de criptografia
14.3 Limiares de SLA
| Parâmetro | Padrão | Significado |
|---|---|---|
sla_rpo_secs |
14400 (4h) | Tempo máximo aceitável entre replicações |
sla_rto_secs |
3600 (1h) | Tempo máximo aceitável de recuperação |
Os relatórios indicam claramente APROVADO ou REPROVADO para cada SLA, tornando as revisões de auditoria diretas.
15. Considerações de Desempenho
15.1 Recursos de Otimização
| Recurso | Impacto | Quando Usar |
|---|---|---|
skip_unchanged |
Reduz gravações em 50-90% em cargas de trabalho incrementais | Sempre recomendado para grandes volumes de dados |
delta_enabled |
Reduz a transferência de arquivos grandes com pequenas alterações | Arquivos grandes (bancos de dados, VMs) |
bandwidth_limit |
Evita a saturação do armazenamento compartilhado | Infraestrutura compartilhada |
| Modo FIFO | Elimina o I/O duplo (gravação de volume + gravação da réplica) | Jobs de replicação dedicados |
preserve_sparse |
Mantém a eficiência de arquivos esparsos | Discos de VM, bancos de dados |
15.2 Dicas de Desempenho
- Use o modo FIFO para jobs de replicação dedicados — elimina a sobrecarga de I/O de volume
- Habilite
skip_unchanged— o hashing BLAKE3 é rápido (~5 GB/s) e evita gravações desnecessárias - Use compressão LZ4 no FileSet — mais rápida que GZIP com boa taxa de compressão
- Dimensione o disco da réplica para o padrão de I/O — SSDs recomendados para cargas de acesso aleatório
- Defina um
bandwidth_limitadequado ao compartilhar armazenamento com cargas de trabalho de produção - Use
log_level=warnem produção para reduzir o I/O de log
16. Resolução de Problemas
16.1 Problemas Comuns
| Sintoma | Causa | Solução |
|---|---|---|
| Plugin não carrega | .so ausente no diretório de plugins |
Verifique Plugin Directory na configuração do SD |
| Backend não encontrado | Binário não está no caminho esperado | Verifique /opt/bacula/lib/bacula/plugins/podheitor-replica-sd-backend |
| Permissão negada | Propriedade incorreta na configuração ou no destino | chown bacula:bacula na configuração e no destino |
| Timeout do FIFO | Named pipe não criado | Garanta Device Type = Fifo e que Archive Device corresponda a fifo_path |
| ACLs não preservadas | Sistema de arquivos montado sem ACL | Remonte com mount -o acl ou use acl em /etc/fstab |
| Alto uso de CPU | Hashing BLAKE3 em muitos arquivos | Comportamento esperado — desabilite skip_unchanged se inaceitável |
| Relatório RPO ausente | Diretório sem permissão de escrita | Verifique as permissões de rpo_report_dir |
16.2 Locais dos Logs
| Log | Caminho | Conteúdo |
|---|---|---|
| Log do backend | /opt/bacula/working/podheitor-replica-sd-backend.log |
Operações do plugin |
| Log do SD | /opt/bacula/log/bacula-sd.log |
Mensagens do shim (prefixadas com podheitor:) |
| Conformidade | {rpo_report_dir}/ |
Relatórios RPO/RTO |
16.3 Modo Debug
Habilitar log detalhado:
log_level=debug
Verificar a saída do backend:
tail -f /opt/bacula/working/podheitor-replica-sd-backend.log
17. Evidências Validadas
17.1 Ambiente de Laboratório
| Componente | Versão | Host |
|---|---|---|
| Bacula CE | 15.0.3 | 192.168.15.105 |
| SO | Oracle Linux 9 | 192.168.15.105 |
| Plugin | PodHeitor BRC 2.0.0 | 192.168.15.105 |
17.2 Resultados dos Testes
| Teste | ID do Job | Status | Detalhes |
|---|---|---|---|
| Reinstalação de RPM + reinício do serviço | — | OK | Instalação limpa, serviço ativo |
| Backup Full via FIFO | 786 | T (Terminado com Sucesso) | 3 arquivos, 648 bytes replicados |
| Geração de relatório de conformidade | 786 | OK | Relatórios JSONL/JSON/MD gerados |
17.3 Comandos de Verificação
# Verify package installation
rpm -qa | grep podheitor
# Verify service is running
systemctl status bacula-sd
# Check last job status
echo "list jobs last" | bconsole
# Verify replica files
ls -la /mnt/replica_dest/
18. Roadmap
| Recurso | Status | Meta |
|---|---|---|
| Replicação mirror | GA | v2.0.0 |
| Modo retention | GA | v2.0.0 |
| Modo FIFO | GA | v2.0.0 |
| ACL/xattr/esparso | GA | v2.0.0 |
| BLAKE3 skip-unchanged | GA | v2.0.0 |
| Criptografia AES-256-GCM | GA | v2.0.0 |
| Grupos de consistência | GA | v2.0.0 |
| Automação de failover | GA | v2.0.0 |
| Conformidade RPO/RTO | GA | v2.0.0 |
| Pacotes RPM/DEB | GA | v2.0.0 |
| Dashboard Bacularis | Planejado | v0.5.0 |
| Federação multi-SD | Planejado | v0.6.0 |
| Destinos em nuvem (S3/Azure/GCS) | Planejado | v0.7.0 |
| Conversão ciente de VM | Planejado | v0.8.0 |
| Suporte ao SD Windows | Backlog | — |
19. Informações Comerciais
Sobre
O PodHeitor BRC é desenvolvido e mantido por Heitor Faria, com profunda expertise no ecossistema Bacula, backup empresarial e soluções de recuperação de desastres.
Licenciamento
O PodHeitor BRC é distribuído sob licença comercial proprietária — por Storage Daemon. Cada contrato inclui licença de produção, acesso a atualizações da versão contratada e suporte técnico por e-mail.
Para organizações que migram de plataformas comerciais (Veeam, Commvault, NetBackup), oferecemos uma proposta comparativa com meta de pelo menos 50% de economia.
Serviços
| Serviço | Descrição |
|---|---|
| Licença enterprise | Licença de implantação em produção com atualizações |
| Suporte prioritário | Acesso direto ao desenvolvedor para resolução de problemas |
| Implementação | Instalação, configuração e ajuste fino para o seu ambiente |
| Consultoria em DR | Projetos personalizados de recuperação de desastres e arquitetura |
Pronto para avaliar?
Entre em contato para iniciar uma prova de conceito em seu ambiente:
- WhatsApp / Telefone: +1 786 726-1749
- E-mail: heitor@opentechs.lat
- Consultoria gratuita: https://podheitor.com/consultoria-gratis/
Copyright 2026 Heitor Faria — Todos os Direitos Reservados. PodHeitor BRC Plugin para PodHeitor Backup — Versão 2.0.0
Disponível em:
Português
English (Inglês)
Español (Espanhol)