Puncte:1

Utilizarea rotundă a IP-urilor multiple pentru conexiuni de ieșire pe o singură interfață

drapel us

problema mea: Am un proces care creează mai mult de 10k TCP-Connection la aceeași destinație IP&Port pe secundă. După o perioadă scurtă de timp, nu mai pot fi create conexiuni noi, deoarece nu mai sunt porturi sursă disponibile.

Am încercat deja să atenuez acest lucru prin setare net.ipv4.ip_local_port_range și net.ipv4.tcp_fin_timeout dar nu a rezolvat problema.

Acum gândul meu a fost: dacă aș putea spune nucleului să adreseze IP sursă rotunjite, atunci aș putea adăuga cu ușurință mai multe IP-uri la singura mea interfață și, prin urmare, am o limită mai mare de conexiuni de ieșire.

Am încercat să adaug mai multe rute către aceeași destinație prin aceeași interfață, dar am specificat IP-uri surse diferite:

IP route add default prin 10.1.1.1 dev eth0 src 10.1.1.10
ruta ip adăugați implicit prin 10.1.1.1 dev eth0 src 10.1.1.11

Dar înțeleg RTNETLINK răspunde: Fișierul există.

Sunt pe drumul cel bun aici? Adăugarea unui alt IP sursă este „they way to go” în acele cazuri?

Există o modalitate de a rotunji robin / echilibrare încărcătură utilizarea IP-urilor sursă prin nucleu cumva?

Speranța mea a fost că, în cazul în care reușesc să plasez două rute cu aceeași greutate, dar cu adrese src diferite către aceeași rețea, kernel-ul ar face round robin that.

(De fundal: rulez HAproxy pe acea mașină și trebuie să echilibrez încărcarea a mai mult de 10.000 conexiuni către un singur server backend)

Puncte:3
drapel iq

Nu ușor prin nucleu, nu.

Rulez HAproxy pe acea mașină și trebuie să echilibrez încărcarea mai mult de 10.000 conexiuni către un singur server backend

Puteți spune haproxy să folosească o anumită adresă IP sursă pentru conexiunile de ieșire la un server, de exemplu:

  server app1_s1 10.0.1.1:80 sursa 10.1.1.10
  server app1_s2 10.0.1.1:80 sursa 10.1.1.11
  server app2_s1 10.0.1.2:80 sursa 10.1.1.10
  server app2_s2 10.0.1.2:80 sursa 10.1.1.11
drapel us
Asta ar preveni problema mea, așa că mulțumesc pentru asta până acum :) Speranța mea era să las nucleul să se ocupe de asta, dar dacă nu este posibil, atunci voi merge cu asta. Când ați spus „Nu ușor prin nucleu, nu”, înseamnă că nu există o cale ușoară sau înseamnă că de fapt nu există nicio cale? Nu prea îmi place faptul că atunci trebuie să definesc fiecare server backend de două ori, dar voi adresa acest lucru către HAProxy și voi face o solicitare de caracteristică pentru a adăuga mai mult de un IP sursă la o linie de server / la un bloc de configurare backend.
drapel iq
este ceva ce îmi lipsește și este disponibil pentru alte produse - capacitatea de a specifica mai multe adrese sau o serie de adrese de utilizat aici în loc de una singură.
Puncte:2
drapel za

Încă nu. net.ipv4.ip_local_port_range ar trebui să fie suficient chiar și cu setările implicite. Deci pun pariu că fie aveți mai mult de 10.000 conexiuni, fie diagnosticați greșit.

Vezi, „ipsrc:port ipdst:port” cvadrupletul este unic în întreaga stivă IP a mașinii și, deoarece numărul total de porturi dintr-o stivă de rețea este de 65536, acest lucru vă oferă posibilitatea de a avea 65536 conexiuni într-o teorie. Bine, minus blocul WKS (-1024), dar acest lucru ți-a oferit totuși 55536 de conexiuni cu o modificare manipulată. net.ipv4.ip_local_port_range. Trebuie să mergeți cu IP-uri/interfețe suplimentare numai dacă aveți nevoie de mai mult decât atât.

Și, de obicei, această problemă este rezolvată prin adăugarea mai multor IP-uri client și/sau IP-uri de server dacă destinația se află și în interiorul stivei dvs. sau cu utilizarea mai multor tabele de rutare dacă nu este.

drapel us
Am 10.000 conexiuni noi pe secundă și au o viață destul de scurtă. Dar: Odată ce conexiunile sunt închise (din câte am înțeles), acestea intră în starea TIME_WAIT. Deci nu sunt utilizabile timp de 60 de secunde. Și de aceea se pare că am epuizat și `net.ipv4.ip_local_port_range` modificat:/ Serverul nu este cu adevărat în stiva mea, așa că nu există o opțiune pentru mine să fac ajustări. De aceea am vrut să optez cu opțiunea de a folosi mai multe adrese IPv4 pe aceeași interfață și de a lăsa să echilibreze sarcina nucleului între acestea.
drookie avatar
drapel za
Numărul total de conexiuni contează, nu doar cele STABILITE. Conexiunea este o conexiune indiferent de starea sa.
drapel us
Da, sunt conștient de asta. Și, deoarece cantitatea de conexiune depășește porturile disponibile, chiar și după ajustarea `net.ipv4.ip_local_port_range`, caut o modalitate de a obține în mod ideal echilibrul nucleului între mai multe IP-uri surse pe o singură interfață. (Deoarece nu pot edita nimic din partea serverului) Numai dacă nucleul nu este capabil să facă asta, aș opta pentru cealaltă opțiune de a face ca HAProxy să gestioneze mai multe IP-uri surse.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.