Replicando um servidor web linux

5

Estou planejando replicar um servidor da Web para fins de alta disponibilidade. O servidor está rodando como uma máquina virtual Ubuntu 15.04 no Hyper-V e tem o MariaDB 10.0, o Apache 2.4 e o PHP-FPM 5.6 instalados.

A segunda máquina virtual começará como uma cópia direta dessa máquina virtual, mas estará localizada nos Estados Unidos. A primeira máquina virtual está localizada na Europa. (latência será de cerca de 80-120 ms)

Gostaria de manter os servidores em sincronia para que ambos possam servir o mesmo conteúdo para meus clientes e para que os clientes usem o servidor mais próximo (para isso, usarei o Route 53)

É importante que a troca de dados entre os servidores seja segura, para proteger os detalhes de contato e outras informações no banco de dados e para impedir a alteração dos arquivos no diretório / var / www.

Eu considerei usar as seguintes opções para isso:

  • openvpn
  • túnel SSH
  • SSL (TLS)

    1. A minha pergunta é qual é o método mais seguro, mais rápido (latência, rendimento) e mais seguro? Fácil manutenção também é bom ter;)

Eu considerei usar o SSH, tanto para o banco de dados quanto para a replicação de arquivos. No entanto, não tenho certeza de qual aplicativo usar para a parte de replicação de arquivos.

  1. Como devo configurar a replicação dos arquivos e qual aplicativo devo usar para isso?

O SSL pode ser usado para a replicação do banco de dados, mas requer a geração de certificados que precisam ser substituídos de vez em quando e que podem custar dinheiro.

Minha opção final é usar o openvpn, mas não tenho certeza se posso configurá-lo como uma rede adicional, em vez de rotear todo o meu tráfego sobre ele. Este método também parece requerer a geração de arquivos de certificado.

  1. Gostaria de ter a capacidade de adicionar servidores extras ao processo de replicação em um momento posterior, possivelmente nos servidores Windows.
por gijs007 05.05.2015 / 19:26

3 respostas

5

Você não precisa de certificados TLS pagos para sua própria comunicação privada. Você pode configurar sua própria autoridade de certificação (com certificações de longa duração, em caso de comprometimento, apenas descartar a autoridade de certificação inteira) e fazer com que seus servidores confiem nela. Em seguida, você pode emitir quantos certificados quiser para diferentes serviços. Os certificados pagos são necessários apenas quando você não pode fazer com que os hosts remotos confiem em sua CA, como os visitantes do seu site, por exemplo.

Se você só precisa usar um único serviço e ele suporta TLS (como o MySQL), use isso e adicione uma camada adicional de segurança, permitindo apenas conexões dos IPs do seu servidor no nível do firewall.

Se você precisar de mais de um serviço, é melhor ter uma solução de VPN. Não perca tempo com o OpenVPN, o seu kernel tem suporte integrado a IPSec e você pode usá-lo. Além disso, é compatível com o Windows 2000, portanto, se você implantar esses servidores, será fácil configurá-los.

Essa foi a parte fácil. A parte difícil é manter os arquivos do seu aplicativo em sincronia, é fácil se o aplicativo usa apenas um banco de dados, mas se for um CMS de uso geral, há uma boa chance de ele também modificar seus próprios arquivos por qualquer razão (atualizações de plugins para exemplo) ou cria novos (conteúdo enviado pelo usuário, etc) e não sei de nenhuma maneira confiável de mantê-los em sincronia. A única solução que vem à mente é o NFS (e ter apenas um único servidor que hospeda os arquivos, mas isso é contra o seu requisito de HA) ou o GlusterFS, ambos com um desempenho muito ruim com esse tipo de latência.

    
por 06.05.2015 / 00:42
3

rsync é uma ótima ferramenta para manter os arquivos em sincronia. Eu usaria isso em combinação com SSH (e chaves públicas), assim:

rsync -az -e ssh --delete /var/www otherserver:/var/www

Para vários servidores, vários usos de rsync podem ser a melhor opção. Outra opção é pdcp -r , mas isso requer copiar todos os arquivos toda vez, em vez de fazer transferências delta. Em outras palavras, é melhor para pequenas quantidades de dados e muitos servidores.

A melhor maneira de fazer a replicação de banco de dados depende muito do que seu aplicativo faz. Há muitos bons conselhos nos documentos do MariaDB e outras perguntas por aqui.

    
por 05.05.2015 / 22:20
3

Você não menciona, mas suponho que esteja após uma configuração multi-master. Isso exclui as configurações do banco de dados master-slave.

Acredito que a tecnologia usada para segurança será a menor das suas preocupações.

1. Banco de Dados

Manter uma configuração de banco de dados multi-mestre é sincronia é complicado. Você pode ir com configurações de banco de dados multi-master (ativo / ativo) como o MariaDB com o Galera Cluster, mas não tenho tanta certeza se essa é uma boa ideia considerando a distância geográfica. Todas as gravações serão síncronas para todos os nós do banco de dados. A latência afetará muito o desempenho do banco de dados. Os clusters de bancos de dados, como o Galera, são geralmente descritos como bons candidatos em uma única LAN. No entanto, do ponto de vista do desempenho, os clusters de bancos de dados multi-mestre são geralmente descritos como estando em situação pior quando se trata de configurações de alta disponibilidade "real", nas quais os nós de banco de dados estão espalhados por vários locais físicos em uma WAN. Antes de pular para uma configuração de banco de dados multi-mestre, leia primeiro o tópico. Comece com uma olhada no Blog de expansão .

Você também pode adotar outra abordagem e analisar o SymmetricDS, que permite manter os bancos de dados sincronizados. Ele usa gatilhos para capturar operações CRUD do banco de dados. Ele não irá replicar alterações de esquema, usuários ou qualquer outra coisa além de dados puros. No entanto, isso será replicação assíncrona e não cuidará de, por exemplo, chaves primárias incrementadas automaticamente, como um cluster MariaDB Galera.

2. Arquivos

Você poderia usar um servidor NFS central, mas isso frustraria o propósito de vários mestres (e nenhum ponto único de falha). Eu usei csync2 (com lsyncd) para manter os nós da web em sincronia com o sucesso (rsync sob o capô).

Recomendação geral

Você está fazendo isso por desempenho ou por alta disponibilidade? Se você fizer isso por desempenho, um único local e um servidor Varnish na frente o levarão para longe. Eu sei que você ainda terá a latência, mas você será capaz de "raspar" a sobrecarga do servidor através do cache. Você pode até adicionar servidores Varnish em outros locais. A complexidade será bastante reduzida (nunca subestime isso; mantenha-o simples). Top isso com um CDN para ativos (CSS, js, imagens etc) e você provavelmente será capaz de fornecer aos usuários dos EUA uma experiência de usuário tão boa quanto os usuários europeus (se você basear seu serviço na Europa).

Se você fizer isso para alta disponibilidade, será necessário adicionar complexidade ao apresentar a replicação.

    
por 06.05.2015 / 07:37