2 votes

Utilisation circulaire de plusieurs IP pour les connexions sortantes sur une seule interface

Mon problème : J'ai un processus qui crée plus de 10k connexions TCP vers la même destination IP&Port par seconde. Après un court laps de temps, aucune nouvelle connexion ne peut plus être créée, car il n'y a plus de ports sources disponibles.

J'ai déjà essayé d'atténuer ce problème en définissant net.ipv4.ip_local_port_range y net.ipv4.tcp_fin_timeout mais cela n'a pas résolu le problème.

J'ai alors pensé : Si je pouvais dire au noyau d'effectuer un round robin des adresses IP source, alors je pourrais facilement ajouter plus d'adresses IP à mon interface et donc avoir une limite plus élevée de connexions sortantes.

J'ai essayé d'ajouter plusieurs itinéraires vers la même destination via la même interface mais en spécifiant des IP source différentes :

ip route add default via 10.1.1.1 dev eth0 src 10.1.1.10
ip route add default via 10.1.1.1 dev eth0 src 10.1.1.11

Mais j'obtiens RTNETLINK answers: File exists .

Suis-je sur la bonne voie ? L'ajout d'une autre source de propriété intellectuelle est-il la meilleure solution dans ces cas-là ?

Existe-t-il un moyen d'équilibrer l'utilisation des IP sources par le biais du noyau ?

J'espérais qu'au cas où je parviendrais à placer deux routes avec le même poids mais des adresses src différentes vers le même réseau, le noyau ferait un round robin.

(Contexte : Je fais tourner HAproxy sur cette machine et je dois équilibrer la charge de plus de 10k connexions vers un seul serveur backend).

3voto

MikeyB Points 38317

Pas facilement via le noyau, non.

J'utilise HAproxy sur cette machine et je dois équilibrer la charge de plus de 10 000 connexions vers un seul serveur backend.

Vous pouvez demander à haproxy d'utiliser une adresse IP source spécifique pour les connexions sortantes vers un serveur, par exemple :

  server app1_s1 10.0.1.1:80 source 10.1.1.10
  server app1_s2 10.0.1.1:80 source 10.1.1.11
  server app2_s1 10.0.1.2:80 source 10.1.1.10
  server app2_s2 10.0.1.2:80 source 10.1.1.11

2voto

drookie Points 7850

Ce n'est toujours pas le cas. net.ipv4.ip_local_port_range devrait suffire, même avec les paramètres par défaut. Je parie donc que soit vous avez bien plus de 10K connexions, soit vous avez fait un mauvais diagnostic.

Voir, le "ipsrc:port ipdst:port" Le quadruplet est unique dans la pile IP de la machine, et comme le nombre total de ports dans une pile réseau est de 65536, cela vous donne la possibilité d'avoir 65536 connexions dans une théorie. D'accord, nous avons soustrait le bloc WKS (-1024), mais cela vous a tout de même permis d'obtenir 55536 connexions avec un bloc WKS altéré. net.ipv4.ip_local_port_range . Vous ne devez opter pour les IP/interfaces supplémentaires que si vous avez besoin de plus que cela.

En général, ce problème est résolu par l'ajout d'autres adresses IP de clients. et/ou si la destination se trouve également à l'intérieur de votre pile, ou en utilisant plusieurs tables de routage si ce n'est pas le cas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X