Filosofia de escalar o número de conexões de rede com o Centos 5.5

1

Esta manhã eu recebi este é o meu log dmesg:

[3184815.656881] nf_conntrack: table full, dropping packet.
[3184821.442351] net_ratelimit: 282 callbacks suppressed

FWIW, aqui está o max atual:

cat /proc/sys/net/netfilter/nf_conntrack_max 
65536

Então, posso ver que o servidor está descartando conexões TCP porque não consegue rastreá-las todas. Eu sei que posso apenas definir um novo número máximo em sysctl.conf ou fazer echo em / proc / sys / net / netfilter / nf_conntrack_max, mas não tenho certeza se esse é o melhor caminho a tomar.

Eu estaria configurando o kernel para a morte certa? Existe uma abordagem melhor para lidar com LOTES de conexões de rede?

Obrigado antecipadamente

    
por brycemcd 04.04.2011 / 21:15

2 respostas

5

Em termos de nf_conntrack_max , você está limitado apenas pela quantidade de memória do kernel disponível. A memória do kernel não pode ser trocada, então é a RAM real.

TLDR: Em sistemas modernos eu configurei isso para 128k aparentemente sem nenhum efeito negativo.

Outro ajuste que você pode querer ajustar, no entanto, é /proc/sys/net/netfilter/nf_conntrack_buckets . Toda vez que um pacote é examinado, ele é dividido em um dos hashsize buckets (com base no src / dst IP e na porta). Cada bucket contém uma lista vinculada que precisa ser pesquisada para a conexão específica. Aumentar o número de depósitos deve (até certo ponto) diminuir o número de nós na lista vinculada que precisam ser percorridos e, portanto, aumentar o desempenho. A desvantagem é que quanto mais baldes você tiver, maior a probabilidade de baldes vazios. Um balde vazio pega a memória do kernel. É por isso que você não define hashsize = nf_conntrack_max . Não consegui encontrar nenhuma recomendação sobre a configuração do hashsize, exceto a declaração "Em circunstâncias normais, ip_conntrack_max é igual a 8 * hashsize".

Outra coisa a notar é que, quando suas conexões são de curta duração (por exemplo, um servidor da Web), você pode ter muitas conexões no estado TIME_WAIT com entradas correspondentes no hash conntrack. cat /proc/net/nf_conntrack | grep TIME | wc -l ( ip_conntrack em kernels mais antigos) ou iptstate devem informar essa informação. Para reduzir o tempo limite para essas alterações /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait . Você provavelmente também deseja alterar /proc/sys/net/ipv4/tcp_fin_timeout .

Finalmente, se você realmente precisa de desempenho e não pode arcar com a RAM, você pode desativar completamente o firewall e colocar um firewall dedicado a partir do servidor.

    
por 05.04.2011 / 01:09
1

Você realmente precisa de rastreamento de conexão? Dê uma olhada nas regras do seu firewall e veja se você consegue não usá-lo. Se você acabou de ter um servidor web simples, você quase certamente não precisa usar o rastreamento de conexão.

Em geral, se você está lidando com muito tráfego, você quer que o firewall tenha que fazer o mínimo possível. Desativar o rastreamento de conexão seria um bom começo. (É muito mais fácil olhar para um pacote e dizer 'Isso vai para a porta 80? Se não for, solte-o.' Então 'Isso vai para a porta 80, e eu vi essa conexão do mesmo IP / Port / Sessão TCP # antes? '

    
por 05.04.2011 / 01:55