WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Lastbalansera web server på linux (https://www.wn.se/forum/showthread.php?t=36695)

coredev 2009-05-07 21:20

Hej!

Vi behöver verkligen börja lastbalansera våra web-servrar. Det finns ju en hel del lastbalanserare att välja på, e.g. mod_balancer / mod_proxy, pound, nginx, varnish, et.al. Och frågan är vilken man skall köra / välja. Vore intressant att få höra era erfarenheter.

Har börjat exprementera med mod_balancer / mod_proxy, men konfigurationen verkar onödigt krånglig. Om vi har förstått det rätt så krävs det alltså att vi skapar en subdomän per webserver för varje domän (30+), e.g. server1.example.com, server2.example.com... etc.. Sådant leder lätt till en enda stor härva som är omöjlig att hålla uppdaterad.

Varnish verkar lida av samma symptom som mod_balancer.

Konfigurationen för lastbalansering med nginx existerar knappt.

Pounds konfiguration verkar då mer lovande. Där behöver man helt enkelt bara definiera vilka IP-nummer som skall ingå i klustret. Å andra sidan verkar ju detta blogg-inlägget inte lovande: http://blog.emmettshear.com/post/2008/03/0...-load-balancing.

Så ös på med era erfarenheter / rekomendationer :) Är tacksam för allt.

Kör idag 4 dedikerade webservrar med Apache 2 / PHP5 på debian.

JLE 2009-05-07 23:14

Kanske en dum fråga, men behöver ni verkligen lastbalancera? Vad är det som tar CPU?

Testat att använda ett CDN såsom Amazon CloudFront eller SimpleCDN?

patrikweb 2009-05-07 23:23

Skaffa riktiga hårdvaru lastbalanserare istället, eller stå hos en leverantör som kan erbjuda det som service.

Kör själv lastbalansering på vissa servrar, då använder jag stödet man har i core utrustningen man ändå har.

coredev 2009-05-08 08:32

Citat:

Ursprungligen postat av JLE
Kanske en dum fråga, men behöver ni verkligen lastbalancera? Vad är det som tar CPU?


Hej och tack för input. Jo vi behöver verkligen lastbalansera. Varje verksamhet kommer väl (förhoppningsvis) dit en vacker dag - och nu är det vår tur. Vi har liggat i och optimerat våra script, installerat xcache samt cachar databasfrågor mot memcache, men nu går det inte längre :)

Det som tar CPU är helt enkelt våra script, många olika produkter som är av avancerad typ. Många rader kod. Det är inte "blocket" direkt. :)

Citat:

Ursprungligen postat av patrikweb
Skaffa riktiga hårdvaru lastbalanserare istället, eller stå hos en leverantör som kan erbjuda det som service.

Kan tyvärr inget om hårdvarubalansering. Är det att föredra? Vilka är fördelarna? Man kan väl i princip säga att en server som kör en dedikerad lastbalanserar-mjukvara blir som en hårdvaru-balanserare?


Fler erfarenheter tas tacksamt emot :)

Björklund 2009-05-08 09:12

Lastbalansera med DNS eller dedikerad lastbalanserare.
Billiagast är BSD eller Linux. Vill du ha lite bättre support/prestanda så titta på Cisco eller F5.
Undvik leverantörer som bygger in lastbalansering i sin core-utrustning. Det bör ligga på dedikerad utrustning framför servrarna.

PM:a om du vill ha hjälp.

jomper 2009-05-08 09:18

Ja, round-robin-dns måste vara det absolut enklaste, och sedan låta webbfrontarna dela på en databasserver. Då blir det basic och inget special alls.

Hur mycket har ni jobbat med att optimera? Kör ni nån php-accelerator? När vi började köra APC för PHP så mer än halverades CPU-loaden.

JLE 2009-05-08 10:10

Jag brukar optimera på följande sätt:

* Sphinx Search för att avlasta mysql
* memcached
* varnish
* xdebug för att hitta flaskhalsar i php-koden
* Logga alla långsamma mysql-frågor och optimera bort dessa

Testat det?

coredev 2009-05-08 10:56

Citat:

Ursprungligen postat av jonasb76
Lastbalansera med DNS eller dedikerad lastbalanserare.

Det vore mycket vänligt om någon har förslag på hårdvaru-lastbalanserare som fungerar bra för er samt hur dessa fungerar rent praktiskt. I mitt huvud bör de vara som en switch som även kan last-balansera. Viktigt är att de är session-medvetna.

Citat:

Originally posted by -jomper@May 8 2009, 09:18
Hur mycket har ni jobbat med att optimera? Kör ni nån php-accelerator? När vi började köra APC för PHP så mer än halverades CPU-loaden.

1) Vi har arbetat massor med att optimera - men vi har helt enkelt avancerade produkter och mycket trafik.
2) Japp vi kör XCache - det hjälpte en hel del.

Citat:

Ursprungligen postat av JLE
Jag brukar optimera på följande sätt:
* Sphinx Search för att avlasta mysql
* memcached
* varnish
* xdebug för att hitta flaskhalsar i php-koden
* Logga alla långsamma mysql-frågor och optimera bort dessa
Testat det?

Vi har inget prestandaproblem med databasen, vi kör redan idag memcached (som är helt sjukt grym!) samt även sphinx (som är helt sjukt underbar!).

Vi har inte kört någon profiler på koden, men som sagt så har vi spenderat många och långa timmar med optimering. Det är helt enkelt lastbalansering som är vårt nästa steg. Kör du det genom varnish eller använder du den bara som cache / proxy?

obe 2009-05-08 11:01

DNS-round robin är enklast. Men Nginx fungerar utmärkt, drar nästan igen cpu alls och är stabil.

Glöm inte att installera php-apc eller någon annan php-accelerator, det sparar mycket pulver på Apache-maskinerna.

Du kan sätta lastbalanseraren själv som bakup-server och låta apache lyssna på en annan port:

Citat:


upstream *backend *{
* * * *server * 192.168.xxx.xxx; # www
* * * *server * 192.168.xxx.xxx; # www
* * * *server * 192.168.xxx.xxx; # www
* * * *server * 192.168.xxx.xxx:8888 * * * * backup; # lastbalanseraren själv
}

Edit: Upptäckte att ni skrivit det mesta som jag sa redan...

coredev 2009-05-08 11:07

Citat:

Originally posted by obe@May 8 2009, 11:01
DNS-round robin är enklast. Men Nginx fungerar utmärkt, drar nästan igen cpu alls och är stabil.
Glöm inte att installera php-apc eller någon annan php-accelerator, det sparar mycket pulver på Apache-maskinerna.
Du kan sätta lastbalanseraren själv som bakup-server och låta apache lyssna på en annan port:
Citat:


upstream backend {
server 192.168.xxx.xxx; # www
server 192.168.xxx.xxx; # www
server 192.168.xxx.xxx; # www
server 192.168.xxx.xxx:8081 backup; # denna maskinen
}


Med DNS-round robin så kan man inte köra med persistent sessions va? Det vill säga att du alltid hamnar på samma maskin, och undviker konstiga utloggningar, etc..

Blir det dubbel configuration med Nginx? Måste man sätta upp alla virituella host:ar i config-filen eller kan man säga att den skall acceptera allt och sedan skicka det vidare oberört? Kan Nginx hantera persistant sessions?

obe 2009-05-08 11:18

En annan sak som är fantastisk viktig:

Använd ett CDN!

Eller flytta alla dina statiska filer till en server som kör Nginx eller lighttpd.

Det är inte speciellt praktiskt att använda Apache att serva statiska filer med allt minne den drar.

Jag kör 4 st Nginx och de kraschar aldrig. Det är sällan en nginx går över en halv procent cpu när den drar 10Mbit ut och servar statiska filer.

obe 2009-05-08 11:22

Citat:

Ursprungligen postat av coredev
Citat:

Ursprungligen postat av obe
DNS-round robin är enklast. Men Nginx fungerar utmärkt, drar nästan igen cpu alls och är stabil.
Glöm inte att installera php-apc eller någon annan php-accelerator, det sparar mycket pulver på Apache-maskinerna.
Du kan sätta lastbalanseraren själv som bakup-server och låta apache lyssna på en annan port:
Citat:


upstream backend {
server 192.168.xxx.xxx; # www
server 192.168.xxx.xxx; # www
server 192.168.xxx.xxx; # www
server 192.168.xxx.xxx:8081 backup; # denna maskinen
}





Med DNS-round robin så kan man inte köra med persistent sessions va? Det vill säga att du alltid hamnar på samma maskin, och undviker konstiga utloggningar, etc..
Blir det dubbel configuration med Nginx? Måste man sätta upp alla virituella host:ar i config-filen eller kan man säga att den skall acceptera allt och sedan skicka det vidare oberört? Kan Nginx hantera persistant sessions?


Kör du memcached så kan du spara dina sessioner i dem

php :
session.save_handler = memcache
session.save_path = "tcp://xxx,tcp://yyy"

Då får du redundans, sessionerna sparas på båda memcached-servrarna

jahaa 2009-05-08 12:13

Citat:

Originally posted by obe@May 8 2009, 11:18
En annan sak som är fantastisk viktig:
Använd ett CDN
Eller flytta alla dina statiska filer till en server som kör Nginx eller lighttpd.
Det är inte speciellt praktiskt att använda Apache att serva statiska filer med allt minne den drar.
Jag kör 4 st Nginx och de kraschar aldrig. Det är sällan en nginx går över en halv procent cpu när den drar 10Mbit ut och servar statiska filer.



Kan bara instämma i att nginx är stabilt och rekommenderar det. Nginx har en bra strukturerad konfiguration men dokumentationen är dock inte den bästa (men blivit bättre på senaste tiden) och har pga det lite högre inlärningströskel.

Just nu kör jag dock nginx endast som reverse proxy för statiska filer men att lägga över mer ansvar på nginx framöver ligger i planeringen.

Som exemplet ovan med last-balanseringen mha nginx så går det tex att bygga ut det ytterligare så att du låter den nginx fronten serva statiskt innehåll men lastbalanserar dynamiskt innehåll.

Jag kör även memcache som session hanterare.

Citat:


Blir det dubbel configuration med Nginx? Måste man sätta upp alla virituella host:ar i config-filen eller kan man säga att den skall acceptera allt och sedan skicka det vidare oberört?

Du kan acceptera allt och skicka vidare det på wildcard. ( senast stabila versionen är det ServerName _; som är catch-all, går och skräddarsy om jag minns rätt. något i stil med ServerName alltom*.com; )

Ifall du kör reverse proxy med apache som backend behöver du dock installera apache modden rpaf (libapache2-mod-rpaf @ apt) för att inte få lokala ip't som användarens ip.

Björklund 2009-05-08 12:54

Citat:

Ursprungligen postat av coredev
Citat:

Ursprungligen postat av jonasb76
Lastbalansera med DNS eller dedikerad lastbalanserare.

Det vore mycket vänligt om någon har förslag på hårdvaru-lastbalanserare som fungerar bra för er samt hur dessa fungerar rent praktiskt. I mitt huvud bör de vara som en switch som även kan last-balansera. Viktigt är att de är session-medvetna.

Vad har du för krav? Hur många packet per sekund måste den klara? Någon speciell typ av lastbalansering (roundrobin, minst anslutningar, load på servrar, m.m.)? SSL-offload? Redundans? Support? Pris?

coredev 2009-05-08 14:16

Citat:

Ursprungligen postat av jonasb76
Citat:

Originally posted by -coredev@May 8 2009, 10:56
Citat:

Ursprungligen postat av jonasb76
Lastbalansera med DNS eller dedikerad lastbalanserare.

Det vore mycket vänligt om någon har förslag på hårdvaru-lastbalanserare som fungerar bra för er samt hur dessa fungerar rent praktiskt. I mitt huvud bör de vara som en switch som även kan last-balansera. Viktigt är att de är session-medvetna.


Vad har du för krav? Hur många packet per sekund måste den klara? Någon speciell typ av lastbalansering (roundrobin, minst anslutningar, load på servrar, m.m.)? SSL-offload? Redundans? Support? Pris?

* Skall gå att rackmontera, max 1U.
* Bör inte kosta mer än en ny server (då tappar man lite vitsen med en hårdvara istället för att göra det med en mjukvarulösning).
* Paket per sekund är svårt att svara på.
* Enkel lastbalansering, typ round-robin duger gott.
* Ingen SSL
* Ingen redundans på lastbalanseringen behövs

Jag har försökt googla lite på hårdvarulösningar men har inte hittat något lockande. Att betala 100.000 känns lite överdrivet. :)

PS. Tack för att hjälp :) ni ger! ds.

patrikweb 2009-05-08 14:17

Citat:

Originally posted by jonasb76@May 8 2009, 09:12
Lastbalansera med DNS eller dedikerad lastbalanserare.
Billiagast är BSD eller Linux. Vill du ha lite bättre support/prestanda så titta på Cisco eller F5.
Undvik leverantörer som bygger in lastbalansering i sin core-utrustning. Det bör ligga på dedikerad utrustning framför servrarna.
PM:a om du vill ha hjälp.

Varför skulle man göra det? Kör man Cisco 6500 så är allt sådant även modulär så du kan köra lastbalanseringen i en dedikerad linjekort som inte stör någon annan del.

Björklund 2009-05-08 14:55

Citat:

Ursprungligen postat av coredev
Citat:

Originally posted by -jonasb76@May 8 2009, 12:54
Citat:

Originally posted by -coredev@May 8 2009, 10:56
Citat:

Ursprungligen postat av jonasb76
Lastbalansera med DNS eller dedikerad lastbalanserare.

Det vore mycket vänligt om någon har förslag på hårdvaru-lastbalanserare som fungerar bra för er samt hur dessa fungerar rent praktiskt. I mitt huvud bör de vara som en switch som även kan last-balansera. Viktigt är att de är session-medvetna.


Vad har du för krav? Hur många packet per sekund måste den klara? Någon speciell typ av lastbalansering (roundrobin, minst anslutningar, load på servrar, m.m.)? SSL-offload? Redundans? Support? Pris?


* Skall gå att rackmontera, max 1U.
* Bör inte kosta mer än en ny server (då tappar man lite vitsen med en hårdvara istället för att göra det med en mjukvarulösning).
* Paket per sekund är svårt att svara på.
* Enkel lastbalansering, typ round-robin duger gott.
* Ingen SSL
* Ingen redundans på lastbalanseringen behövs
Jag har försökt googla lite på hårdvarulösningar men har inte hittat något lockande. Att betala 100.000 känns lite överdrivet.
PS. Tack för att hjälp ni ger ds.

Om du inte kan svara på paket per sekund så är det svårt att gissa hur mycket kraft du behöver.
Men eftersom du inte vet gissar jag att det är ganska lågt.
Och eftersom du inte behöver redundans så funkar det med vilken PC som helst med Linux på.
Installera Linux, ladda modulen ip_vs (LVS) och tanka ner ipvsadm och sätt upp lite regler,

PM:a om du vill ha hjälp.

patrikweb 2009-05-08 15:06

1-2U får du räkna med, kolla på någon begagnad Alteon, Fundry Serveriron, Extreme Summit48si så får du stöd för lastbalansering.

Kolla bara på att dom är med rätt Full3 code eller likande

coredev 2009-05-11 15:25

Citat:

Originally posted by patrikweb@May 8 2009, 15:06
1-2U får du räkna med, kolla på någon begagnad Alteon, Fundry Serveriron, Extreme Summit48si så får du stöd för lastbalansering.
Kolla bara på att dom är med rätt Full3 code eller likande

Eftersom jag är en mjukvaru-kille så säger detta mig rätt lite :) Någon som har lust att utveckla hur hårdvaru-baserad lastbalansering fungerar och vad det kostar?

I nuläget så ser det ut att vi kommer att lastbalansera via NginX på en dedikerad server.

Björklund 2009-05-11 16:54

Citat:

Originally posted by coredev@May 11 2009, 15:25

Eftersom jag är en mjukvaru-kille så säger detta mig rätt lite Någon som har lust att utveckla hur hårdvaru-baserad lastbalansering fungerar och vad det kostar?

Det går inte att säga då du inte vet vad du behöver. Det kostar från 500 kr till hur mkt som helst beroende på vad du behöver.

Thomas 2009-05-11 22:41

2 bifogad(e) fil(er)
Citat:

Originally posted by jonasb76@May 8 2009, 13:55
Installera Linux, ladda modulen ip_vs (LVS) och tanka ner ipvsadm och sätt upp lite regler,

Har kört 2 LVS'er framför tv.nu's www-servrar nåt år nu. En i varje datacenter. Har en gammal bild på när det var 10 maskiner totalt i klustret.

Jag tycker det har funkat okey hittills. Billig och skalbar lösning.

coredev 2009-05-12 09:35

Tack thomas! :) Kul att få insikt i ett annat system.

LVS.. är det http://www.linuxvirtualserver.org/ ?

Nu på morgonen bytte vi från våra överbelastade webserverar, till vårt nya webserver-kluster med NginX som dedikerad lastbalanserare och oj vad trevligt det blev att surfa på sidorna :) En sån skillnad! :D

Björklund 2009-05-12 12:24

Citat:

Originally posted by coredev@May 12 2009, 09:35
LVS.. är det http://www.linuxvirtualserver.org/ ?

Det stämmer! :)

danjel 2009-05-12 15:40

Av nyfikenhet och för att själv få en ungefärlig referensram kring när det är dags att lastbalansera kontra prestandaoptimera. Ungefär vid vilken belastning har ni varit tvungna att lastbalansera och köra något mer än 1 web och en DB burk. ?
Typ sidvisningar per sekund eller något..

coredev 2009-05-13 15:20

Tyvärr kan jag inte svara på sidvisningar / sekund och sådant, eftersom jag i grunden är en programmerare. Man skall dock alltid prioritera prestandaoptimeringar framför t.ex. lastbalansering. Det finns så otroligt mycket att göra som minskar lasten, och det är inte säkert att response-tiden minskar bara för att du lastbalanserar.

Några tecken på att du skall satsa resursoptimering:
* När du har en hög respons-tid även vid låg last
* När en sidladdning tar mer än 0.2 sekunder
* När lastbalansering inte sänker response-tiden
* När du är osäker på var resursoptimering är

När det gäller oss så har vi under flera år arbetat aktivt med resursoptimeringar, men nu har det tagit stopp - nu är det svårt att gå längre. Det går, men då vi har avancerade produkter som bygger på avancerade script skulle ytterligare resursoptimeringar tumma på användarvänlighet samt funktionallitet.

Måndagar kl 13.00 (peak för vår del) har våra sajter gått slött och vår webserverver för dynamiskt innehåll har gått på 100% hela tiden. Databaserna (1 MySQL och en PostgreSQL) har aldrig haft problem med hög last / dålig prestanda.


Alla tider är GMT +2. Klockan är nu 08:25.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson