Ik begin te merken dat ik door de bomen het bos niet meer kan zien. Dus dan wordt het tijd om eens te kijken wat andere mensen ervan denken. Ik ben simpel gezegd op zoek naar een goede oplossing om te zorgen dat een database 24x7 beschikbaar is.
Even wat achtergrond. Wij hebben een OLTP systeem wat +/- 500 inserts per seconde op een mysql database doet. Hiernaast worden er nog wat rapporten op de database gedraaid maar uiteindelijk hebben we ongeveer 80% inserts/updates tegenover selects. Deletes doen we niet aan
Het resultaat is dan ook dat de database met grofweg 500 GB tot 1TB per jaar groeit
Transacties verliezen betekent geld verliezen, dus moeten we dit voorzien van een HA oplossing.
Wat research heeft de volgende 4 methoden voor HA opgeleverd
1. MySQL replicatie (desnoods met MMM) Deze oplossing lijkt met name geschikt voor systemen die veel reads doen en in mindere mate geschikt voor systemen waarbij veel writes plaatsvinden. Met name het asynchrone karakter en de issues met synchronisatie lijken er voor te zorgen dat dit niet echt optimaal gaat werken
2. DRBD. Dit is een speciaal filesysteem wat blocks kopieert naar een tweede server. Dit is synchroom en het tweede filesysteem is dus altijd exact gelijk aan het eerste. Dit lijkt redelijk aan te sluiten bij wat ik ermee wil bereiken, maar er wordt wel gewaarschuwd dat de recovery tijd bij een failure uren kan duren als de database hersteld moet worden.
3. MySQL met data op een gedeelde partitie (mbv red hat cluster) Dit lijkt vrij dicht in de buurt van de DRDB oplossing te zitten met dit verschil dat de data zelf maar 1 keer moet worden opgeslagen.
4. MySQL Cluster. Dit lijkt zeer snel maar lijkt enorme hoeveelheden geheugen te vereisen Nu is het wel zo dat er tegenwoordig een optie is voor "MySQL Cluster Disk Data Tables" maar over de impact op performance is verdacht weinig informatie te vinden.
(Voor de geinteresseerde, de geheugeneisen voor een MySQL cluster Data Node)
Database Size * Replicas * 1.25 (data redundancy + indexes drive overall memory requirement) / number of data nodes.
Dus bij 3 servers moeten alle servers 4,17TB aan intern geheugen hebben. Houden we het geheugen beperkt tot 192GB per server moeten er 65(!) servers komen. Dit lijkt niet de ideale oplossing. Echter als het geheugengebruik dmv DiskDataTables drastisch kan worden ingeperkt is het wel een vorm van "automatische sharding" wat op zich wel interessant kan zijn om de performance te kunnen blijven verbeteren.
In mijn ogen lijken de eerste en vierde optie dus niet echt optimaal voor een database met veel schrijfacties en grote hoeveelheden data. De middelste twee opties lijken redelijk te kunnen uitpakken maar mocht de data corrupt raken ben je de data gelijk kwijt.
Wat zijn jullie ervaringen met deze vier manieren om een database van HA te voorzien?
Even wat achtergrond. Wij hebben een OLTP systeem wat +/- 500 inserts per seconde op een mysql database doet. Hiernaast worden er nog wat rapporten op de database gedraaid maar uiteindelijk hebben we ongeveer 80% inserts/updates tegenover selects. Deletes doen we niet aan
Transacties verliezen betekent geld verliezen, dus moeten we dit voorzien van een HA oplossing.
Wat research heeft de volgende 4 methoden voor HA opgeleverd
1. MySQL replicatie (desnoods met MMM) Deze oplossing lijkt met name geschikt voor systemen die veel reads doen en in mindere mate geschikt voor systemen waarbij veel writes plaatsvinden. Met name het asynchrone karakter en de issues met synchronisatie lijken er voor te zorgen dat dit niet echt optimaal gaat werken
2. DRBD. Dit is een speciaal filesysteem wat blocks kopieert naar een tweede server. Dit is synchroom en het tweede filesysteem is dus altijd exact gelijk aan het eerste. Dit lijkt redelijk aan te sluiten bij wat ik ermee wil bereiken, maar er wordt wel gewaarschuwd dat de recovery tijd bij een failure uren kan duren als de database hersteld moet worden.
3. MySQL met data op een gedeelde partitie (mbv red hat cluster) Dit lijkt vrij dicht in de buurt van de DRDB oplossing te zitten met dit verschil dat de data zelf maar 1 keer moet worden opgeslagen.
4. MySQL Cluster. Dit lijkt zeer snel maar lijkt enorme hoeveelheden geheugen te vereisen Nu is het wel zo dat er tegenwoordig een optie is voor "MySQL Cluster Disk Data Tables" maar over de impact op performance is verdacht weinig informatie te vinden.
(Voor de geinteresseerde, de geheugeneisen voor een MySQL cluster Data Node)
Database Size * Replicas * 1.25 (data redundancy + indexes drive overall memory requirement) / number of data nodes.
Dus bij 3 servers moeten alle servers 4,17TB aan intern geheugen hebben. Houden we het geheugen beperkt tot 192GB per server moeten er 65(!) servers komen. Dit lijkt niet de ideale oplossing. Echter als het geheugengebruik dmv DiskDataTables drastisch kan worden ingeperkt is het wel een vorm van "automatische sharding" wat op zich wel interessant kan zijn om de performance te kunnen blijven verbeteren.
In mijn ogen lijken de eerste en vierde optie dus niet echt optimaal voor een database met veel schrijfacties en grote hoeveelheden data. De middelste twee opties lijken redelijk te kunnen uitpakken maar mocht de data corrupt raken ben je de data gelijk kwijt.
Wat zijn jullie ervaringen met deze vier manieren om een database van HA te voorzien?
[ Voor 0% gewijzigd door humbug op 21-08-2011 10:19 . Reden: Spelling ]