O ZFS é um sistema de arquivos incrível e resolve muitas das minhas necessidades de armazenamento de dados locais e compartilhadas.
Embora eu goste da ideia de ZFS agrupado sempre que possível, às vezes não é prático, ou eu preciso de alguma separação geográfica de nós de armazenamento.
Um dos casos de uso que tenho é para armazenamento replicado de alto desempenho em servidores de aplicativos Linux. Por exemplo, eu suporte um produto de software legado que se beneficia de unidades SSD NVMe de baixa latência para seus dados. O aplicativo tem uma opção de espelhamento no nível do aplicativo que pode ser replicada para um servidor secundário, mas muitas vezes é imprecisa e é um RPO .
Eu resolvi esse problema tendo um servidor secundário (também executando o ZFS em hardware similar ou diferente) que pode ser local, remoto ou ambos. Combinando os três utilitários detalhados abaixo, criei uma solução de replicação que me fornece replicação contínua, retenção profunda de snapshots e opções flexíveis de failover.
zfs-auto-snapshot - link
Apenas uma ferramenta útil para habilitar instantâneos periódicos no nível do sistema de arquivos do ZFS. Normalmente corro com o seguinte cronograma em volumes de produção:
# /etc/cron.d/zfs-auto-snapshot
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
*/5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 //
00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 //
59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 //
59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 //
00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //
Syncoid (Sanoid) - link
Este programa pode executar snap / replicação ad-hoc de um sistema de arquivos ZFS para um destino secundário. Só uso a parte syncoid do produto.
Supondo que server1 e server2 , o comando simples seja executado de server2 para puxe os dados de server1 :
#!/bin/bash
/usr/local/bin/syncoid root@server1:vol1/data vol2/data
exit $?
Monit - link
Monit é um agendador de tarefas e gerenciador de execução extremamente flexível. Por padrão, ele funciona em um intervalo de 30 segundos, mas modifico a configuração para usar um ciclo de tempo de 15 segundos.
Um exemplo de configuração que executa o script de replicação acima a cada 15 segundos (1 ciclo)
check program storagesync with path /usr/local/bin/run_storagesync.sh
every 1 cycles
if status != 0 then alert
Isso é simples de automatizar e adicionar via gerenciamento de configuração. Ao envolver a execução do instantâneo / replicação no Monit, você obtém status centralizado, controle de tarefas e alertas (e-mail, SNMP, script personalizado).
O resultado é que tenho servidores que têm vários meses de snapshots mensais e muitos pontos de rollback e retenção em: link - Além disso, uma réplica atômica contínua de 15 segundos:
# monit status
Program 'storagesync'
status Status ok
monitoring status Monitored
last started Wed, 05 Apr 2017 05:37:59
last exit value 0
data collected Wed, 05 Apr 2017 05:37:59
.
.
.
Program 'storagesync'
status Status ok
monitoring status Monitored
last started Wed, 05 Apr 2017 05:38:59
last exit value 0
data collected Wed, 05 Apr 2017 05:38:59