Homologação do rsync no Debian Etch

O RSync é um software de sincronia de dados entre uma origem e um destino quaisquer, tando entre diretórios de um mesmo sistema de arquivos, quando de dispositivos diferentes ou mesmo de computadores distintos, acessíveis entre si via TCP/IP. Seu uso é muito variado, indo deste o usuário comum que quer sempre sincronizar sua pendrive com um determinado diretório em seu disco rígido sempre que plugá-la no barramento ou em um ambiente de deploy de aplicações, onde a aplicação deve ser replicação por todos os nós de um cluster que fornece mais escalabilidade para uma aplicação que receba grande volume de requisições.

O mais comum é realmente o backup, pois o algoritmo do rsync consiste em transferir somente as diferenças entre os diretórios de origem e destino, o que polpa muito tempo e conexão, no caso de um backup remoto. O rsync pode utilizar RSH ou SSH para suas transferências remotas, ou mesmo um socket diretamente, através da porta 873. Vale lembrar que um dos criadores do RSync foi Andrew Tridgell, o mesmo do Samba.

O amigo Waltair Santos escreveu um texto baseado em sua experiência de homologação do rsync em Debian Etch e CentOS 5.1 e gentilmente o cedeu para ser publicado aqui no Hypercast. O texto dele inicia logo abaixo.

Homologação RSync – Debian 4.0 / CentOs 5.1

Nota: realizado nos servidores de ips: 192.168.1.53 192.168.1.68  192.168.1.4 (Servidores virtuais by VmwareServer)

Start: 23/02/08
Finish: 15/03/08 às 15:40hs
Descrição do serviço:

Rsync é um programa de transferência de arquivos para sistemas unix. Ele utiliza um algoritimo de sincronização que permite que apenas as partes alteradas dos arquivos sejam transferidas pelo link, poupando a banda do link e tornando a sincronização rápida.
O Rsync pode atualizar árvores de arquivos e diretórios completas, pode preservar links simbólicos, links absolutos, propriedades e permissões, bem como dispositivos e datas/horários.

Ele não requer privilégios especiais para sua instalação e pode trabalhar por ssh, rsh ou sockets diretos. O programa possui ainda um pipeline interno, com o propósito de reduzir a latência para sincronização de múltiplos arquivos. Uma característica valiosa para espelhamento de sites é o suporte a rsync anônimo, o que torna muito usado por sites que precisam ter sincronismo entre si, como é o caso de repositórios de softwares.

Nota (para você ter uma infra-estrutura correta execute os serviços abaixo):
Configurar o ntpdate; para seu relógio sempre ficar com a hora certa.
Configurar o “aptitude”, desmarcar a opção que instala pacotes recomendados automaticamente.

I) Instalação Rsync:
1)Instalando o rsync:
# aptitude install rsync

Confs importantes:
Configuração d servidor: /etc/rsyncd.conf (Consiste em uma descrição do lado servidor, ou seja das opções selecionadas para o diretório que será compartilhado).

Configuração do cliente: possui opções variadas, para download, upload, sincronismo e mesmo transferência de arquivos entre a máquina cliente e a servidor.
A sintaxe padrão é:
rsync [opções] origem destino

Podemos na origem ou no destino apontar também qual usuário específico será usado na conexão, bem como alterar a porta de conexão. A porta padrão do serviço é a 873. Caso no servidor a porta utilizada for outra, devemos indicar no cliente.
O rsync possui diversas opções, as mesmas podem ser vistas utilizando:
#man rsync   / rsync -h   / rsync –help

Cenário utilizado na homologação do serviço:

Servidor Rsync I  - Debian Etch (irá disponibilizar o diretório do servidor web “/var/www” e também um diretório com o backup das bases de dados mysql “/backup”) - 192.168.1.53:

- Instalar e deixar o apache funcionando perfeitamente. Utilizei localização default para Document Root “/var/www”.
- Instalar e deixar o mysql funcionando perfeitamente; instalar também o phpmyadmin (para administração via web do banco mysql).
- Montar um script para fazer backup das bases do banco mysql, pois serão estes arquivos que serão copiados pelo rsync.

–> Configuração do servidor Rsync:
/etc/rsyncd.conf

# sample rsyncd.conf configuration file
# GLOBAL OPTIONS
#motd file=/etc/motd
log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
pid file=/var/run/rsyncd.pid
syslog facility=daemon
#socket options=
#Conforme apostila
uid=0
# MODULE OPTIONS
#Local utilizado para backup dos sites web existentes
[www]
path=/var/www
comment = diretorio sites web
read only = yes
max connections=10
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.

#Local utilizado para backup das bases de dados mysql
[backup]
path=/backup
comment = diretorio backups diversos (mysql)
read only = yes
max connections=10
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.

–> Script de backup do banco mysql (os backups estão sendo realizados com o usuário backup); Não esquecer de colocar o crontab para funcionar de acordo com sua necessidade, pois só assim você terá um backup eficiente e funcional, o script sozinho em sem agendamento não faz nada  .. ;-)

#!/bin/sh
#/bin/backupbasesmysql.sh
#Description: Script para copia de seguranca das bases mysql
#Gerando as variaveis
dia=`date +%Y"-"%b"-"%d`
#Cria a pasta do dia
mkdir /backup/"$dia"
cd /backup/"$dia"
mysqldump -e -u backup -p123mudar –add-drop-table –add-locks mysql >  mysql"$dia".sql
tar -czf mysql"$dia".tar.gz mysql"$dia".sql
rm *.sql
#Fim do script
#Fim

Servidor Rsync II  - CentOs5 (irá disponibilizar um diretório contendo os arquivos do serviço SAMBA – em produção no dia-a-dia) – 192.168.1.68:

–> Samba já instalado, funcionando e disponibilizando alguns diretórios abaixo de “/samba/dir”

Configuração do servidor Rsync:
/etc/rsyncd.conf

# sample rsyncd.conf configuration file
# GLOBAL OPTIONS
#motd file=/etc/motd
log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
pid file=/var/run/rsyncd.pid
syslog facility=daemon
#socket options=
#Conforme apostila
uid=0
# MODULE OPTIONS
#Local utilizado para armazenar os arquivos do samba
[samba]
path=/samba/dir
comment = diretorio files samba
read only = yes
max connections=10
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
Cliente Rsync - Debian Etch (Servidor que ficará responsável em baixar os arquivos do outros servidores Rsync) – 192.168.1.4:

Configuração do cliente Rsync (considerado neste cenário como servidor de backup dos arquivos linux existentes na empresa):
- Neste cliente Rsync, o rsync será apenas instalado (aptitude install rsync), não será necessário nenhuma alteração nos arquivos de configuração.
- Montar um script para baixar arquivos dos outros dois servidores configurados como “Rsync Servidor”.

–> Script em execução no cliente Rsync (servidor responsável em executar os backups de todos os serviços linux existentes na empresa). Segue abaixo o script na íntegra. Coloquei para rodar através do crontab a cada uma hora. Todas as opções referentes ao rsync existentes no script foram explicadas no item “Observações gerais”.

#!/bin/sh
#/bin/backupbasesmysql.sh
#Description: Script para copia de seguranca das bases mysql
#Gerando as variaveis
DATA=`date +%Y-%m-%d_%H:%M`
#
cd /rsync/www
rsync -av –backup –backup-dir=$DATA 192.168.1.53::www
#
cd /rsync/Basesmysl
rsync -av –backup –backup-dir=$DATA 192.168.1.53::backup
#
cd /rsync/samba
rsync -av –backup –backup-dir=$DATA 192.168.1.683::samba
#Fim do script
#Fim

Nota: Além se você concentrar os backups em um cliente Rsync, é interessante você colocar os arquivos backpiados em outro meio externo; pode-se usar fita DLT, LTO ou montar outro servidor rsync para sincronizar os arquivos; recomendo backup em fita externa, pois só assim você estará correto perante as normas internacionais, pois a fita você pode transportar para um meio externo ao servidor.

Observações gerais:
- Comandos importantes:
–> Checa quais os compartilhamentos rsync no servidor, e quais seus nomes
debian03:/home/waltair# rsync 192.168.1.53::
teste           diretorio de testes
www             diretorio sites web
backup          diretorio backups diversos (mysql)

–> Conecta ao compartilhamento e lista os arquivos que estão lá
debian03:/home/waltair# rsync 192.168.1.53::www
drwxr-xr-x        4096 2008/03/15 13:49:40 .
-rw-r–r–          14 2008/02/24 16:59:36 index.html
-rw-r–r–          16 2008/01/31 22:52:39 phpinfo.php
drwxr-xr-x        4096 2008/01/31 22:41:30 apache2-default
drwxr-xr-x        4096 2008/03/15 11:31:28 ldap
drwxr-xr-x        4096 2008/03/15 14:04:38 phpmyadmin
drwxr-xr-x        4096 2008/03/15 11:50:33 site1

debian03:/home/waltair# rsync 192.168.1.53::backup
drwxr-xr-x        1024 2008/03/15 14:19:24 .
drwxr-xr-x        1024 2008/03/15 14:19:24 2008-Mar-15

–> Conecta ao compartilhamento e lista os arquivos que estão lá, porém aumentando a verbosidade

debian03:/home/waltair# rsync -av 192.168.1.53::www
(a saída deste comando foi enorme por isso não coloquei aqui, coloquei somente o início e o fim)
receiving file list … done
drwxr-xr-x        4096 2008/03/15 13:49:40 .
-rw-r–r–          14 2008/02/24 16:59:36 index.html
-rw-r–r–          16 2008/01/31 22:52:39 phpinfo.php
………………………
………………………
sent 79 bytes  received 14567 bytes  29292.00 bytes/sec
total size is 8321667  speedup is 568.19

–> Para transferir um arquivo
debian03:/rsync/Basesmysl# rsync -vr 192.168.1.53::backup .
receiving file list … done
2008-Mar-15/
2008-Mar-15/mysql2008-Mar-15.tar.gz

sent 95 bytes  received 95361 bytes  63637.33 bytes/sec
total size is 95189  speedup is 1.00

–> De um cliente Rsync, baixar um diretório inteiro; preservando as permissões de arquivo (-p, -o, -g = preserva as permissões, propriedade e grupo); Outras opções: -z = comprime dados, -r = recursivo, faz a transferência recursivamente. Se quisermos usar todos os parâmetros juntos utilize a opção -a (engloba -r, -l, -p, -t, -g, -o, -D).
Note que quando não existe o usuário/grupo ele mantém o uid e gid do servidor.
debian03:/rsync/Basesmysl# rsync -zrogpv 192.168.1.53::backup .
receiving file list … done
2008-Mar-15/
2008-Mar-15/mysql2008-Mar-15.tar.gz

–> Para deletar arquivos (deletados no servidor) automaticamente utilize o comando; Se não utilizar isto os arquivos vão se acumulando no cliente. Isso pode ser desconsiderado se você quiser manter os arquivos deletados somente no cliente (servidor responsável por baixar os arquivos do servidor).
debian03:/rsync/Basesmysl# rsync -zrogpv –delete 192.168.1.53::backup .

A opção acima é interessante para ser usada em um servidor cluster, pois você vai querer que seus arquivos estejam iguais nos dois servidores.

–> Opções adicionais
–backup
Ele executa o rsync e adiciona um sufixo no final do arquivo; para podermos selecionar qualquer outro sufixo, basta utilizarmos o parâmetro: –suffix=

Executando um backup simples:
debian03:/rsync/Basesmysl# rsync -zrogpv –backup 192.168.1.53::backup .

Adicionando um suffixo default, para isto o arquivo deve ser alterado no servidor:
debian03:/rsync/Basesmysl# rsync -zrogpv –backup –suffix=.old 192.168.1.53::backup .

Artigos Relacionados:


Sobre este artigo