Existe uma maneira de espelhar dois servidores no Ubuntu?

8

Eu queria saber se é possível espelhar dois servidores, como você poderia fazer upload de arquivos para um servidor e eles iriam para o outro servidor, etc. Estou mais curioso para o espelhamento de arquivos, ele não tem que espelhar gerenciamento de pacotes e configuração (Mas isso seria legal também!)

    
por Kyle 07.03.2010 / 03:23

8 respostas

6

Depende muito do trabalho em questão.

Por que você precisa do espelhamento de arquivos? Você quer atualizar algo como um site ou repositório de conteúdo, onde normalmente é recomendável atualizar periodicamente. Ou você precisa de sincronização de dados em tempo real?

Para o espelhamento assíncrono periódico de arquivos, geralmente é suficiente ter uma Área de Preparação para a qual você carregou todos os seus dados. E de onde você distribui para os servidores. No seu caso - com dois servidores - você pode criar alguns arquivos compartilhados em srv1 para onde você transfere os dados (via FTP, NFS, DAV, SFTP, etc.) e então ter um cronjob rsync os arquivos para os diretórios "live" do srv1 e srv2. A maneira mais fácil de usar o rsync nesse caso é gerar um par de chaves ssh que você usará para transferências de dados e que está autorizado em todos os servidores do cluster.

Exemplo:

srv1:/data/staging/  <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/

srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====

Isso deve lhe dar uma ideia básica. Claro que você gostaria de quebrar as chamadas rsync em alguns scripts e implementar um bloqueio adequado para que ele não seja executado duas vezes caso a sincronização demore mais de 5 minutos, etc. Além disso, não é preciso dizer que uma área de teste não é obrigatória. Você também pode sincronizar srv1: production para srv2: production diretamente. Apenas que srv2 pode mostrar dados até 5min mais antigos que o de srv1. O que pode ser um problema, dependendo de como você equilibra os dois.

Outra maneira de distribuir arquivos de forma assíncrona é empacotá-los como rpm ou, no seu caso, arquivos deb. Colocá-los em um repositório central e tê-los instalar / atualizar através de algo como cfengine, monkey ou alguma solução baseada em barramento de mensagens diy. Isso tem o efeito colateral agradável de versionamento de dados implantados, mas é adequado apenas para quantidades menores de dados que você produz e implanta sozinho (como versões de seu próprio software). Você não iria querer distribuir TBs de dados com isso e também não é adequado para espelhar conteúdo que muda com uma alta frequência, como a cada dois minutos.

Se você precisar replicar dados quase em tempo real, mas não necessariamente síncrono, em vez de chamar um cron de vez em quando, pode usar algum método baseado em inotify, como o já mencionado, para chamar seus scripts de sincronização. Outra possibilidade é usar o Gamin (que também usa inotify se estiver presente no Kernel) e escrever seu próprio daemon de sincronização. Por último, mas não menos importante, se todos os arquivos são enviados para um servidor, por exemplo, SFTP você pode verificar se seu servidor SFTP permite que você defina ganchos que são chamados após determinados eventos, como upload de arquivo. Dessa forma, você poderia dizer ao seu servidor para acionar seu script de sincronização sempre que novos dados forem enviados.

Se você precisar de espelhamento síncrono de dados em tempo real, um sistema de arquivos em cluster pode estar em ordem. O DRDB já foi nomeado. É muito bom para replicação no nível de bloco e geralmente usado para configurações de alta disponibilidade do MySQL. Você também pode querer dar uma olhada no GFS2, OCFS2, Luster e GlusterFS. Embora o Luster e o GlusterFS não sejam realmente adequados para uma configuração de dois servidores.

    
por 07.03.2010 / 07:49
5

Basicamente você tem 3 possibilidades:

  1. Deixe seu aplicativo enviar os arquivos para os dois servidores.
  2. Replicação assíncrona, e. g. rsync a cada 15 minutos (ou menos) com um cron job
  3. Replicação síncrona no sistema de arquivos (por exemplo, GlusterFS ) ou nível de dispositivo de bloco (por exemplo, DRBD ). Se você usar a replicação no nível de dispositivo de bloco, precisará de um sistema de arquivos que suporte o bloqueio distribuído (por exemplo, OCFS2 ou GFS2 ) se você quiser ter acesso r / w aos arquivos de ambos os servidores ao mesmo tempo.
por 07.03.2010 / 07:40
2
por 07.03.2010 / 04:05
1

Dependendo do seu caso de uso específico - Você pode usar algo semelhante ao link do DRBD

    
por 07.03.2010 / 04:17
1

Se você está tentando criar uma solução de backup aqui (que eu pessoalmente fiz em praticamente a mesma configuração), seja cuidadoso. Há muitos tipos diferentes que você precisa fazer backup, um dos (sem dúvida o) maior sendo accedental exclusão - qualquer sistema de replicação ao vivo apenas irá replicar a exclusão e provice nenhuma segurança. Para esta replicação diária funciona, mas é uma resposta bastante fraca. Tente RSnapshot.

O uníssono pode muito bem trabalhar para você, mas eu não tenho nenhuma experiência pessoal.

Rodar o Rsync em ambas as direções com os sinalizadores aproprate pode funcionar, mas ele tem o problema complicado de como lidar com arquivos apagados, sem handeling especial, ele simplesmente restaura os arquivos, o que é bom se você nunca excluir nada como eu, mas um pouco pobre de outra maneira. Também faz coisas estranhas se um arquivo é movido.

Seja o que for que você esteja fazendo, se alguma situação pode ocorrer onde os arquivos podem ser editados simultaneamente em ambas as extremidades, você tem um problema. O uníssono é a única solução que eu conheço que pode acompanhar isso até mesmo de forma satisfatória.

    
por 07.03.2010 / 17:26
0

Se for unidirecional (quer dizer, sempre de um servidor para outro servidor, mas não vice-versa), você pode usar incron . É como o cron, mas baseado em eventos do sistema de arquivos.

Toda vez que um arquivo é criado ou alterado, ele aciona um scp ou rsync para o outro servidor.

Bidirecional tem o problema de loops:).

    
por 07.03.2010 / 05:35
0

depende das suas necessidades ..... eu tenho uma configuração muito "barata e fácil" para servidores web em cluster.

Eu simplesmente tenho um "servidor de arquivos" (NFS) onde todos os servidores web montam os seguintes diretórios:

/etc/apache/sites-enabled
/etc/apache2/sites-avaliable
/var/www

morto simples e trabalhando

    
por 08.03.2010 / 17:35
0

o clonezilla também pode ver o que usa o rsync

    
por 15.06.2012 / 14:24

Tags