Puncte:0

Cum se configurează HAProxy pentru mai mult de 500.000 de conexiuni care rulează într-un container Docker pe o gazdă Linux?

drapel br

Aș dori ca HAProxy Load Balancer să poată gestiona cel puțin 1 milion de conexiuni. Am nevoie de asta pentru a implementa un test de stres.

Am incercat sa setez:

maxconn 1000000

in al meu haproxy.cfg dar HAProxy nu a reușit să înceapă cu:

[haproxy.main()] Nu se poate ridica limita FD la 2000029, limita este 1048576.

Rulez HAProxy într-un container Docker pe Ubuntu Linux 20.04 LTS, care este o instanță VPS Amazon AWS Lightsail.

M-am uitat la diverse întrebări pe internet despre cum să măresc manual deschide fișiere limita (ulimit -n) și copiere lipite numeroase configurații în gazda mea. Nimic nu a funcționat - nu am putut crește această limită la nimic mai mare decât 1048576.

Am găsit următoarele postări legate de subiectul limitării stricte a numărului de fișiere deschise:

Această întrebare pare aproape identică cu a mea:

Abordez problema dintr-un unghi greșit? Există o altă modalitate de a configura HAProxy astfel încât să poată gestiona un milion de conexiuni (adică, fără a crește ulimit -n)?

Gerard H. Pille avatar
drapel in
Nu există. Titlul întrebării dvs. spune „mai mult de 500000”, ceea ce pare a fi posibil, dar nu dublu.Îți dai seama că, cu 1 milion de fișiere deschise, serverul tău va fi înghețat? Ai idee câtă memorie este necesară pentru o singură conexiune TCP/IP?
drapel br
Mă uitam la [acest articol](https://www.freecodecamp.org/news/how-we-fine-tuned-haproxy-to-achieve-2-000-000-concurrent-ssl-connections-d017e61a4d27/# haproxy-configuration) unde setează `maxconn` la 2.000.000. Sistemele pe care rulau haproxy aveau 30 GB de RAM sau mai mult.
Gerard H. Pille avatar
drapel in
Nu folosesc un container pe un server cloud, nu-i așa?
Puncte:0
drapel br

Soluţie

The deschide fișiere limită poate fi a crescut.

⦠limita durată per proces este setată implicit la 1048576, dar poate fi schimbat folosind sysctl „fs.nr_open”. Din: Ghid de management HAProxy | 5. Limitări de descriptor de fișiere

Am dat peste o resursă utilă despre cum să crească fs.nr_open. Asta este ceea ce am ajuns să fac (pe mașina mea gazdă):

# 0. ssh în instanța mea cloud

# 1. schimbare la rădăcină
sudo su -
# 2. crește limita
sysctl -w fs.nr_open=2010000
# 3. salvați modificările și ieșiți
sysctl -p
Ieșire
# 4. acum sunteți din nou în shell-ul utilizatorului; trebuie să te reînregistrezi
# și din acest shell pentru ca modificările să intre în vigoare
Ieșire

Rețineți că modificările efectuate nu persistă după o repornire. Dacă cineva știe cum să facă asta, vă rog să-mi spuneți și îmi voi edita răspunsul.

De asemenea, trebuia să-i spun lui Docker că este în regulă să deschidă mai mult de 1.048.576 de fișiere în container. Folosisem un fișier Docker Compose pentru a-mi defini serviciile. Pur și simplu am adăugat următorul fragment la mine docker-compose.yml:

Servicii:
  proxy:
    imagine: haproxy
    # Începeți fragmentul
    limite:
      niciun fisier:
        moale: 2005000
        greu: 2005000
    # Încheiați fragmentul
    #...
#...

Nu în ultimul rând, asigurați-vă că instanța gazdă are cel puțin 2 GB de RAM sau veți rămâne fără memorie când veți încerca să rulați proxy-ul. Dacă doriți să gestionați efectiv 1 milion de solicitări cu proxy-ul dvs., veți avea nevoie de mult mai multă memorie - ceva între 20 și 30 GB - nu ezitați să testați singur. Dacă știi cum să calculezi limita, nu ezita să-mi editezi răspunsul sau să postezi un comentariu mai jos!

Motivație privind numărul de fișiere deschise

Dacă avem nevoie de 2.000.029 de fișiere deschise pentru 1 milion de conexiuni, atunci să:

  • setați limita containerului proxy puțin peste aceasta: 2.000.029 + 4971 = 2.005.000
    • setați limita sistemului de operare gazdă puțin peste aceasta: 2.005.000 + 5000 = 2.010.000
Gerard H. Pille avatar
drapel in
Ai idee cât te va percepe Jeff pentru asta?

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.