mux schreef op dinsdag 11 maart 2014 @ 10:39:
[...]
Omdat ik me toch een klein beetje verantwoordelijk voel zal ik toch maar antwoorden... Voor de duidelijkheid: ik betrek deze dingen voornamelijk op grotere servers/datacenters/etc., maar het is gedeeltelijk net zo relevant voor thuisservers en small business servers.
Er zijn nogal wat mythes en overdreven gegeneraliseerde
best practices die zó hard ingebakken zijn dat er niet eens meer over wordt nagedacht. In orde van mythe-heid:
Op dit vlak kunnen we elkaar wel vinden: het is belangrijk dat je goed nadenkt over wat je doet. Niet slechts 'regeltjes' uitvoeren uit een boekje.
In al mijn scenario's ga ik er vanuit dat het gaat om belangrijke applicaties / services voor een bedrijf waar mensen hun brood mee verdienen.
- Overal moet ECC in
Servers: ja.
- Alles moet redundant
Server 2x uitgevoerd, beiden redundant. Qua voeding, disk etc. Redundantie in een server kost bijna niets.
Uit fiancieel oogpunt is er geen reden om het niet te doen, en geeft je alleen maar extra veiligheid.
EEN SERVER = GEEN SERVER
- Alles moet aan een UPS/noodstroomvoorziening
Ja.
- Servers moeten allemaal aan een cold/hot chamber op 25 +/- 5 graden, 80% RH gehouden worden
Nee, servers kunnen beter tegen warmte dan wij dat kunnen. Niet nodig, eens denk ik.
- Een server die niet 100% load draait is overgedimensioneerd
Lijkt me totale onzin, bovendien moet je pieken kunnen opvangen, mee eens dus?
- Virtualiseer alles!
Absoluut, als het half kan doen.
- density, density, density!
Lijkt me niet zo boeiend, behalve voor mensen met ruimte gebrek.
Zowat de enige twee definitieve eigenschappen van een server zijn (1) wat voor RAM erin gaat en (2) support voor SMP. Alle andere eigenschappen die misschien toe te schrijven zijn aan een server zijn inmiddels ook verkrijgbaar in consumentenspul.
Dit topic gaat over consumenten spul, maar de popcorn discussie niet. Dus consumentenspul, ik wil het er niet over hebben.
Dan komt ook meteen de vraag: goh, wat nou als er een bitflip gebeurt in het geheugen, DAN CRASHT ALLES OMFG!!! En ja, bitflips gebeuren regelmatig. Meermalen per dag in een modern serversysteem, soms zelfs meermalen per uur. Maar de daadwerkelijke impact op je systeem? Reken maar dat softwarebugs en niet-robuuste exception handling de significantie van ECC heftig overstijgt.
Alles wat hier staat is gewoon fout. Zo vaak flippen bits ook niet, maar vaak genoeg dat je er last van hebt.
applicatiefouten laten niet een hele esxi host vastlopen met 50+ VMs.
Het is eerder de vraag waarom wij het accepteren in consumenten spul dat daar GEEN ecc geheugen in zit. (antwoord: geld en onwetendheid).
Maar adviseer alle sever vendors maar om servers zonder ECC geheugen te introduceren, blijkbaar weten ze niet zo goed wat ze doen.
Bovendien schalen geheugenfouten niet met de hoeveelheid geheugen in een systeem, maar met writes naar geheugen, zeker als je het over serversystemen zonder self-refresh geheugen hebt. Dus... en dit is iets wat steeds vaker wordt gedaan: zelfs op kritieke systemen is ECC in geheugen vrijwel altijd géén belangrijke factor. Alleen bij zéér langdurige HPC-taken waar zowel heftig op geheugenbandbreedte als op iteratieve berekeningen op dezelfde dataset wordt geleund is ECC absoluut noodzakelijk. Voor een Oracle of LAMP-rack is het nutteloos.
Totaal gelul. 1 bitflip en de boel raakt corrupt of crashed. ECC is voor iedereen relevant en daarom verkopen de vendors ook geen servers zonder ECC geheugen.
De enige andere reden om een serversysteem te nemen, afgezien van de form factor, is de hoeveelheid geheugen die je erin kunt proppen. Guess what, zelden maken mensen daadwerkelijk nuttig gebruik van hun geheugen. Er wordt vaak gewoon voor gekozen om het geheugen te sizen naar de maximale databasegrootte en de hele database dan maar op een RAM-disk te plempen, zelfs als een sparse database makkelijk in 4GB zou passen.
Wie dat doet moet als de sodemieter gecontroleerd worden op drugsgebruik (database op ramdisk).
Je schetst nu scenario's van mensen die niet weten wat ze aan het doen zijn. Dat is niet zo interessant.
En zelfs wanneer alles in geheugen staat zijn de programma's die over de data itereren vaak zo slecht ontworpen dat een SSD een véél kosteneffectievere oplossing zou zijn. We hebben het bijvoorbeeld over MSSQL dat niet eens 1GB/s haalt op een vrijwel sequentiële database-leesactie over DDR3L-2133 (17GB/s raw datarate).
What de fuck? Slechte programma's over SSD draaien ipv RAM?
Are you nuts?
Stel je voor: een servermobo (€1500) met twee procs (€4000) en 256GB geheugen (€3000) vervangen
door een consumersetje met 64GB geheugen (sub-€1500). Voor veel toepassingen kan het. Doordat consumerborden véél efficiënter met energie omgaan en zoveel goedkoper in aanschaf zijn kun je er zelfs een cold spare naast hangen zonder erover na te denken.
Ga lekker ESXi draaien op consumenten spul zonder ECC en max 64GB per host. Maar volgens mij wil je van virtualisatie af.
En ja, er zijn toepassingen waar het hangen van veel geheugen aan één processor inderdaad nuttig is of zelfs vereist. Maar dat is een kleine subset van de servers die er nu zo uitzien. Geheugen is 'goedkoop', maar niet zó goedkoop. Op de aanschaf van een server die toch al 10k+ kost is het een relatief kleine extra kostenpost, maar veel bedrijven realiseren zichzelf niet eens dat je met minimale concessies ook kunt downscalen naar workstation-level hardware en daarmee alleen al in aanschaf (laat staan licentie- en servicekosten) een hoop kunt besparen.
Volgens mij wil je geen virtualisatie, maar gewoon alles op goedkope consumenten hardware draaien google-style zodat je gewoon redundancy over servers realiseerd en niet binnen servers.
Dat kan best een OK aanpak zijn voor web schaal achtige zaken, met goeie provisioning. Maar ook daar zou ik voor availability absoluut geen non-ECC hardware gebruiken. Wat denk je dat Google en Amazon doen?
Maar voor de meeste bedrijven die intern KA en allemaal interne apps draaien, is dit totaal onrealistisch.
Daar is virtualisatie vrijwel altijd de redelijkste oplossing.
Hoe verbeter je je uptime? Fail safe. Als er iets stukgaat moet er direct overgeschakeld kunnen worden naar een hot spare. Dat is het denken van een hoop mensen, en dit is voor 100% availability-systemen een onontkoombare werkelijkheid. Maar dat wil niet zeggen dat élk systeem in élk aspect redundant moet worden uitgevoerd. Je hoeft niet elke voeding en elke harde schijf dubbel uit te voeren. Het lot gaat je namelijk tegenwerken als je dat doet. 1:1 redundantie betekent dat je een 2 keer zo hoge kans (in de praktijk zelfs nog wat meer - dit heet de failure growth factor) hebt dat er *iets* misgaat. Als je verschillende systemen redundant uitvoert die van elkaar afhangen is het effect zelfs nog veel sterker - een hogere failurerate van redundante harde schijven veroorzaakt bijvoorbeeld een hogere failurerate van anders prima functionerende voedingen. Sommige harde schijven falen namelijk op een manier die de voeding overbelast.
Je failover oplossing moet redelijk los staan van je productie, true. Maar dat heeft niets te maken met redundancy van je componenten. En zoveel kost dat laatste allemaal niet.
Zoals ik ook schreef: 1 san is geen san. 1 server is geen server. Inderdaad, zul je veel dubbel moeten uitvoeren, maar het hoeft niet 1 op 1. Je kunt met VMware een licentie pakket kopen voor 3 hosts, waarbij je nummer 3 dus op een andere physieke locatie zet, als dat kan binnen je bedrijf (of in dc) en als je die wat over provisioned met ram, kun je op nummer 3 alles draaien van 1 en 2. Niet met gelijke performance, maar dat is dan de trade off. Tuurlijk, SAN moet wel 1:1 maar ook daar kun je kiezen om die niet zo bruut uit te voeren qua 15K 10K SSD disks en wat meer met 7200 rpm te werken. Kost performance, kan gedonder geven, maar dat moet je gewoon testen.
Redundantie in een ideale wereld werkt als n + 1, dat wil zeggen: als je n systemen met een identieke functie hebt hang je daar 1 hot spare naast die de functie kan overnemen als één van de systemen in de array het begeeft. Je zorgt er dan voor dat de software of load balancer zo is ontworpen dat dit kan. Je moet kunnen abstraheren naar een n + 1-model. In veruit de meeste toepassingen leidt dit tot de beste uptime; je hebt de kleinst mogelijke kans op failures zonder redundantie te verliezen. Echter, wat doe je als n = 1? Hoe ga je om met redundantie als je maar één systeem hebt?
Dat is een beetje een probleem. Aan de ene kant is het aantrekkelijk om te zeggen: nou, dan doe je volledige 1:1 redundantie. Maar in de praktijk kost je dat alleen maar veel teveel geld en tijd; je hebt (gemiddeld) ongeveer 3 keer zoveel servicekosten vanwege de hogere failure rate, twee keer zoveel aanschafkosten en twee keer zoveel verbruikskosten. Afschuwelijk slechte kostenefficiëntie. De beste oplossing hier is waarschijnlijk ofwel een cold spare (en dus <100% uptime), ofwel een heterogeen redundant systeem, dat wil zeggen een veel goedkopere, simpelere doos die de belangrijkste taken overneemt terwijl het primaire systeem wordt geservicet. Maar de laatste keuze moet wel zijn om een homogeen redundant systeem neer te zetten.
In de praktijk los je dit op met virtualisatie, die hosts zijn vaak wel 'duur', maar bedenk je wat echte hardware had gekost. Echte hardware schaalt niet qua beheerslast, ruimte, etc. Het gaat niet om alleen de aanschafprijs en stroomkosten. Hardware is evil, moet je zo weinig mogelijk van hebben.
Uptime, uptime, uptime. Als de stroom uitvalt moeten alle computers verder werken! Overal power conditioning inbouwen zodat overspanning en brownouts ondervangen kunnen worden! In theorie klinkt dit geweldig, maar er zijn drie hele, hele, hele grote problemen met dit idee:
1) Als de stroom in je datacenter uitvalt, valt waarschijnlijk de stroom uit in een veel grotere omgeving
2) Veruit de meeste power failures worden veroorzaakt door noodstroomvoorzieningen
3) Noodstroomvoorzieningen werken maar ongeveer 70% van de tijd naar behoren. Zelfs in kritieke omgevingen zoals ziekenhuizen.
Ik geloof daar geen hout van (2)(3), maar misschien heb je goede bronnen die me overtuigen?
Wederom heb je hier te maken met een soort wrangen kosten/batenanalyse. Alles moet aan de noodstroomvoorzieningen, maar goh dit kost best een hoop geld, dus gezien de stroom nooit uitvalt kunnen we net zo goed wel bezuinigen op deze dieselgeneratoren en even wachten met het tanken tot de dieselprijzen omlaag gaan. Dit is serieus hoe een hoop datacenters erover nadenken.
Tegen drugsgebruikers is niets opgewassen.
Je schetst nu een veel te negatief beeld wat niet strookt met de werkelijkheid om het maar af te zeiken.
Dus met deze gedachte dat noodstroomvoorzieningen niet bepaald 100% betrouwbaar zijn is het een stuk moeilijker goed te praten om er veel geld aan uit te geven. Is 100% power-uptime nodig als statistisch de meeste stroomuitval gepaard gaat met zeer grote netwerkuitvallen?
Je wilt iets van noodstroom al is het maar om de servers en met name (SAN) storage niet te laten crashen.
Ik weet wat je gaat zeggen over ZFS maar kom gerust daarna weer terug naar de echte wereld.
Dat het wel eens mis gaat wil niet zeggen dat je het dan maar niet moet doen. Ja het kost geld, en ja je moet goed kosten/baten afwegen. Waarom doe je iets?
Of dat ze alleen gebeuren als het hele datacenter toch onder water staat en niet kan werken? Is het niet een veel beter idee om al dat geld te steken in lokale infrastructuur? Of in diversificatie van je serverpark
met een aparte DNS-server/loadbalancer die traffic kan switchen?
Redundanctie over datacenters, dus datacenters 1:1. of 1:0.5 en dan wat minder performance of niet alle services beschikbaar. Dat is geen gek idee.
Dus twee datacenters, ver uit elkaar, geen geld in noodstroom dus goedkoop. Datacenter 1 valt uit, alles dood, servers en storage klappen uit, hele omgeving naar de kloten, hardare stuk, data corruptie, en service outage. Failover naar dc 2 en terwijl je op dc2 draait kun je weken aan de slag om de puin in dc 1 op te ruimen, om dan een fail back te doen.
Ik denk dat je dit beter kunt voorkomen.
Wederom, er is absoluut een niche voor UPS'en en grotere noodstroomvoorziening, maar die is kleiner dan je denkt. Uptime wordt maar in een relatief klein percentage van de datacenters gedomineerd door power availability, en je introduceert weer een extra schakel in je reliability-keten die stuk kan gaan (en daarbij alles meeneemt in je rack als het stukgaat).
Er schiet mij te binnen dat google servers met een accu uitrust zodat ze geen gecentraliseerde noodstroom
hoeven te regelen. Maar de meeste bedrijven kunnen dat niet zomaar regelen.
http://gigaom.com/2009/04...ackup-battery-per-server/Hah, leuke grap. Voorbeeld: Cofely. Virtualiseert 24 desktops op één server en claimt meer dan 50% energiewinst. Wat hebben ze daadwerkelijk gedaan? Ze hadden Pentium 4 desktops staan als workstations (~90W gemiddeld verbruik) en hebben dit vervangen door een hele sloot nieuwe netwerkhardware en een 2-processor Sandy Bridge-server van ruim 8000 euro (hardware) + VMWare ESXi (€20k + client licenses) met in totaal minder dan 25% van de resources van de voorgaande 24 systemen. Op iedereens tafel staat alleen nog een thin client met een verbruik iets onder de 20W. Server verbruikt gemiddeld zo'n 350W. Netwerkapparatuur wordt niet meegenomen in het verbruik.
Niemand hier hoeft je te vertellen dat je voor €1000 per werkplek de meest monsterlijke computer neer kunt zetten die níet constant netwerkbelasting veroorzaakt en idle onder de 20W zit. Ja, er is energie bespaard ten opzichte van de voorgaande situatie, maar er is niet nagedacht over de béste oplossing. Er is alleen iemand van VMWare Enterprise langsgekomen die hun rekensommetje heeft voorgedaan.
Op dit vlak zitten we meer op 1 lijn: ook hier geld dat je het gewoon goed moet narekenen en zelf moet nadenken en nooit op verkoop praatjes af moet gaan. Gelden de voordelen voor jouw situatie en wordt alles wel meegerekend?
Bovendien had de alternatieve oplossing een véél betere user experience dan in het geval van massa-virtualisatie. Ja, het heeft deployment en administratie-voordelen, maar het heeft net zozeer ook nadelen. Eén server down en 24 mensen hoeven niet naar hun werk te komen. De kans dat 24 individuele workstations het in één keer begeven is een stuk kleiner.
1 server down merk je niet want je hebt N+1 redundancy op zijn minst.
Wat desktop virtualisatie betreft, daar heb ik zelf ook vraagtekens bij, als ik de horror verhalen lees over je SAN requirements.
Ik hoop dat iedereen van zijn/haar popcorn geniet. Leuke rant van Mux, daar hou ik wel van. Er wordt tenminste nagedacht over wat we eigenlijk aan het doen zijn. Neem eens een stap terug en denk na.