Perda de conexão do banco de dados com alto tráfego na AWS - não tenho certeza de onde começar a solução de problemas

1

Estou projetando um site WP altamente disponível no AWS usando o Elastic Beanstalk e testando o uso de carga com um Locust.

Tudo parece bem: meus EC2s são t2.mediums, dimensionados automaticamente em 3-6 zonas de disponibilidade. O balanceador de carga está configurado para balanceamento de carga de "zona cruzada" (portanto, o tráfego deve ser distribuído para três servidores em três zonas diferentes), estou usando Aurora (db.t2.medium) com uma configuração de réplica de leitura mestre > p>

As coisas estão bem quando eu visito o site no meu navegador, mas assim que eu giro Locust (com 100-500 usuários, 90-100 segundos de espera, 10 taxa de hachura do usuário) meu site perderá quase instantaneamente a conexão para o banco de dados e, eventualmente, lançar um erro de 50x.

Minha configuração do Apache / PHP é bastante simples do Beanstalk (Amazon Linux AMI, php 5.6), especificações listadas abaixo.  O opcache é ativado por padrão, mas o phpfpm não está instalado no momento.

Aqui está um diagrama da minha configuração e, em seguida, as especificações:

  • EC2
    • 3 t2.Médios
    • 2 vCPUs
    • 24 créditos da CPU / hora
    • 4g de RAM
  • Apache 2.4
  • PHP 5.6
    • upload_max_filesize = > 64 mi
    • post_max_size = > 64 mi
    • max_execution_time = > 120
    • memory_limit = > 256M
    • Opcache
    • opcache.enable = 1
    • opcache.memory_consumption = 128
    • opcache.interned_strings_buffer = 8
    • opcache.max_accelerated_files = 4000

Não tenho certeza se esse é um problema de configuração de hardware ou se preciso ajustar o PHP / Apache / MySql

    
por rugbert 10.08.2018 / 17:12

1 resposta

0

OK, então acho que tive vários problemas:

  1. Quando criei originalmente os bancos de dados, fiz t2.micros que, por padrão, permitem apenas 40 conexões de uma só vez. Mais tarde, mudei a instância, para os médios, mas as conexões máximas pareciam permanecer as mesmas. Eu recriei os DBs em t2.mediums e os max_connections agora são 90 e eu posso aumentar se necessário.

  2. Eu interpretei mal a documentação do Locust, e eu tinha definido o teste para acertar o site a cada 90ms, então cada 0,09 segundo é muito. Eu só aumentou o tempo de acerto para 3-10 segundos (segundos reais) e os servidores aguentam bem agora.

Aumentar os usuários Locust para 200, no entanto, resulta em uma taxa de falha de 75% (desconexão de banco de dados), mas acho que posso ajustar o max_connections ainda mais, ou jogar um CDN na frente do site (o que eu farei mesmo assim )

@ michael-sqlbot recebe o prêmio aqui, ele me levou para o caminho certo.

    
por 13.08.2018 / 20:37