Eu queria saber se é possível espelhar dois servidores, como você poderia fazer upload de arquivos para um servidor e eles enviariam para o outro servidor etc. Estou mais curioso em espelhar arquivos, ele não precisa espelhar o gerenciamento de pacotes e setup (Mas isso seria legal também!)
8
Respostas:
Depende muito do trabalho em questão.
Por que você precisa de espelhamento de arquivos. Deseja atualizar algo como um site ou repositório de conteúdo em que normalmente não há problema em 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 armazenamento temporário na qual você carrega todos os seus dados. E de onde você o distribui para os servidores. No seu caso - com dois servidores - você pode criar algum compartilhamento de arquivos temporário no srv1 para onde transfere os dados (via FTP, NFS, DAV, SFTP etc.) e depois fazer um cronograma sincronizar os arquivos nos diretórios "ao vivo" de 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 em seu cluster.
Exemplo:
Isso deve lhe dar uma idéia básica. É claro que você deseja agrupar as chamadas rsync em alguns scripts e implementar um bloqueio adequado para que não seja executado duas vezes, caso a sincronização demore mais de 5 minutos, etc. Além disso, não é necessário dizer que uma área de teste não é obrigatória. Você também pode sincronizar srv1: production com srv2: production diretamente. Apenas o srv2 pode mostrar dados até 5 minutos mais antigos que o 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. Coloque-os em um repositório central e instale-os / atualize através de algo como cfengine, monkey ou alguma solução baseada em barramento de mensagem diy. Isso tem o bom efeito colateral da versão dos dados implantados, mas é adequado apenas para quantidades menores de dados que você produz e implanta (como versões do seu próprio software). Você não gostaria de distribuir TBs de dados com isso e também não é adequado para espelhar conteúdo que muda com 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, poderá usar algum método baseado em inotify, como o incron já mencionado, para chamar seus scripts de sincronização. Outra possibilidade é usar o Gamin (que também usa inotify, se presente no Kernel) e escrever seu próprio pequeno daemon de sincronização. Por último, mas não menos importante, se todos os arquivos forem carregados em um servidor via, por exemplo, SFTP, você poderá verificar se o seu servidor SFTP permite definir ganchos que são chamados após determinados eventos, como o upload de arquivos. Dessa forma, você pode dizer ao seu servidor para ativar seu script de sincronização sempre que novos dados forem carregados.
Se você precisar de espelhamento síncrono de dados em tempo real, um sistema de arquivos em cluster pode estar em ordem. DRDB já foi nomeado. É muito bom para replicação no nível do bloco e frequentemente usado para configurações MySQL disponíveis com alta disponibilidade. 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.
fonte
Basicamente, você tem 3 possibilidades:
fonte
cron + rsync = diretórios / arquivos espelhados
fonte
Dependendo do seu caso de uso específico - Você pode usar algo semelhante ao DRBD http://www.drbd.org/
fonte
Se você está tentando criar uma solução de backup aqui (o que eu pessoalmente fiz na mesma configuração), tenha cuidado. Você precisa fazer backup de muitos aspectos diferentes, um dos quais (possivelmente) é o maior apagamento acidental - qualquer sistema de replicação ativo apenas replicará o apagamento e não fornecerá segurança. Para essa replicação diária, funciona, mas é uma resposta bastante fraca. Experimente o RSnapshot.
O uníssono pode muito bem funcionar para você, mas não tenho experiência pessoal.
A execução do Rsync nas duas direções com os sinalizadores apropriados pode funcionar, mas tem a questão bastante complicada de como lidar com arquivos excluídos, sem manipulação especial, simplesmente restaura os arquivos, o que é bom se você nunca excluir algo como eu, mas um pouco pobre caso contrário. Também faz coisas estranhas se um arquivo é movido.
Seja lá o que você estiver fazendo, se houver uma situação em que os arquivos possam ser editados simultaneamente nas duas extremidades, você terá um problema. uníssono é a única solução que conheço que pode lidar com isso de maneira satisfatória.
fonte
Se for unidirecional (quero dizer, sempre de um servidor para outro servidor, mas não vice-versa), você poderá usar
incron
. É como o cron, mas baseado em eventos do sistema de arquivos.Sempre que um arquivo é criado ou alterado, ele aciona um scp ou rsync no outro servidor.
Bidirecional tem o problema de loops :).
fonte
depende de suas necessidades ..... eu tenho uma configuração muito "barata e fácil" para servidores da web em cluster.
Eu simplesmente tenho um "servidor de arquivos" (NFS) onde todos os servidores web montam os seguintes diretórios:
morto simples e trabalhando
fonte
clonezilla também pode olhar para o que usa rsync
fonte