Replicação de arquivos
Publicado por Ricardo Lino Olonca (última atualização em 22/05/2013)
[ Hits: 9.273 ]
Homepage: ricardoolonca.blogspot.com.br
Tenho um servidor de mídia com cerca de 2 TB de arquivos e precisava manter/criar uma réplica desse servidor para o caso de uma pane. E, claro, precisava manter os arquivos sincronizados.
Tentei algumas soluções, como rsync, mas este demorava muito e se fosse colocado no cron acontecia de encavalar vários processos do rsync. Tentei também usar o inosync, mas alguns arquivos de cache geravam problemas. Então criei esse script que deve ser colocado no /etc/init.d e rodar como serviço.
Basicamente ele roda com prioridade baixa, não afetando o desempenho do servidor. Pode fazer o sincronismo para vários servidores ao mesmo tempo beneficiando-se do cache de leitura do disco, e ainda impede que vários processos de rsync sejam encavalados. Em meu ambiente um arquivo leva cerca de 5 minutos para ser replicado para o outro servidor, mas esse valor ainda pode ser melhorado. A única ressalva é fazer com que o servidor origem se autentique no destino através de troca de chaves. Altere as variáveis de acordo com o teu ambiente.
#!/bin/bash
### BEGIN INIT INFO
# Provides: rsync_server
# Required-Start: networking
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Sincronismo dos arquivos entre os Frontend Master e Slave
### END INIT INFO
# Feito do Ricardo Lino Olonca em 18/04/2013
# Versao Beta 0.1.1
##############################
# Variáveis
# Pasta a ser copiada
ORIGEM=/home/ricardo/
# Pasta destino
DESTINO=/home/ricardoolonca/
# Pasta a serem excluídas da cópia
# O caminho deve ser relativo a pasta ORIGEM
EXCLUDE="
.aMule/
.VirtualBox/
.local/share/Trash/
Programas/
Música/
Vídeos/
.mozilla/firefox/ht1sguqp.default/Cache/
.wine/
.cache/
.aqemu/
.ssh/
"
# Prioridade do processo
# Quanto maior, mais lento ele será
NICE=19
# Caminho do programa rsync
RSYNC=/usr/bin/rsync
# Tempo de espera para uma nova cópia, em segundos
TEMPO=60
# Usuário usado na sncronização
USUARIO=ricardoolonca
# Servidor de destino
SERVIDORDESTINO='
10.50.0.32
172.20.1.127
'
##############################
# Inicio do programa
processo(){
for i in $EXCLUDE
do
x="--exclude=$i $x"
done
if [ -r $ORIGEM ] && [ -x $RSYNC ]
then
while true
do
for i in $SERVIDORDESTINO
do
nice -$NICE $RSYNC -avrp --delete $ORIGEM $USUARIO@$i:$DESTINO $x >/dev/null 2>/dev/null &
done
for i in $SERVIDORDESTINO
do
while true
do
ps wax | grep rsync | grep $i 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
sleep 60
else
break
fi
done
done
sleep $TEMPO
done
else
echo Há um erro na configuração
fi
}
case $1 in
"start")
processo &
;;
"stop")
echo Parando o daemon de sincronização dos arquivos do site
id=`ps wax | grep $0 | grep start | sed s/^" "//g | cut -d" " -f1 | head -1`
kill $id
;;
"restart")
ps wax
$0 stop
sleep 5
$0 start
;;
"status")
ps wax | grep $0 | grep -v grep | grep -v status >/dev/null
if [ $? -eq 0 ]
then
echo Daemon de sincronismo dos arquivos rodando
else
echo Daemon de sincronismo dos arquivos parado
fi
;;
*)
echo "Daemon de sincronismo dos arquivos do site"
echo "Uso: $0 <start|stop|restart|status>"
esac
Backup Database MySQL Automatizado
Backup de diretórios do sistema Linux
Script para gravação de BKPs em DVDs-RW
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









