Como fazer backup de um servidor Linode em execução?


21

Queremos fazer um backup de tudo em nosso servidor Debian, que está sendo executado remotamente no outro lado do mundo (hospedado por Linode), sem desligá-lo.

Este sistema está executando shell, email, XMPP / prosody e web, com algumas configurações simples do nginx.
Queremos fazer backup de arquivos relacionados a essas coisas apenas por segurança. Por exemplo, arquivos que os usuários armazenaram em seus diretórios pessoais.

Não precisamos copiar exatamente a configuração existente em cada arquivo / etc; em vez disso, a razão pela qual estamos fazendo o backup em primeiro lugar é para que possamos mudar tudo para uma nova configuração (versão mais recente do Debian ainda no Linode).

Vejo que o Linode oferece um serviço de backup. Mas, a longo prazo, também precisamos de nossos próprios backups, aqui, caso eles falhem ou algo mais estranho aconteça.

A razão pela qual essa pergunta existe é que, quando tentei fazer backups no passado, cometi um destes dois erros:

  • Eu disse "OK, vou copiar /e tudo o que há embaixo" e fiquei preso em um loop infinito estranho, porque a unidade para a qual eu estava copiando estava montada em / media / backup e ela estava se copiando recursivamente [obv esse problema específico não aplicável aqui, já que vamos fazer backup via rsync ou similar] ou ele ficou parado ao tentar copiar algumas coisas "vivas" em / proc ou / var ou qualquer outra coisa, como tentar acompanhar os registros em constante mudança, ou
  • Eu disse "OK, vou pegar o mínimo necessário do que precisamos ... hmm, os diretórios pessoais de todos e os diretórios de servidores da web (todos abaixo /var) e vamos pegar uma cópia /etce todos os e-mails antigos em / var / vmail "e invariavelmente danifiquei as permissões ou os carimbos de data / hora do arquivo (dessa vez, certificarei-me de não fazer backup dos arquivos unix em uma unidade FAT) ou esqueci alguma coisa (" oh, dispara, eu tinha alguns scripts personalizados em / usr / local / bin que nunca guardei em nenhum outro lugar, esqueci de pegá-las, acho que elas se foram agora ").

Portanto, a cópia óbvia de toda a unidade levou a armadilhas e a cópia seletiva de diretórios levou a armadilhas. Eu quero saber como fazer isso direito.

A questão de falha no servidor O que é necessário para um sistema de backup completo? aborda filosofia e boas práticas, mas estou procurando esses detalhes mais específicos de:

  • Quais diretórios eu preciso copiar e quais eu excluo (dado que é um sistema que está sendo executado no momento e que fornece um wiki, bate-papo XMPP, e-mail - com novas mensagens entrando enquanto o trabalho de cópia está em execução)
  • Quais atributos de arquivo, como registro de data e hora, proprietário e grupo, preciso apresentar e como faço isso? ← Acho que posso responder essa metade da pergunta com algo como ... hum ... rsync -HXazacho que é uma boa opção para nós? O -zobv não está realmente relacionado à questão que é "o que preservo"

Muitos conselhos de backup que vejo, como usar dd, parecem pressupor que a unidade está desmontada e não está em uso. Mas eu não deveria excluir "vivo" diretórios como o / proc e alguns dos subdiretórios sob / var (No entanto, algumas das coisas em / var Eu sei que nós definitivamente fazer necessidade de manter) e / mount? No que mais preciso pensar nessa situação? Então eu acho que posso apenas snarf-lo com rsync e usando um monte de --excludesinalizadores.

Ou existem idéias melhores, especialmente as que são compatíveis com o software livre?


Eu entendo que essa pergunta parece extremamente básica, mas tendo rodado esse tipo de sistema há tanto tempo, eu estraguei tudo de novo e de novo e nunca realmente gritei como fazer direito
Sandra


Pelo que vale, cp -r -apreservará o maior número possível de atributos de arquivo ao copiar arquivos (com base no que o sistema de arquivos de destino suporta). O -asinalizador instrui cpa preservar atributos. Para copiar em uma rede ou através de um sistema de arquivos que não oferece suporte aos atributos necessários, tar -csempre funcionou para mim, embora eu acredite que haja alguns casos extremos que ele não cobre e, em particular, acredito que, tarpor padrão, depende de nomes de usuários correspondentes a ambos os sistemas. Dito isto, copiei um sistema Linux inteiro (não montado) usando tarsem problemas aparentes.
Micheal Johnson

Também existe alguma razão específica para a necessidade de copiar o sistema ao vivo?
Micheal Johnson

Usar o serviço de captura instantânea do linode?
ivanivan 28/04

Respostas:


15

Então você deseja fazer backup de toda a sua unidade sem todos esses erros desagradáveis ​​e também filtrar todas as pastas / proc e outras pastas temporárias?

Uma opção é montar a pasta raiz em outra pasta dentro do sistema de arquivos, assim:

$ cd /mnt
$ mkdir drive
$ mount --bind / drive

Isso fornecerá todos os arquivos existentes em sua unidade que não são considerados temporários (como as pastas / proc ou / sys).

Agora que você tem uma visão limpa da sua pasta raiz, basta copiá-la para sua unidade de backup usando o padrão cpou rsync. Algo ao longo das linhas de:

cp -R /mnt/drive /mnt/backupdrive

Isso resolve os dois problemas mencionados:

  • Você não entra em recursão, porque o disco de backup não está montado na unidade (ponto de vista)
  • você não perde nenhum arquivo importante, porque está pegando todos

Veja também: montagem do homem (8)


6
Cuidado, com esta solução, você pode copiar arquivos que estão sendo gravados, como bancos de dados. Eu recomendo executar um script para despejar o banco de dados em um arquivo separado antes de copiar os arquivos. Por exemplo, para o MySQL, você pode usar o mysqldump.
Marco Martinelli

10

No Linux, tudo é um arquivo. É possível via rsync, mas há coisas que você deve saber, que são (na melhor das hipóteses) difíceis de contornar.

Você deve pensar em replicação primeiro, especialmente para bancos de dados. Também é uma boa idéia configurar o balanceador de proxy / carga na frente do servidor principal, para que você possa alternar facilmente com os servidores primário e espelho durante a transição.

No nível do hardware, a melhor situação será ter um servidor espelhado do outro lado, com o mesmo número de portas ethernet, o mesmo layout de disco rígido e assim por diante. Tudo o que difere implica a necessidade de alterações na configuração do sistema.

ou seja, se você possui duas portas eth, deseja garantir que a configuração da rede, o firewall etc. correspondam ao nome da interface nos dois servidores e, caso seja diferente, é necessário alterar a configuração após o rsync ou alterar o nome do dispositivo no segundo servidor (destino).

O mesmo com o layout da partição. Você deve criar as mesmas partições que no servidor principal, mas se você as criar do zero, terá UUIDs diferentes, portanto precisará alterar o fstab, o grub, o mdadm (se houver ataque suave) e assim por diante. .

Mas também existem muitas coisas que podem dar errado, como bancos de dados, que podem ser inconsistentes se não forem interrompidas anteriormente (antes de executar o rsync).

A melhor estratégia será preparar primeiro o hardware e o sistema de arquivos (partições) - para corresponder à configuração do servidor principal. Em seguida, monte parititons vazios através do sistema intermediário (como CD ao vivo com o ssh-server instalado temporariamente). Você cria / proc, / dev, / sys vazios e depois sincroniza o restante, da seguinte forma:

rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/

Então você precisa instalar o grub no dispositivo e trabalhar na configuração, para torná-lo inicializável, alterar a configuração da rede, o fstab e outros itens mencionados anteriormente.

Você também pode tentar instalar um sistema novo (com a mesma versão que você está usando no servidor principal), depois desligá-lo, montá-lo por outro sistema temporário (como o live cd) e substituir qualquer outro item que não seja / proc, / sys, / dev e / boot com o rsync.

Mas é apenas uma ideia geral. As coisas podem complicar, dependendo do que você realmente tem neste servidor, qual é a sua configuração, rede e instalação de hardware. E, no final das contas, isso pode ser realmente difícil ou impossível sem tempo de inatividade perceptível.


Re bancos de dados: Se você tiver as abstrações de sistema de arquivos apropriadas (por exemplo, um LVM), poderá tirar um instantâneo consistente da unidade sem precisar de replicação completa do banco de dados. No entanto, isso exige que seu banco de dados esteja kill -9seguro ou poderá falhar na recuperação. Um bom banco de dados deve lidar com essa situação, mas um número surpreendente de produtos não (ou pior, eles quase sempre se recuperam, mas falham uma vez na lua azul quando você realmente precisa deles para trabalhar). Portanto, na prática, a replicação é provavelmente mais confiável de qualquer maneira.
Kevin

5

O que você realmente quer é restaurar. Faça o que fizer, você deve restaurar testá-lo regularmente.


O Linode possui um serviço de backup. Os instantâneos podem ser obtidos em um agendamento predefinido limitado ou com uma API.

Uma vantagem dos backups baseados em instantâneos é que eles oferecem um momento preciso, pois os dados não são alterados enquanto uma cópia é feita. Os instantâneos também podem ser facilmente restaurados em um host diferente, um novo Linode nesse caso.


Não estou vendo nada sobre como garantir que esses backups ainda funcionem se, por exemplo. Linode vai à falência.
Mark

Eu descobri o serviço de backup do Linode enquanto digitava uma das edições da minha pergunta, conversei com meu colega e fomos em frente. Ele resolveu nossa crise imediata, mas vamos tentar encontrar uma maneira de armazenar os dados em nossas próprias casas. Então, + por mostrar que eles têm esse serviço, eu não sabia quando postei pela primeira vez. Mas as restaurações têm o seguinte problema: Se o servidor estiver configurado incorretamente, como uma bola de chiclete e cabides, não queremos necessariamente restaurá-lo exatamente para o mesmo estado configurado incorretamente. Mas queremos nossos dados favoritos.
Sandra

Escrevi um pouco mais sobre também exportar esse backup para outro armazenamento, se ele se adequasse ao objetivo do ponto de recuperação e aos domínios de falha. Mas deixei isso de fora para ser breve. Um bom plano de continuidade de negócios, do qual os backups são apenas uma parte, identifica e lida com esses riscos.
John Mahowald

1

Estou usando o BackupPC no meu pequeno servidor virtual privado, isso funciona razoavelmente bem. O BackupPC pode usar o rsync sob o capô e suporta backups completos e incrementais. Dê uma olhada e veja se isso atenderia às suas necessidades.


1

Execute seu sistema no ZFS. Em seguida, você pode tirar um instantâneo atômico instantâneo usando algo semelhante a:

# zfs snap -r tank@name-of-backup

onde tankestá o nome do seu pool ZFS. Esse instantâneo é garantido como instantâneo instantâneo e instantâneo do sistema de arquivos e de todos os seus sistemas filhos.

Depois de criar o instantâneo, você pode transferi-lo para outro host usando zfs sende ssh.


0

Na minha opinião, depende do que e onde você estiver executando o servidor com o comando linux interno, não for possível, você deve imitar / canalizar dados e bibliotecas completos. Se você estiver executando no vmware e configurado corretamente, ele fornece migração ao vivo. Ou então você tem que usar ferramentas de terceiros. Espero que isso ajude você. Mais algumas referências Como faço para fazer backup de um servidor ativo?

Rsync é um bom comando para sincronizar os dados entre servidores.


0

Existem 2 soluções disponíveis, nas quais você não precisa mais confiar em bits ausentes, nem em um item da lista por causa de uma lista de verificação incompleta ou talvez apenas por algo esquecido.

Primeiramente, se você mover isso para uma plataforma com mais controle sobre a plataforma de hardware subjacente, poderá tirar instantâneos de disco de todos os arquivos enquanto o servidor estiver em execução. Por exemplo, na AWS, você pode capturar instantaneamente um disco EBS e pagar apenas pelas diferenças ao fazer outro instantâneo posteriormente.

Em segundo lugar, recomendo criar um script para a configuração do seu servidor completo com um sistema de gerenciamento de configuração, como o Ansible. Isso vai

  • documentar tudo o que você configurou no controle de origem

  • permitem testar a recriação do servidor a partir de backup ou bare metal, para garantir que seus scripts estejam atualizados

  • permitem executar novamente o script em um sistema operacional mais recente, geralmente com alterações muito pequenas.


1
Acontece que você também pode fazer instantâneos no Linode. Vou dar uma olhada no Ansible! Esse é um tópico secundário do que eu originalmente queria saber, mas algo assim - e eu nunca tinha ouvido falar [quero dizer, eu tinha ouvido falar do dispositivo fictício dos maravilhosos livros Hainish] - parece maravilhoso!
Sandra
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.