Replicação de arquivos
Publicado por Ricardo Lino Olonca (última atualização em 22/05/2013)
[ Hits: 8.942 ]
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 de MySQL para uso no cron / cPanel
Enviando e-mail localmente após o backup para monitoramento
Script Backup com Log e envio por Email
Backup do PostgreSQL 8.3 e aviso por e-mail
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
big linux sem audio como resolver (2)
Como faz para dar um update-grub por shell script [RESOLVIDO] (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta