Pesquisa de site

Como sincronizar dois servidores/sites da Web Apache usando Rsync


Existem tantos tutoriais disponíveis na web para espelhar ou fazer backup de seus arquivos da web com diferentes métodos, aqui estou criando este artigo para minha referência futura e aqui estarei usando um comando muito simples e versátil do Linux para criar um backup do seu site. Este tutorial irá ajudá-lo a sincronizar dados entre seus dois servidores web com “Rsync“.

O objetivo de criar um espelho do seu servidor web com Rsync é que se o seu servidor web principal falhar, seu servidor de backup poderá assumir o controle para reduzir o tempo de inatividade do seu site. Esta forma de criar um backup de servidor web é muito boa e eficaz para pequenas e médias empresas web.

Vantagens de sincronizar servidores web

As principais vantagens de criar um backup de servidor web com rsync são as seguintes:

  1. O Rsync sincroniza apenas os bytes e blocos de dados que foram alterados.
  2. Rsync tem a capacidade de verificar e excluir os arquivos e diretórios no servidor de backup que foram excluídos do servidor web principal.
  3. Ele cuida de permissões, propriedades e atributos especiais enquanto copia dados remotamente.
  4. Ele também suporta o protocolo SSH para transferir dados de maneira criptografada para que você tenha certeza de que todos os dados estão seguros.
  5. Rsync usa método de compactação e descompactação durante a transferência de dados que consome menos largura de banda.

Como sincronizar dois servidores Web Apache

Vamos prosseguir com a configuração do rsync para criar um espelho do seu servidor web. Aqui, usarei dois servidores.

Servidor Principal
  1. Endereço IP: 192.168.0.100
  2. Nome do host: webserver.example.com
Servidor de backup
  1. Endereço IP: 192.168.0.101
  2. Nome do host: backup.example.com

Etapa 1: instalar a ferramenta Rsync

Aqui, neste caso, os dados do servidor web de webserver.example.com serão espelhados em backup.example.com. E para fazer isso primeiro, precisamos instalar o Rsync em ambos os servidores com a ajuda do seguinte comando.

[root@tecmint]# yum install rsync        [On Red Hat based systems]
[root@tecmint]# apt-get install rsync    [On Debian based systems]

Etapa 2: crie um usuário para executar o Rsync

Podemos configurar o rsync com o usuário root, mas por razões de segurança, você pode criar um usuário sem privilégios no servidor web principal, ou seja, webserver.example.com para executar o rsync.

[root@tecmint]# useradd tecmint
[root@tecmint]# passwd tecmint

Aqui eu criei um usuário “tecmint” e atribuí uma senha ao usuário.

Etapa 3: testar a configuração do Rsync

É hora de testar sua configuração rsync em seu servidor de backup (ou seja, backup.example.com) e para fazer isso, digite o seguinte comando.

[root@backup www]# rsync -avzhe ssh [email :/var/www/ /var/www
Saída de amostra
[email 's password:

receiving incremental file list
sent 128 bytes  received 32.67K bytes  5.96K bytes/sec
total size is 12.78M  speedup is 389.70

Você pode ver que seu rsync agora está funcionando perfeitamente e sincronizando dados. Usei “/var/www” para transferir; você pode alterar o local da pasta de acordo com suas necessidades.

Etapa 4: automatize a sincronização com login SSH sem senha

Agora terminamos as configurações do rsync e agora é hora de configurar um cron para o rsync. Como usaremos o rsync com o protocolo SSH, o ssh solicitará autenticação e se não fornecermos uma senha para o cron ele não funcionará. Para que o cron funcione sem problemas, precisamos configurar logins SSH sem senha para o rsync.

Aqui neste exemplo, estou fazendo isso como root para preservar as propriedades dos arquivos também, você também pode fazer isso para usuários alternativos.

Primeiro, geraremos uma chave pública e privada com os seguintes comandos no servidor de backups (ou seja, backup.example.com).

[root@backup]# ssh-keygen -t rsa -b 2048

Ao inserir este comando, não forneça a senha e clique em Enter para Senha vazia para que o rsync cron não precise de nenhuma senha para sincronizar os dados.

Saída de amostra
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
9a:33:a9:5d:f4:e1:41:26:57:d0:9a:68:5b:37:9c:23 [email 
The key's randomart image is:
+--[ RSA 2048]----+
|          .o.    |
|           ..    |
|        ..++ .   |
|        o=E *    |
|       .Sooo o   |
|       =.o o     |
|      * . o      |
|     o +         |
|    . .          |
+-----------------+

Agora, nossas chaves Pública e Privada foram geradas e teremos que compartilhá-las com o servidor principal para que o servidor web principal reconheça esta máquina de backup e permita o login sem pedir nenhuma senha durante a sincronização de dados.

[root@backup html]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email 

Agora tente fazer login na máquina, com “ssh ‘[email ‘”, e faça check-in em .ssh/authorized_keys.

[root@backup html]# [email 

Agora, concluímos o compartilhamento de chaves. Para saber mais detalhes sobre senha SSH sem login, você pode ler nosso artigo sobre isso.

  1. Login SSH sem senha em 5 etapas fáceis

Etapa 5: agende o Cron para automatizar a sincronização

Vamos configurar um cron para isso. Para configurar um cron, abra o arquivo crontab com o seguinte comando.

[root@backup ~]# crontab –e

Ele abrirá o arquivo /etc/crontab para editar com seu editor padrão. Aqui, neste exemplo, estou escrevendo um cron para executá-lo a cada 5 minutos para sincronizar os dados.

*/5        *        *        *        *   rsync -avzhe ssh [email :/var/www/ /var/www/

Os comandos cron e rsync acima simplesmente sincronizam “/var/www/” do servidor web principal para um servidor de backup em cada 5 minutos. Você pode alterar a configuração de hora e local da pasta de acordo com suas necessidades. Para ser mais criativo e personalizar com os comandos Rsync e Cron, você pode conferir nossos artigos mais detalhados em:

  1. 10 comandos Rsync para sincronizar arquivos/pastas no Linux
  2. 11 exemplos de agendamento Cron no Linux