Usando o rsync para fazer backup de 4 VPSs diferentes para um quinto VPS que usa para armazenar backups

0

Digamos que eu tenha 4 VPSs. Em cada um deles, os seguintes comandos cron são executados semanalmente, para backups locais:

0 0 * * 6 zip -r /root/backups/dirs/html-$(date +\%F-\%T-).zip /var/www/html
1 0 * * 6 find /root/backups/dirs/* -mtime +30 -exec rm {} \;

0 0 * * 6 mysqldump -u root -pPASSWORD --all-databases > /root/backups/db/db-$(date +\%F-\%T-).sql
1 8 * * 6 find /root/backups/db/* -mtime +30 -exec rm {} \;

O que eu desejo é enviar uma cópia de cada backup local (de cada um dos 4 VPSs) para um quinto VPS , que eu usarei como um ambiente de backup central. O envio deve ser garantido como possível (no intervalo plausível).

Como isso pode ser feito automaticamente (também agendado) com o rsync?

(ou talvez SCP?)

    
por JohnDoea 20.07.2017 / 14:17

2 respostas

2

Supondo que cada backup seja um único arquivo (arquivando os dois arquivos acima), o SCP será mais eficiente do que rsync porque faz menos trabalho geral além de transferir o arquivo.

No que diz respeito à automação, você precisará configurar as coisas para que:

  1. O quinto VPS pode se conectar aos outros 4 sem precisar de uma senha como um usuário que pode ler os backups (um pouco mais fáceis de gerenciar, mas mais difícil de codificar).
  2. Os outros quatro VPS podem se conectar ao quinto sem precisar de senha, preferencialmente cada um com uma conta separada (um pouco mais difícil de gerenciar, mas mais fácil de codificar).

O método preferido para qualquer um deles é geralmente chaves SSH não criptografadas. Depois de ter isso, você pode configurar um cron job (no quinto VPS no caso 1, ou em cada um dos outros 4 no caso 2) que irá transferir o backup mais recente para o local desejado.

Aqui está um script de shell rápido e sujo para a segunda opção que copiará o arquivo mais recente de um diretório para um sistema remoto:

#!/bin/bash
file='ls -t "${1}" | head -n 1'
scp -pCB "${1}"/"${file}" ${2}

Executando isso com o caminho para o diretório onde os backups são armazenados como o primeiro argumento, e a string user@host:/path apontando para o local no quinto VPS como o segundo argumento copiará o backup mais recente do sistema local para o quinto VPS.

A opção -p para SCP preservará mtime (para que você ainda possa usar o mesmo comando find para diminuir os backups antigos), -C habilita a compactação (isso pode ou não melhorar o desempenho e -B impede que ele solicite nada.

    
por 20.07.2017 / 15:01
0

Crie usuários separados para cada cliente VPS neste estágio. Não é estritamente necessário, mas no caso de um VPS ser comprometido, você não quer que ele seja capaz de ler (ou gravar) backups de outras máquinas.

Digamos que você tenha contas vps1 vps2 , no VPS do servidor de backup.

  • Defina cada VPS para acessar o VPS do servidor de backup via ssh usando certificados e não senhas:

    1. Crie um usuário (digamos, "backup") (não estritamente necessário).
    2. Crie um conjunto de chaves ssh para o usuário "backup" com ssh-keygen em cada VPS.
    3. acrescente o conteúdo de ~/backup/.ssh/id_rsa.pub a um ~/<vps-user>/.ssh/authorized_keys para cada conta VPS. Certifique-se de que seja legível apenas por esse usuário ( chmod 600 ~<vps-user>/.ssh/authorized_keys )

De cada VPS, você agora deve poder fazer ssh da conta "backup" para a conta vps do servidor de backup ...

  • Na máquina do servidor VPS, crie um diretório para cada máquina cliente para gravar seus backups e torne-o rw apenas para a conta VPS desse cliente, por exemplo:
    mkdir /var/spool/big-backups/vps1; chown vps1 /var/spool/big-backups/vps1; chmod 600 /var/spool/big-backups/vps1;

  • Crie um cronjob para o usuário "backup" em cada vps: rsync -avz /root/backups/db/ -e "ssh -l vps1" /root/backups/ /var/spool/big-backups/vps1/" . Agende isso depois das tarefas de backup locais nas máquinas VPS do cliente, obviamente. (O sinal z no rsync é indesejável se seus arquivos já estiverem compactados, o backup do seu banco de dados não estiver no seu exemplo ...)

Você pode usar scp em vez de rsync se preferir (não sei por que você faria isso, mas ambos funcionarão).

    
por 26.07.2017 / 01:15