Como configurar um servidor linux redhat / centos / amazon para 1 milhão de conexões tcp abertas?

4

Eu tenho lido o seguinte artigo:

E imaginando se há algo mais que eu precise saber sobre o ajuste do linux para lidar com 1 milhão de conexões tcp? Até agora eu reduzi-o ao seguinte:

  • Configurando o kernel para suportar conexões de 1mil, em todo o sistema (sysctl.conf)
  • Configurando para ter conexões de 1mil para o usuário específico (/etc/security/limits.conf)
  • Configurando as configurações de memória de pilha tcp (sysctl.conf?)

Existe mais alguma coisa que eu preciso configurar? (isto é para um servidor EC2 grande de 64 bits)

-edit -

Não é o apache, é um servidor FYI codificado personalizado baseado em libev. Ele vai escalar para 1mil bem, é o kernel que é a minha preocupação :)

    
por Chris 26.08.2011 / 06:12

3 respostas

1

Eu estava tendo problemas para configurar as configurações por usuário, eu continuei alterando o número de arquivos no arquivo limits.conf, mas ele não permitiria que eu fizesse login novamente, eu tinha que terminar a instância do ec2. Desde então descobri que 1024 * 1024 é o máximo que você pode colocar no limits.conf, e você vai abri-lo:

echo "* soft nofile 1048576" >> /etc/security/limits.conf 
echo "* hard nofile 1048576" >> /etc/security/limits.conf   

Além disso, e as adições ao sysctl mencionadas nos links do blog do mochiweb, há algo mais que eu preciso fazer?

Muito obrigado pessoal. Eu estou realmente ansioso para ver se eu posso empurrar este servidor para lidar com conexões de 1mil ...

    
por 27.08.2011 / 09:08
1

Você tem a maioria dos ajustes configurados que eu teria definido (e tinha que definir). Uma coisa que encontrei quando escalamos assim foi que você sempre terá algo especial em seu ambiente que ninguém mais mencionou. Para entender isso, você precisa se certificar de que está assistindo e alertando sobre:

  • erros via syslog
  • erros que seu programa vê como falhas de socket (), etc.
  • disponibilidade do buffer de rede (via SNMP ou netstat cron)
  • limites da tabela de kernel (novamente via SNMP ou arquivo / proc analisando crons)
  • monitoramento frequente (pesquisas muito leves feitas a cada 1-10ms, usamos o OpenNMS, que faz isso com muita facilidade, porque o OpenNMS é incrível).

Outra coisa que você pode encontrar são problemas com o valor de HZ. Em nossos sistemas FreeBSD aumentamos isso. Eu estava investigando outra questão no linux e corri para um caso em que as filas de soquete são limpas em relação ao valor de HZ:

Conexões TIME_WAIT não sendo limpo após expirar o período de tempo limite

Em relação ao comentário, eu não acho que o FreeBSD especificamente será melhor nisso, ambos precisam de grandes quantidades de ajustes para funcionar. Estamos usando o FreeBSD porque as caixas se conectam diretamente à internet e o OpenBGPD é atualmente a melhor implementação de BGP de código aberto disponível.

    
por 28.08.2011 / 16:22
-2

Depende das especificações do servidor e do tipo de conteúdo que ele serve. Pode não ser possível, (direito simultâneo?) Se estiver servindo conteúdo e mídia ativos. Banco de dados e sites pequenos devem fazer bem. Na configuração do apache, tente iniciar muitos encadeamentos de trabalhador / filho. Na própria caixa, basta testar para ver se o Apache vai lidar com isso. Se o apache pode, mas não a caixa, talvez alguém possa ajudar com isso. Desculpa. Boa sorte.

Sim, desculpe por não ter lido completamente.

    
por 26.08.2011 / 06:32