Apache - alta disponibilidade

2

Estou procurando uma maneira de configurar o Apache como alta disponibilidade. A ideia é ter um cluster de 2 ou mais servidores Apache servindo os mesmos sites. Eu posso ter o endereço IP de cada servidor configurado com o DNS round-robin para que cada solicitação seja enviada aleatoriamente para um dos servidores no cluster (ainda não estou muito preocupado com o balanceamento de carga, embora isso possa entrar em jogar mais tarde).

Eu já o configurei e trabalhei com vários servidores Apache VM (distribuídos por vários servidores físicos) que servem sites e DNS round-robin, e isso funciona bem. O banco de dados SQL é configurado usando MariaDB em um cluster de alta disponibilidade, os dados da web (HTML, JS, scripts PHP, imagens, outros recursos) são armazenados em LizardFS e as sessões são armazenadas em um local compartilhado também. Isso tudo funciona bem até que um dos servidores no cluster fique inacessível por qualquer motivo. Em seguida, uma porcentagem das solicitações (aproximadamente o número de servidores inativos dividido pelo número total de servidores no cluster) não está atendida. Aqui estão as opções que eu considerei:

Atualizações automáticas de DNS

Tenha algum processo que monitore a funcionalidade dos servidores da Web e remova todos os servidores inativos do DNS. Isso tem dois problemas:

  • Primeiro, embora possamos definir nosso TTL para um número muito baixo (como 5 segundos), ouvi dizer que um punhado de servidores DNS reforçará um TTL mínimo maior que o nosso. E alguns navegadores (ou seja, Chrome) armazenará em cache DNS por não menos de 60 segundos, independentemente do TTL definições. Então, apesar de sermos bons do nosso lado, alguns clientes podem não ser capaz de acessar sites por algum tempo no caso de uma atualização de DNS.

  • Em segundo lugar, o programa que monitora a funcionalidade do cluster
    e atualiza registros DNS se torna um novo ponto único de falha. Nós
    pode ser capaz de contornar isso por ter mais de um monitor espalhado em vários

sistemas, porque se ambos detectarem um problema e ambos fizerem as mesmas alterações de DNS, isso não deverá causar nenhum problema.

uCarp / Heartbeat

Torne os endereços IPs que são acessados e no DNS de round-robin virtuais, e faça com que sejam reatribuídos para servidores de servidores inativos no caso de um servidor ficar inativo. Por exemplo, o VIP do server1 é 192.168.0.101 e o VIP do server2 é 192.168.0.102. Se server1 cair, então 192.168.1.102 se torna um IP adicional no server2. Isso tem dois problemas:

  • Primeiro, que eu saiba, o uCarp / Heartbeat monitora seus pares especificamente para inacessibilidade, por exemplo, se o par não pode ser pingado. Quando isso acontece, ele assume o IP do peer abatido. Este é um problema porque há mais razões para um servidor web não ser capaz de atender a solicitações que não sejam apenas inacessíveis no rede. O Apache pode ter falhado, um erro de configuração pode existir ou Outra razão. Eu gostaria que o critério fosse "o servidor não é servindo páginas conforme necessário "em vez de" o servidor não é pingável ". Eu não acho que eu possa definir isso no uCarp / Heartbeat.

  • Em segundo lugar, isso não funciona nos datacenters, porque cada conjunto de servidores em datacenters têm diferentes blocos de endereços IP. Eu não pode ter um flutuador de IP virtual entre os data centers. O requerimento para funcionar em centros de dados (sim, meu sistema de arquivos distribuídos e cluster de banco de dados estão disponíveis em datacenters) não é necessário, mas seria uma boa vantagem.

Pergunta

Então, algum pensamento sobre como lidar com isso? Basicamente, o santo graal da alta disponibilidade: nenhum ponto único de falhas (no servidor, no balanceador de carga ou no data center) e praticamente nenhum tempo de inatividade no caso de uma troca.

    
por Nick Coons 17.01.2017 / 03:48

1 resposta

3

Quando eu quero HA e compartilhamento de carga, eu uso keepalived e configuro com dois VIPs. Por padrão, o VIP1 é atribuído ao servidor1 e o VIP2 é atribuído ao servidor2. Quando qualquer servidor está inativo, o outro servidor recebe os dois VIPs.

O Keepalived cuidará do HA observando o outro servidor. Se um servidor não estiver acessível ou qualquer interface estiver inativa, ele será alterado para FAULT state. VIP será levado por outro servidor. Para monitorar seu serviço, você pode usar a opção track_script .

Se você quiser adicionar outro cluster em outro datacenter, poderá adicionar mais dois servidores e fazer a mesma configuração. Agora, você pode compartilhar o tráfego entre os datacenters usando o round-robin de DNS. Nenhuma atualização de DNS é necessária neste caso.

    
por 17.01.2017 / 09:33