Resultados 1 a 6 de 6
  1. #1
    Membro Avatar de guilez
    Data de Ingresso
    Aug 2008
    Localização
    ~/
    Posts
    276

    Arrow Sincronização com rsync

    // Título: Sincronização com rsync
    // Autor: guilez
    // Data: 15/01/2012

    As transferências de arquivos/backups sempre existiram para roubar nosso precioso tempo, principalmente quando se fala de conexões ruins. Você poderá deixar de lado o protocolo FTP, onde cada vez que tinha de fazer backup do seu servidor, muito demorava para fazer a transferência de 300MB de todos aqueles arquivos. Ainda, por mais que você fizesse a sincronização baseada nos datas de modificação de arquivos, chegando naquele único arquivo enorme, teríamos uma chateação.



    O rsync (remote synchronization) supera facilmente os problemas já citados, é uma grande ferramenta quando se trata de sincronização de arquivos. Só realiza a transferência de arquivos com alteração na comparação cliente-servidor. Além deste fato, para você não precisar fazer a transferência daquele grande arquivo, com poucas modificações na comparação, este programa quebra os arquivos em diversas partes/pacotes e então faz uma lista de comparação, realizando assim a transferência apenas das partes diferenciadas e por fim reconstruindo o arquivo, remontando as partes, no outro lado da comunicação, gerando um ganho muito grande em velocidade.

    Outros pontos muito importantes que o rsync carrega são a segurança e a compressão pré-transferência. No aspecto de segurança, o rsync, herdou de seus antepassados traços do ssh, realizando assim uma comunicação segura, e não permitido que um sniffer na rede venha a revelar tudo; Já a compressão antes do envio e descompressão assim que recebida a informação, ajuda e muito reduzir a largura de banda a ser utilizada, ganhando novamente em velocidade.

    Vamos a sintaxe, traduzida da man page:

    Código:
    Local:        rsync [OPÇÕES] ORIGEM [DESTINO]
    
    Acesso via shell remota:
        Download: rsync [OPÇÕES] [USUÁRIO@]HOST:ORIGEM [DESTINO]
        Upload:   rsync [OPÇÕES] ORIGEM [USUÁRIO@]HOST:DESTINO
     
    Acesso via rsync daemon:
        Download:
                  rsync [OPÇÕES] [USUÁRIO@]HOST:: ORIGEM [DESTINO]
                  rsync [OPÇÕES] rsync://[USUÁRIO@]HOST[:PORTA]/ORIGEM [DESTINO]
        Upload:
                  rsync [OPÇÕES] ORIGEM [USUÁRIO@]HOST::DESTINO
                  rsync [OPÇÕES] ORIGEM rsync://[USUÁRIO@]HOST[:PORTA]/DESTINO
    Nota: Leia-se “download” como o ato de realizar a sincronização levando como base os arquivos remotos; e da mesma forma, porem levando como base os arquivos locais, leia-se “upload”.

    Iremos criar um situação imaginária, bem simples por sinal, para por em prática o funcionamento deste aplicativo. Imaginemos que existe um servidor (no exemplo foi utilizado o alwaysdata.com) onde existe suporte a ssh, e que necessitamos fazer backups diários do conteúdo do diretório /www, salvando-os na pasta /backup de nossa máquina.

    Código:
    guilez@invaders-desktop:~$ rsync -Cravzp --progress --delete-excluded guilez@ssh.alwaysdata.com:www/ home/guilez/backup/
    Veja o significado das opções solicitadas, em sua respectiva ordem:

    Código:
    -C, --cvs-exclude       auto-ignore files in the same way CVS does
    -r, --recursive         recurse into directories
    -a, --archive           archive mode; equals -rlptgoD (no -H,-A,-X)
    -v, --verbose           increase verbosity
    -z, --compress          compress file data during the transfer
    -p, --perms             preserve permissions
    --progress              show progress during transfer
    --delete-excluded       also delete excluded files from dest dirs
    Dica: Acesse a man page [~$ man page rsync (ou acesse a versão html)] para ver todas as opções existentes.

    Mas isso seria um tanto chato, não? Toda vez que fossemos até o terminal e executássemos esta tarefa, teríamos de nos logar no servidor, digitar a senha...
    Nada que um script que automatize isto não resolva, não é mesmo? Podemos utilizar o expect, então mãos à obra.

    Código:
    #!/usr/bin/expect -f
    #autosync.exp
    
    set timeout 100
    set username "guilez"
    set password "**********"
    set server "ssh.alwaysdata.com"
    spawn rsync -Cravzp --progress --delete-excluded $username@$server:www/ /home/guilez/backup/
    expect "*?assword:*" { send "$password\r" }
    interact;
    A primeira vista tudo parece tudo perfeito. O script faz todo o trabalho sozinho, só precisamos executá-lo e está funcionando de acordo com o esperado. Mas a realidade não é bem essa. Nossa senha esta incluída dentro do nosso próprio código, será que estamos por jogar fora toda a segurança tão almejada, inclusive pela escolha da utilização do ssh?

    A resposta para evitar este tipo de autenticação é utilizar o OpenSSH, vamos à linha de comando.

    Código:
    guilez@invaders-desktop:~# openssh -t rsa
    Atenção: Aperte <ENTER> em todas as opções.

    Foram criados dois arquivos, sendo um deles a chave pública (/home/guilez/.ssh/id_rsa.pub), a qual deve enviada para o servidor.

    Código:
    guilez@invaders-desktop:~# cat ~/.ssh/id_dsa.pub | ssh guilez@ssh.alwaysdata.com 'cat - >> ~/.ssh/authorized_keys'
    Atenção: A chave privada deve permanecer apenas com o proprietário e não deve ser divulgada.

    Agora nossa autenticação se dará de forma automatica e mais segura. Podemos, mais tranquilamente, preparar um script para automatizar algumas tarefas e nos oferecer algum conforto.
    Código:
    #!/bin/bash
    # sync.sh
    #
    # Site  : http://www.forum-invaders.com.br/
    # Autor : guilez
    # E-mail: guilezguy[at]gmail[dot]com
    
    LOG=/var/log/sync.log
    echo -ne "\nUsuário: " && who | sed 's/[^A-Za-z0-9]* .*//g' >> $LOG
    echo -n "Data: " && date +%d/%m/%Y >> $LOG
    echo -n "Dia: " && date +%A >> $LOG
    echo -n "Horário: " && date +%H:%M:%S >> $LOG
    rsync -Cravzp --progress --delete-excluded guilez@ssh.alwaysdata.com:www/ home/guilez/backup/
    Oque vocês acham de nós irmos implementando, mesmo que aos poucos, este script?

    Bibliografia/Complementos:
    Repositório rsync: http://www.samba.org/ftp/rsync/
    rsync README: http://www.samba.org/ftp/rsync/README
    How Rsync Works A Pratical Overview: http://rsync.samba.org/how-rsync-works.html
    The rsync algorithm: http://rsync.samba.org/tech_report/tech_report.html
    A Tutorial on Using rsync: http://everythinglinux.org/rsync/

    Pessoal, críticas construtivas são muito bem vindas. Perdoem qualquer erro.
    Ficou bem simples, mas espero que tenham gostado.

    Abraços.
    45:2d:6d:61:69:6c:3a:20:67:75:69:6c:65:7a:67:75:79 :5b:61:74:5d:67:6d:61:69:6c:5b:64:6f:74:5d:63:6f:6 d
    4a:61:62:62:65:72:3a:20:67:75:69:6c:65:7a:5b:61:74 :5d:6a:61:62:62:65:72:5b:64:6f:74:5d:6f:72:67

  2. #2
    Moderador Avatar de M4CK
    Data de Ingresso
    Jul 2007
    Posts
    2.809
    guilez
    Tutorial de alta qualidade, bem exemplificado e com um assunto que sempre 'roubam' um bom tempo.
    Parabéns.
    []'s

  3. #3
    White Hat Administrador Avatar de fvox
    Data de Ingresso
    Sep 2005
    Localização
    São Paulo - SP
    Posts
    4.428
    Hi.

    Very gooooooood!
    Há um tempão atrás, lá na empresa tinha uma rotina que fazia download de diversos arquivos de forma síncrona, e depois fazia a sincronização nos servidores por FTP. Sujo demaisss!
    Criei um script de download assíncrono - o que acelerou o processo em 80% - e a sincronização feita com o rsync.

    Resultado: A rotina que levava em média 80 minutos para concluir, passou a ser levar 10 minutos e de forma que a integridade dos dados passou a ser muito confiável! ;-)

    []'s
    Acha que está caindo na insanidade? Mergulhe!

    Twitter | Blog | Facebook | Github

  4. #4
    Hacker Avatar de acpguedes
    Data de Ingresso
    Sep 2011
    Localização
    #!/usr/bin/env perl
    Posts
    955
    guilez, eu faço parte de um grupo de pesquisa (um dos meus passa-tempos favoritos) e eu que sou responsavel pela parte computacional (não que eu saiba mecher com essa parte, eu faço biomedicina, hahaha) e um dos meus problemas é justamente entender essa parte de sincronização que você acabou de explicar!!

    Parei de procurar na internet, você acabou de me ajudar!!

    Obrigado!!

    A proposito, otimo tutorial, simples e claro, a galera aqui do forum tem uma habilidade para fazer bons tutoriais imprecionante!

    Sem mais!
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!

  5. #5
    Moderador Avatar de eduardu0
    Data de Ingresso
    Feb 2007
    Posts
    979
    Realmente muito bom!

    É sempre bom ler ótimos tutorais assim como esse postado.

    Vai ajudar muita gente!
    Pense em uma frase bonita.

  6. #6
    Membro Avatar de guilez
    Data de Ingresso
    Aug 2008
    Localização
    ~/
    Posts
    276
    Na verdade, é sempre bom receber esses comentários gratificantes.
    Muito obrigado pessoal.

    Abraços.
    45:2d:6d:61:69:6c:3a:20:67:75:69:6c:65:7a:67:75:79 :5b:61:74:5d:67:6d:61:69:6c:5b:64:6f:74:5d:63:6f:6 d
    4a:61:62:62:65:72:3a:20:67:75:69:6c:65:7a:5b:61:74 :5d:6a:61:62:62:65:72:5b:64:6f:74:5d:6f:72:67

Tags para este Tópico

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •