Espelhamento de failover tmpfs. Eu estou fazendo a coisa certa?

1

Meu objetivo é ter um determinado diretório para estar disponível como tmpfs. Haverá algumas modificações durante o tempo de atividade do servidor neste diretório e essas modificações devem ser sincronizadas com o diretório persistente não-tmpfs no disco rígido através do rsync.

Após a inicialização do servidor, a versão mais recente do diretório persistente não-tmpfs deve ser movida para tmpfs e a sincronização rsync para ser iniciada.

Eu tenho medo que o rsync apague o backup não-tmpfs se o diretório tmpfs estiver vazio ..

Estou fazendo assim agora:

  1. crie a partição tmpfs em / etc / fstab
  2. cat /etc/rc.local (pseudocódigo)

    delete o cronjob "tmpfs rsync" do / var / spool / cron / crontabs se houver algum

    cp -r / caminho / para / não-tmpfs-backup / caminho / para / tmpfs / dir

    adicione / var / spool / cron / crontabs com o "tmpfs rsync" cronjob

O que você acha?

    
por user45286 17.07.2010 / 06:00

2 respostas

1

Crie algum tipo de arquivo semente no seu diretório não-tmpfs e apenas rsync de volta para não-tmpfs se ele existir (o que significa que a cópia "boot" funcionou), então algo como:

BOOT

mount /path/tmpfs
rsync -aq --delete /path/non-tmpfs/ /path/tmpfs/

CRON

if [ -f /path/tmpfs/some/deep/location/filesgood.txt ]; then
  rsync -aq --delete /path/tmpfs/ /path/non-tmpfs/
fi

Não é perfeito, mas, se você melhorar isso (procurando por 5 arquivos "cookie" durante o cron, se quiser em diretórios diferentes, por exemplo), ele deve ser bastante seguro.

    
por 17.07.2010 / 17:40
2

Eu queria apenas comentar a excelente resposta de troyengel acima, mas falta o representante no serverfault para fazê-lo.

Uma correção é que deve haver um espaço entre -aq e --delete.

Além disso, criei um script de espelhamento que verificará o bloqueio de arquivo initado na unidade / tmpfs e espelhará do disco para a RAM a primeira execução, e da RAM para o disco a partir de então:

#!/bin/sh
if [ -f /workspace/z/some/deep/location/inited ]; then
  ionice -c2 -n7 nice -n 19 rsync -aq --delete /workspace/* $HOME/workspace 1>/dev/null
else
  ionice -c2 -n0 nice -n 19 rsync -aq --delete $HOME/workspace/* /workspace 1>/dev/null
fi

Observe que seu bloqueio deve estar em / z / deep / location, de modo que sempre seja o último arquivo sincronizado, para evitar a perda de dados.

Eu também incluí parâmetros legais e de ionização para que o espelhamento inicial seja de alta prioridade, e o espelhamento de RAM para o disco tenha prioridade menor.

Se você for corajoso, use -c1 -n7 para espelhamento inicial em tempo real e, se você espera tempo ocioso freqüente, pode usar o ionice com -c3 e nenhum sinalizador -n para espelhar apenas quando o disco não estiver em uso.

Eu salvei este script em / usr / bin / Mirror, e executá-lo a cada cinco minutos com o cron.

crontab -e

*/5 * * * * /usr/bin/Mirror

Isso é especialmente útil se você quiser armazenar seus arquivos de trabalho em um disco rígido criptografado, mas trabalhe neles na RAM.

Se você deseja executar o espelhamento na inicialização e no desligamento do sistema, provavelmente você pode usar o / etc / inittab

id0:26:once:/usr/bin/Mirror

    
por 24.11.2012 / 02:17