Lastbalansering, Cluster, och Redundans med Mac mini

Tråden skapades och har fått 15 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Tranemo
  • 2008-11-16 20:58

Tjenare!

Tänkte sätta ihop en liten server bestående av några Mac Minis (förhoppningsvis nya i början av Januari, snälla Apple) och funderar lite på olika konfigurationer, mest för att lära sig så mycket som möjligt innan man går på Xserve.

Jag kommer köra MAMP då det är extremt enkelt att konfigurera (kommer från IIS som är extremt enkelt), jag har för närvarande en portlösning, alltså flera sidor på samma ip/olika portar.

Kommer att driva 3st ganska olikbelastade sidor så istället för att driva 1 sida per server så skulle jag vilja (om ni tycker att det är vettigt) att lastbalansera samtliga sidor, alltså vilken som helst av dom 3 servrarna kan leverera en av dom 3 sidorna ifall lasten ser ut såhär:

Server 1) Användning 100% (behöver 150%)
Server 2) Användning 10% (behöver 10%)
Server 1) Användning 50% (behöver 50%)

Går detta att genomföra i Apache2 och är det någon som kan ge tips hur man enklast konfigurerar dessa på smidigaste sätt, samtliga sidor har samma IP.

Kan egentligen inget om lastbalansering, tex hur MySQL databasen placeras, på samtliga servrar när man sätter igång servrarna och sen kör ett replicatorsystem, likadant med att serva html filerna.

Så mycket information som möjligt är välkommet

Har du kollat upp om du verkligen behöver lastbalansera? Har du jämfört hur mycket server du får om du istället för tre mini's köper en enda "riktig" server?

mod_proxy_balancer - Apache HTTP Server verkar vara det du letar efter för övrigt. Dock är jag tveksam till att köra MAMP, iom att det i det här fallet inte blir det minsta lättare att konfigurera. Hur du än gör så måste du in och rota i konfig-filerna manuellt, om inte OS X server har stöd för det i sina konfigurationsverktyg. Går du på den lösningen så innebär det en extra utgift.

Rent spontant så hade jag skippat lastbalanseringen, och splittat upp tjänsterna på olika maskiner istället. mySQL på en, Apache på den andra och t ex Lighttpd på den tredje. Då har du en maskin för databas, en för dynamiskt innehåll och en för statiskt. Dock behöver du väldigt mycket statiskt innehåll för att inte den tredje burken ska kännas överflödig.

Men iaf jag behöver nog lite mer på fötterna för att kunna säga något mer konkret.

jag förstår inte anledningen till att ens använda en mac för detta. valfi server med tex debian hade ju funkat fint. Det är oftast mysql som tar mest resurser så att ha de på en egen maskin kan ju vara bra ifall man har väldigt många requests (flera tusen i minuten).

Ursprungligen av =JoNaZ=:

jag förstår inte anledningen till att ens använda en mac för detta. valfi server med tex debian hade ju funkat fint. Det är oftast mysql som tar mest resurser så att ha de på en egen maskin kan ju vara bra ifall man har väldigt många requests (flera tusen i minuten).

Har du provat Mac OS X Server?

Vi har kört i en lastbalanserad miljö så jag har rätt god insikt i ämnet och erfarenhet. Rent spontant skulle jag försöka undvika att köra lastbalanserat eftersom det innebär ett rejält steg uppåt i komplexitet.

Några kommentarer:

Passiv lastbalansering
Vi hade tidigare fyra Xserve G5 med passiv lastbalansering (vår firewall skickade ut anropen med vikten 25%/25%/25%/25%) och en separat MySQL server i bakgrunden. Passiv lastbalansering kan även göras med "Round Robin DNS" där du helt enkelt anger flera olika IP till samma adress - exempelvis kan www.99.se ha fyra olika IP nummer och så låter man DNS slumpa vilken server man kommer till.

Alternativet är då Aktiv lastbalansering som är betydligt bättre - då har du en router/firewall/loadbalancer som känner av hur hårt dina servrar är lastade och styr trafiken därefter. Mer komplext att sätta upp dock.

MySQL
Min erfarenhet är INTE att MySQL går i botten - det krävs helt sjuka mängder trafik eller riktigt dålig optimering för att den ska bottna. Min erfarenhet är att PHP däremot kör webbservern i botten. Ska tilläggas att vi haft en hyggligt snabb MySQL server:
HP Proliant DL380G4 med dubbla 2.8GHz Xeon (single-core), 3GB RAM och RAID-10 disksystem med 15k SCSI diskar. Den har nog aldrig jobbat mer än 10-15% CPU oavsett trafiken på 99.se - istället har det varit webbservern dom gått i botten.

Jag skulle inte ge mig in på replikering av MySQL om det verkligen inte behövs. Du skulle kunna sätta upp två separata MySQL burkar som replikerar data som slave/master där ena servern endast kan leverera data och den andra kan både skriva/läsa. För "full redundans" måste du köra MySQL Cluster men då börjar vi snacka rejält komplicerade grejer.

Mitt förslag (vår lösning)
Vi kastade ut den lastbalanserade lösningen och valde den enkla vägen: Köp en snabb server som fixar dina behov. I vårt fall räcker en vanlig Xserve QuadCore extremt långt. Dom är helt enkelt sjukt snabba. Våra fyra Xserve G5 kunde tillsammans leverera ungefär 20% av vad en Xserve QuadCore levererar...

Björnström noterar...
Att köra Debian eller Mac OS X Server är mest vad man tycker bäst om. Jag tycker kombinationen Xserve och 10.5 Server fungerar bra ihop men om du föredrar Dell/HP och Debian så kör på det.

Jag skulle INTE köra server på Mac Mini efter att ha haft 4-5 disk-kraschar under tre års tid. Dom där 2.5" diskarna är inte gjorda för att läsa/skriva oavbrutet dygnet runt i flera år...

  • Medlem
  • Tranemo
  • 2008-11-18 19:28

Tack för svaren!

Edit: Extremt mycket text blev det, får se om det går att överskåda

Jag kommer troligen inte att behöva all den kraften just nu men detta är endast ett projekt för att lära mig skala, vi är några som håller på med ett webbprojekt och just nu ansvarar jag endast för xhtml & css kodningen, just nu är det det som tar kortast tid så jag har tagit på mig att lära mig serverbiten.

Att sätta upp en Apache och MySQL server är enkelt men ungefär där stannar mina kunskaper, virtuella hostar är bekant också men inget som man behärskar full ut.

Jag förstår verkligen om ni tycker att det är ett allderles för stort steg att ta, från enkel singel Apache server till lastbalansering, men jao, enda sättet att lära sig är att fråga och experimentera hemma.

Just nu använder jag min gamla speldator som server, funkar kanon till det vi gör nu
och den har några egenskaper som gör att man kanske skall använda den i Mac Mini mixen.

Speccarna är:
2.4 GHZ Core 2 Duo (ingen quadcore här inte)
8GB ram.
2st Velociraptor i Raid0 (för OS:et)
5st 1TB 7200rpm:are i Raid5 (för lagring)

Processorn är inte riktigt den senaste men med tanke på att diskarna är ganska snabba: http://www.rogatio.com/upload/hdtune.png så kan man ju hitta ett bra
användningsområde för denna, även lagringsvolymen även om dom är lite långsammare diskar kan ju användas för medialagring.

mod_proxy_balancer verkar ju vara en vettig ekvation, dessutom fungerar det väll bra oavsett om Apache ligger på en Vista eller OS X dator?

En sidofråga bara, kör nu IIS7 med PHP ISAPI, hur står sig detta i snabbhet jämfört med
Apache + PHP?

irrelogical
Ja, att dela upp dom olika tjänsterna är ju ett lättare alternativ, måste dock lära mig lastbalansering för framtida bruk, har inte ens lärt mig hur man går tillväga för att köra webbserver på ena datorn och MySQL på en annan, hur dom "pratar" med varandra.

Björnström
Dina trådar som handlar om detta forumets uppbyggnad och hårdvaran bakom är alltid intressanta, följde eran Xserve Quad Core tråd med stort nöje, vore roligt med "behind the sceenes" reportage om allt hårdvaru och mjukvaru lösningar ni fipplar med, men det skulle ta sjukt mycket tid att skriva dessa.

Kommer ihåg att ni använde en funktion som visar vilken av dom lastbalaserade servrarna som levererade just den requesten, en sådan funktion vore utmärkt att använda sig av när man sätter upp en sådan konfiguration hemma, hur fick ni till den?

Att ha en MySQL databas som är master med read/write funktion och en slav som bara läses ifrån låter intressant, vet dock inte hur replikeringen fungerar, är det endast med hjälp av MySQL Cluster?

Hur funkar dessa konfigurationer med prylar i budgetsegmentet, där servrarna skall stå under konfigurationstiden ser det för nuvarande ut såhär: Modem - Router - Switch - Webbserver, bara billiga nätverksprylar som D-Link Dir-655 och D-Link DGS-1008D, är min tänkta konfiguration körbara med denna enkla setup?

Kommer inte köpa in några Mac Minis nu utan hoppas på att Apple släpper något billigt och bra som man kan experimentera med, Xserve kommer senare när en av våra projekt lanseras, lite för dyrt att köpa Xserve nu för att sedan bli gamla när vi är klara.
Att diskarna som sitter i Mac Mini inte är avsett för servermiljö får accepteras just nu.

En fundering till, säg att den framtida Mac Minin har 4GB ram, jag köper 3st, har 8GB i Vista datorn, kan då alla tjänster (Apache, MySQL osv) använda sig av alla 20GB?

Ursprungligen av x-per:

En sidofråga bara, kör nu IIS7 med PHP ISAPI, hur står sig detta i snabbhet jämfört med
Apache + PHP?

Apache kompilerad med PHP måste vara snabbare men jag kan inte avgöra av vilken magnitud. Ett tips är att använda så mycket cache du kan - APC för PHP och Memcached för MySQL.

Ursprungligen av x-per:

Kommer ihåg att ni använde en funktion som visar vilken av dom lastbalaserade servrarna som levererade just den requesten, en sådan funktion vore utmärkt att använda sig av när man sätter upp en sådan konfiguration hemma, hur fick ni till den?

Vi satte bara en include längst ner på sidan som angav "hostname".

Ursprungligen av x-per:

Att ha en MySQL databas som är master med read/write funktion och en slav som bara läses ifrån låter intressant, vet dock inte hur replikeringen fungerar, är det endast med hjälp av MySQL Cluster?

Här kan du läsa mer om replikering:
MySQL :: MySQL 5.0 Reference Manual :: 16 Replication

Ursprungligen av MySQL:

Replication enables data from one MySQL database server (called the master) to be replicated to one or more MySQL database servers (slaves). Replication is asynchronous - your replication slaves do not need to be connected permanently to receive updates from the master, which means that updates can occur over long-distance connections and even temporary solutions such as a dial-up service. Depending on the configuration, you can replicate all databases, selected databases, or even selected tables within a database.

MySQL Cluster är några nivåer vassare och erbjuder 99.999% tillgänglighet etc. Men det är rätt komplext att kicka igång: MySQL :: MySQL Cluster

Ursprungligen av x-per:

Hur funkar dessa konfigurationer med prylar i budgetsegmentet, där servrarna skall stå under konfigurationstiden ser det för nuvarande ut såhär: Modem - Router - Switch - Webbserver, bara billiga nätverksprylar som D-Link Dir-655 och D-Link DGS-1008D, är min tänkta konfiguration körbara med denna enkla setup?

Du har egentligen inte berättat så mycket om vilka krav du har men så länge dina gäster når servrarna är det väl bra. Ser ingen riktig brandvägg eller lastbalanserare bland dina prylar.

Ursprungligen av x-per:

En fundering till, säg att den framtida Mac Minin har 4GB ram, jag köper 3st, har 8GB i Vista datorn, kan då alla tjänster (Apache, MySQL osv) använda sig av alla 20GB?

Apachetjänsten och MySQLtjänsterna i respektive dator kan naturligtvis endast använda internminnet i maskinen dom körs på.

  • Medlem
  • Stockholm
  • 2008-11-18 21:01

att labba med lastbalansering behöver man inte flera datorer för.

lite kreativ hantering av apache på olika portar med bra lastbalanserare framför kan göra det mesta utan att du behöver fler datorer. om det bara är för labb.
Ett annat alternativ är att skaffa en riktigt fet mac pro och köra virtuella maskiner.

Tänk på att os x server kostar lite pengar om du skall köra det. kanske inte det lönar sig att köra det på 4 maskiner för "labb".

  • Medlem
  • Tranemo
  • 2008-11-18 21:30
Ursprungligen av glemme:

att labba med lastbalansering behöver man inte flera datorer för.

lite kreativ hantering av apache på olika portar med bra lastbalanserare framför kan göra det mesta utan att du behöver fler datorer. om det bara är för labb.
Ett annat alternativ är att skaffa en riktigt fet mac pro och köra virtuella maskiner.

Tänk på att os x server kostar lite pengar om du skall köra det. kanske inte det lönar sig att köra det på 4 maskiner för "labb".

Tänkte inte på att man kunde "simulera" lastbalansering på en och samma dator, men det är ändå inget för oss, allt skall göras, inga överraskningar framåt i tiden, allt från mjukvara till hårdvara skall kunnas utan och innan.

OS X server kommer bara att köras på 3 servrar, det är inte direkt någon stor kostnad, när servrarna har gjort klart sin tjänstgöring som labbdatorer så är det dags för dom att ta hand om andra saker, ical server, mail server, FCP nätverksrendering (om det är möjligt), klienthantering, privata projekt osv så kostnaden för allt är inte så bortkasstade

Att köra mySQL på en annan server är inte svårare än att man i PHP-scriptets databasanslutning anger den andra serverns adress istället för "localhost" och ser till så att mySQL accepterar anslutningar utifrån. Maskinens brandvägg och mySQL-användarens rättigheter är det som generellt kan sätta stopp för det sistnämnda.

mod_proxy_balancer fungerar faktiskt oavsett vilken webbserver du kör på dom andra maskinerna, iom att den bara fungerar som en proxy. Tänk också på att om du kör med bara en lastbalanserare så kommer man inte åt någon server alls om den går ner. Det går att köra två lastbalanserare parallellt, så den andra tar den förstas plats om den märker att den första går ner. Nu när jag tänker på det så går det ju såklart även att köra bägge maskinerna som lastbalanserare, så att den som är primär lastbalanserare balanserar mellan den andra och sig själv. Det går att krångla till det hur mycket man vill!

Men ärligt talat så tjänar ni (iaf i mitt huvud) mer på att separera tjänsterna än på att klustra dom. För även när man klustrar dom så separerar man dom före, mao har man en bunt med Apache-maskiner, några som kör mySQL, osv.

Något som ni tjänar ännu mer på (både ekonomiskt och kunskapsmässigt) är att optimera programvaran och inställningarna. Effektivare kod och anpassade inställningar kommer man väldigt långt med, för att inte tala om cache-lösningar och PHP-acceleratorer.

Nyfiken fråga, hur mycket trafik räknar ni med att ni kommer att få?

  • Medlem
  • Tranemo
  • 2008-11-20 09:16

Testade att köra MySQL på en annan maskin än vad Apache/PHP ligger på och det var inga större problem, kändes dock långsammare än att ha allt på samma maskin, något som stryper någonstans.

Satt och funderade lite igår om att köra som du sa, köra 2st lastbalanserade servrar parallellt, sätta upp Apache identiskt på båda maskinerna, fast anger varandra istället. Sen under dessa köra 2st replikator databaser, problemet är väll om en av av dom 2st lastbalanserade servrarna går ner och databasen med read/wright också går ner så servern bara hämtar information från databasen som endast har read rättigheter, vad händer då?
Det känns inte som om det är full redundans på det sättet.

Jao dom kommer ju att separeras, om vi kör 2st Apache servrar och 2st MySQL servrar så måste dom ju på något sätt lastbalanseras.

Någon som kan rekomendera en bra switch som passar till dom ändamålen jag vill ha?

Ursprungligen av x-per:

Testade att köra MySQL på en annan maskin än vad Apache/PHP ligger på och det var inga större problem, kändes dock långsammare än att ha allt på samma maskin, något som stryper någonstans.

Det ska inte vara märkbart med den belastning du har. Vi kör separat MySQL server och har inga märkbara skillnader mot att köra internt. Testa att stänga av DNS lookups i MySQL:

Citat:

You can disable DNS hostname lookups by starting mysqld with the --skip-name-resolve option. However, in this case, you can use only IP numbers in the MySQL grant tables.

Ursprungligen av x-per:

Satt och funderade lite igår om att köra som du sa, köra 2st lastbalanserade servrar parallellt, sätta upp Apache identiskt på båda maskinerna, fast anger varandra istället. Sen under dessa köra 2st replikator databaser, problemet är väll om en av av dom 2st lastbalanserade servrarna går ner och databasen med read/write också går ner så servern bara hämtar information från databasen som endast har read rättigheter, vad händer då?
Det känns inte som om det är full redundans på det sättet.

Jao dom kommer ju att separeras, om vi kör 2st Apache servrar och 2st MySQL servrar så måste dom ju på något sätt lastbalanseras.

Som jag skrev i ett tidigare inlägg så är det inte en bra lösning med två passiva lastbalanserare. Sätt upp en aktiv lastbalanserare framför dom istället.

Att köra replikering av MySQL databaserna innebär endast balansering av läsningar - inte ökad redundans (det är inte samma sak) eftersom om Master databasen dör så dör allt.

Alternativet är att köra Master/Master replikering eller att köra MySQL Cluster där det inte spelar någon roll om ena databasen dör men det är rätt komplext.

Ursprungligen av x-per:

Någon som kan rekomendera en bra switch som passar till dom ändamålen jag vill ha?

Du har egentligen inte berättat vad switchen har för roll i helheten så i detta läge skulle jag säga att vilken burk som helst fungerar.

Ursprungligen av irrelogical:

mod_proxy_balancer fungerar faktiskt oavsett vilken webbserver du kör på dom andra maskinerna, iom att den bara fungerar som en proxy. Tänk också på att om du kör med bara en lastbalanserare så kommer man inte åt någon server alls om den går ner. Det går att köra två lastbalanserare parallellt, så den andra tar den förstas plats om den märker att den första går ner.

Även om mod_proxy går att använda som lastbalanserare så blir den "passiv" och du har ju ingen redundans. Att köra två passiva lastbalanserare (en på varje burk) skapar nästan mer problem eftersom båda teoretiskt sett kan styra all trafik till en server som sen kanske inte kan hantera lasten - men det vet ju inte mod_proxy om...

Enda vettiga sättet är att ha en separat aktiv lastbalanserare framför webbservrarna - exempelvis Balanceng.

Ursprungligen av irrelogical:

Men ärligt talat så tjänar ni (iaf i mitt huvud) mer på att separera tjänsterna än på att klustra dom. För även när man klustrar dom så separerar man dom före, mao har man en bunt med Apache-maskiner, några som kör mySQL, osv.

Keep it simple. Tre Mac mini med 4GB RAM och varsin Mac OS X Server licens kostar mer än en Xserve QuadCore och kommer inte i närheten av prestanda.

"Been there - done that" liksom

  • Medlem
  • Nacka
  • 2008-11-26 00:17

Jag vet inte vad den slutgiltiga sidan du siktar på är för någon sida, men om det verkligen är viktigt att den är uppe 100% (eller så när som möjligt iaf) så tycker jag du ska göra såhär:

Kör 2st burkar med MySQL Cluster och två stycken burkar med Apace, PHP och APC samt en aktiv lastbalanserare/brandvägg framför.
I början kan du ju göra det med Mac minis, men när det väl gäller så ska du köra burkar så att normal belastning kan klaras av på 1 MySQL backend och en Apache frontend.

Men det här blir dyrt, väldigt omständigt att underhålla och installera och är overkill för 99% av alla sidor vill jag påstå.

Jag tycker du ska gå på en, eller möjligen två servrar, och jag tror du tjänar både gråa hår och pengar på att köpa en Xserve framför ett gäng minis direkt. Visst, det är coolt med lastbalansering och och MySQL Cluster, men det smakar mer än det kostar om man inte verkligen behöver det...

Jag kan inte tänka mig att någon skulle vara så dum att dom väljer Mac mini som server i kombination med MySQL cluster. Med tanke på att det sitter en 2.5" notebook disk i datorn (långsam - ingen RAID - inte gjord för databaser), det är max 4GB RAM (MySQL cluster kräver att hela databasen ligger i tillgängligt RAM) och den har bara en nätverksport (du bör ha en dedicerad Ethernetkabel till Clustret).

  • Medlem
  • Nacka
  • 2008-11-26 00:36

Well, tanken är väl inte att köra det permanent i någon sorts driftmiljö isåfall.

Men för att klargöra hur jag menade - MySQL Cluster är enbart en ***-förlängare för i stort sett alla tillämpningar. Visst finns väl användningarna, men inte i vanliga webblösningarna.
Då är det vettigare och smidigare att skaffa en större server och slimma konfigurationen på servern.

1
Bevaka tråden