WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Load balancing med 2 servrar? (https://www.wn.se/forum/showthread.php?t=27979)

XWisdom 2008-03-16 21:39

Hej,
som rubriken säger undrar jag vad är bästa lösningen för att kunna load balancing med enbart två burkar? Är det att man kör Round Robin-metoden och replikation eller går det att sätta ihop två burkar till någon slags kluster?

Om man behöver en separat burk för Load Balancing, vad behöver man minst för hårdvara? Går det att få ihop med någon begagnad burk?

Tack för allt svar!

MVH

Peter

Emj 2008-03-16 23:12

Vad ska du lastbalansera? Om du kör en dynamisk website är det första steget ju att köra web och db på separata maskiner.

Dennis Holm 2008-03-16 23:20

vad är du ute efter?
redundans eller just att dela upp belastningen?
och round robin metoden är inte att rekommendera om det är DNS varianten du tänker på.
DNS cachas och ger inte en snäll balansering oftast..

patrikweb 2008-03-16 23:42

Du kan sätta ihop 2 burkar i kluster, finns olika sätt att lösa det.

Du kan köra en burk som lastbalanserare, dock om du väljer rätt leverantör så kan dom erbjuda det i sin hårdvara direkt istället.

DNS round robin är inte att föredra

XWisdom 2008-03-17 08:38

Det jag ska lastbalansera är både en HTTP-server (Apache) och DB (MySQL). Anledningen till att jag fråga efter klusterlösningen är att jag vill det ska vara så skalbart som möjligt, så när jag sedan köper en burk till så är det bara att sätta in den i klustret utan att behöva göra så mycket mer, sedan kan man väl hantera hela klustret gemensamt om jag har förstått det rätt.

Jag tänker på både redundans och belastningen...

Patrikweb, vilken leverantör känner du till som erbjuder det? Och hur sätter man ihop 2 burkar till ett kluster, kan du ge mig några tips?

wooper 2008-03-17 08:49

Ett ganska enkelt kluster består av:

1. Lastbalancerar.
2. Två eller fler servrar med tjänster, t.ex. web, mail eller databas.
3. NAS - Kan vara en komplex lösning eller en enkel NFS-lösning på en linux-burk.

Björklund 2008-03-17 09:36

XWisdom:
MySQL bygger du med replikering.
En server som är master som du kör alla "skriv" i (INSERT/UPDATE/DELETE).
Och alla "läs" (SELECT) på en eller flera slaves.

Alla cololeverantörer bör kunna erbjuda lastbalansering.

patrikweb 2008-03-17 12:13

Någon form av storage kan vara bra vid större kluster och vid mycket data, har du inte det blir kostnaden bara högre och du får en single point om man inte bygger dubbla storage.

Hur du sätter upp mysql cluster finns att läsa på deras sida och på många ställen på nätet,

Apache blir samma sätt att ställa in om du låter leverantör lastbalansera åt dig.

Exempel: http://91.90.25.1 du kommer till olika servrar bereonde vilken isp och del i världen du befinner dig i.

Björklund 2008-03-17 14:28

Patrik, förvilla han nu inte . MySQL Cluster kräver låg latency och snabb lina i klustret.
Det kan du inte sprida ut i olika världsdelar. Du menar kanske MySQL Replication?

patrikweb 2008-03-17 14:35

Citat:

Originally posted by jonasb76@Mar 17 2008, 15:28
Patrik, förvilla han nu inte . MySQL Cluster kräver låg latency och snabb lina i klustret.
Det kan du inte sprida ut i olika världsdelar. Du menar kanske MySQL Replication?

Servrarna kan ju stå på olika platser i Sverige, om man har eget nät mellan dom. Blir inte alls så hög latency alla fall.

Dock skulle det säkert även fungera ha server i USA med, sedan kanske det inte är 100% optimalt att då kanske få 0.3s fördröjning av synca data mellan mysql servrar.

Björklund 2008-03-17 14:37

Citat:

Ursprungligen postat av patrikweb
Citat:

Ursprungligen postat av jonasb76
Patrik, förvilla han nu inte . MySQL Cluster kräver låg latency och snabb lina i klustret.
Det kan du inte sprida ut i olika världsdelar. Du menar kanske MySQL Replication?


Servrarna kan ju stå på olika platser i Sverige, om man har eget nät mellan dom. Blir inte alls så hög latency alla fall.

Dock skulle det säkert även fungera ha server i USA med, sedan kanske det inte är 100% optimalt att då kanske få 0.3s fördröjning av synca data mellan mysql servrar.

Javisst. Vill man inte ha någon prestanda så är det klart det går.
Ingen vettig människa bygger det så. Testa så får du se.

Synca? Har du kört ett MySQL-kluster någon gång?

patrikweb 2008-03-17 14:46

Gissar du menar NDB när du snackar Mysql Cluster, dock så har ju latency inte något göra med kapacitet mellan noder.

Sedan att det inte blir helt optimalt med olika latency om du har många noder är en annan sak, men beror ju sedan på hur du väljer att lastbalansera anslutningarna mot dom olika mysql servrarna.

Björklund 2008-03-17 14:50

Jag tolkar ickesvaret som att du inte kört MySQL Cluster och inte har någon erfarenhet av det.

patrikweb 2008-03-17 15:10

Tror mer att du aldrig haft möjlighet köra det i ett riktigt nät. Handlar inte om att man ska köra dom olika noderna på en bredbandslina eller något sådant.

En viss latency är det minsta problemet, att det skulle vara helt idiotisk att köra mysql cluster mellan flera länder som exempelvis Sverige - USA är sant även om det säkerligen skulle fungerat men en viss seghet.

Men mellan Stockholm eller Malmö skulle inte varit något problem med latency.

Viktigaste är att datan kommer fram utan avbrott och rätt kapacitet.

XWisdom 2008-03-17 18:09

Men jag vill hellre veta hur man bygger ett kluster i sitt "hemmabygge" med bara 2 datorer, inte hos någon leverantör. Om det kräver en extra dator för själva lastbalanseringen kan jag acceptera. Datorerna kan ju då sitta i ett Gigabitnätverk, så någon latencyproblem bör det inte vara där.

Björklund 2008-03-17 18:24

Är det bara Apache och MySQL är rekommender jag som sagt MySQL-replikering.
http://dev.mysql.com/doc/en/Replication_HOWTO.html

Och sedan kör du rsync mellan dina Apache kataloger på varje server.

Om du har ungefär 50% reads och 50% writes så kör writes till "mastern" och alla "reads" till slaven. Har du lite "writes" så kör även "reads" på mastern.

Om mastern dör så gör om slaven till master.

Lastbalansera med DNS.
Om du vill ha en egen lastbalanserare istället så kolla på www.linuxvirtualserver.org.
Eller något som jag tycker är spännande CLUSTERIP. Clusterip ingår i iptables. Den gör så att du inte behöver någon extra hårdvara för lastdelning. Den delar MAC-address mellan två eller fler servrar.
Får några år sen la jag lite tid på det men misslyckades. Jag vill försöka igen när tid finns, säkert lite bättre nu. http://www.linux-ha.org/ClusterIP

XWisdom 2008-03-17 19:54

Tack för svaret, nu har jag lite mer kött på benen...

Men hur funkar det att sätta reads och writes till master och slave? Kommer MySQL-servern på mastern att kunna känna av själv och vidarebefodrar alla reads till slave? Hur funkar det då med Apache-servern på slave-maskinen, antar att man då enbart koppla mot till Masterns IP i PHP-skripten?

Denna lösning har jag ju också tänkt på innan då, fast jag är fortfarande osäkert på hur man kan lastbalansera Apache-servrarna, är det Round Robin fortfarande då?

Björklund 2008-03-17 21:12

Precis. Du sätter IP (eller hostnamn) för alla writes i dina PHP-skript och även read.
Om du vill skicka 75% av read till en av servarna så gör du en egen slumpgenerator där då 75% av trafiken går till en av servarna.
Jag hade skapat två funktioner. db_read_open() och db_write_open().

Round Robin är igentligen bara ett begrepp. Det finns i alla lastbalanserade och i DNS.
Börja med DNS. Det sätter du upp 1 minut.
Fungerar inte det bra för dig så får du gå på något mer avancerat.

XWisdom 2008-03-18 08:18

När du säger DNS, menar du då på mjukvara- eller hårdvaranivå? Och hur funkar lastbalanseringen med DNS?

Björklund 2008-03-18 11:10

Citat:

Originally posted by XWisdom@Mar 18 2008, 09:18
När du säger DNS, menar du då på mjukvara- eller hårdvaranivå? Och hur funkar lastbalanseringen med DNS?
Mjukvara.

Man kan antingen lägga in två statistka DNS-entrys

www.domänen.se. IN A 192.168.0.1
www.domänen.se. IN A 192.168.0.2

I teorin skall varje IP-address få hälften av lasten.
Men enligt egen erfarenhet så kommer 1:an få mer last då de flesta köra Windows när de surfar.
Windows hanterar det där lite konstigt.

Man kan då göra ett skript som automatiskt uppdaterar DNS:n några gåner per timma med låg TTL och får därmed en jämnare last.

Kör du "riktigt" lastbalanserare i mellan så är det lättare att dela lasten jämnt. Men det är dyrare och det blir en extra SPOF (singel point of failure). Om inte ekonomin spelar någon roll så kör på dubbla redundanta lastdelare. :P

XWisdom 2008-03-18 11:48

Hur mycket kan en sådan lastdelare går på? Är det inte bara en burk med ex. LVS?

Vad jag har förstått så är metoden som du beskrev här Round Robin DNS, eller har jag fått det riktigt fel nu? Hur löser man då problemet med Apache sessioner? Kan man tilldela ex. IP 1 till en viss session så att den sessionen aldrig hoppar över till IP 2?

Lumax 2008-03-18 12:00

Citat:

Originally posted by jonasb76@Mar 18 2008, 12:10
I teorin skall varje IP-address få hälften av lasten.
I en del namnservermjukvaror så kan man även sätta "aux-värde" på varje entry och på så vis styra hur ofta varje entry ska användas.

Björklund 2008-03-18 12:33

Citat:

Originally posted by XWisdom@Mar 18 2008, 12:48
Hur mycket kan en sådan lastdelare går på? Är det inte bara en burk med ex. LVS?

Vad jag har förstått så är metoden som du beskrev här Round Robin DNS, eller har jag fått det riktigt fel nu? Hur löser man då problemet med Apache sessioner? Kan man tilldela ex. IP 1 till en viss session så att den sessionen aldrig hoppar över till IP 2?

Beror på vad du har för krav på upptid och trafik LVS duger gott till att börja med.

Jo det kallas Round Robin DNS. Ofta håller webbläsaren kvar trafiken mot samma IP. Det är tyvärr ingen garanti.
Om du bygger dina sessioner så att de inte fungerar om de kommer mot en annan server så bör du köra en riktigt lastdelare istället.

XWisdom 2008-03-18 12:53

Tack för allt svar!

Då kommer jag förmodligen att köra MySQL-replikering samt rsync för att distribuera lasten på min två burkar. Jag är dock fortfarande nyfiken på om man kan bygga en kluster med enbart 2 datorer, fast det är kanske inget som är lönt?

Björklund 2008-03-18 13:38

Ovan är ett sorts kluster. Du måste tala exakt vad du vill genomföra för att få ett svar på frågan. Det finns failoverkluster (som ovan), även kallat Active-Passive. Sedan finns det Active-Active också.
Skall du bygga Active-Active så måste du ha ett kluster-filsystem som så att alla noderna ser exakt samma data hela tiden. Du behöver även något för att dela disk. SAN, NAS, NFS, NDB, m.m.
Behöver du ha en databas så måste de stödja Active-Active. Ex. MySQL Cluster eller Oracle RAC eller likn.

Filsystem:
http://www.redhat.com/gfs/
http://www.lustre.org/

Databas:
http://dev.mysql.com/tech-resources/articl...wo-servers.html
http://www.oracle.com/technology/products/...ring/index.html

eliasson 2008-03-18 13:39

Citat:

Originally posted by XWisdom@Mar 18 2008, 13:53
Tack för allt svar
Då kommer jag förmodligen att köra MySQL-replikering samt rsync för att distribuera lasten på min två burkar. Jag är dock fortfarande nyfiken på om man kan bygga en kluster med enbart 2 datorer, fast det är kanske inget som är lönt?

Att rysnca kommer ju inte att distribuera/fördela lasten på dina servrar, utan endast att synca innehållet som ska distribueras på din webbsida.
Du bör läsa på lite tekniker vad det gäller att lastbalencera och även ta del av vad en del av operatörerna har sagt i denna tråd.

XWisdom 2008-03-18 14:15

Jag menar förstås att rsynca och sedan dela upp så att vissa innehåll serveras från server 1 och vissa från server 2 och på så sätt distribuera lasten. Ex. kan man ju låta server 1 servera allt dynamiskt och server 2 alla statiska filer...

Vad jag vill göra med ett kluster är dels lastbalanseringen så att hela klustret fungerar som en enda stor dator. Sedan ska man ju kunna hantera hela klustret som en enda enhet (mjukvarainstallation, uppgradering och uppdatering). Vidare borde det väl vara lättare och lägga till fler noder när man behöver mer kraft?

Björklund 2008-03-18 15:42

Det du vill går inte. Det finns dock beräkningskluster som fungerar på det sättet men det är specialskriven programvara. Inget som funger på en LAMP-installation.

www.openmosix.org är väl det närmsta du kommer.

XWisdom 2008-03-19 09:47

Varför jag undrar detta är att Webmin har moduler för att hantera kluster? Hur är denna typ av kluster uppbyggd i så fall?

Björklund 2008-03-19 10:03

Jag vet inte. Jag har inte testat webmin.
Men om du behöver ett webbgränsnitt för att sköta servrarna så är kanske en klustrad miljö lite tungt att sköta. Jag skulle nog vända mig till någon som har erfarenhet av likn innan som kan jag hjälpa dig.

patrikweb 2008-03-19 10:18

Vill du kunna fördela belastning på apache och liknande behöver du en lastbalanserare.

Hur du sedan väljer hur du vill lastbalansera när man väl har en riktigt lastbalanserare är ju valfritt.

Saker att tänka på på är storage, hur statisk innehåll ska delas mellan alla noder.

Samt mysql, där får man köra mysql cluster eller något.

Möjligt någon skrivit någon webmin modul för någon form av cluster lösning, men inget man vet rakt av.

Om du finns i närheten av Borås så kan du få labba i riktigt miljö med hårdvarulastbalanserare.

XWisdom 2008-03-19 11:24

patrikweb: Jo, jag bor faktiskt i Borås, var kan jag testa hårdvarulastbalanserare? Är det en burk med speciella mjukvaror?

patrikweb 2008-03-19 12:05

Citat:

Originally posted by XWisdom@Mar 19 2008, 12:24
patrikweb: Jo, jag bor faktiskt i Borås, var kan jag testa hårdvarulastbalanserare? Är det en burk med speciella mjukvaror?

Hos mig? Eller ja i min driftmiljö. Det är hårdvara som ser ut som en switch eller router beroende vilken utrusstning jag använder.

Finns även några reserv servrar som inte används som går leka med, bara säga till om du vill leka/labba lite.


Alla tider är GMT +2. Klockan är nu 19:27.

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