Daten von einer großen auf mehrere kleine Platten verteilen

TAiS46

Registered User
Hallo,

ich habe mein system aktuell mit 2xRaid10 1,5TB platten konfiguriert.
Jetzt möchte ich ein Raid auflöschen und die Platten einzeln einbinden.
Gibt es die Möglichkeit, von dem einen Raid Verbund, die Daten irgendwie auf die einzelnen platten zu verteilen?
Mit rsync geht das ja leider nicht.

Wie sie verteilt werden, ist imprinzip egal.
Datei 1 -> hda
Datei 2 -> hdb
[..]
und das selbe wieder von vorne .. also wurst piep egal, hauptsache auf allen platten verteilen sich die daten.

Raid0 kommt nicht in Frage.

Gruß Simon
 
Wenn Du den RAID1-Teil vom RAID10 auflöst, hast Du zwei identische Platten mit jeweils allen Daten.
Du müstest also nur jeweils die Hälfte löschen (natürlich auf beiden Platten unterschiedliche :D).
 
Hab mich bissl falsch ausgedrückt. 2xRaid10 mit jeweils 12 1,5tb platten :)

Jetzt will ich den einen Verbund lösen, einzelne platten erstellen (12 stück) und auf diese vom anderen raid die daten verteilen.
 
Hallo,

darf man Fragen wieso du das machen möchtest? Wäre u.U. nicht ein Raid5/6 geigneter? Ansonsten würde ich einfach (wie schon beschrieben) den einen Raid1 Strang aus dem Raid nehmen, dann die Platten entsprechend formatieren und anschließend per rsync die Daten vom Raid auf die einzelnen Platten kopieren (du hast ja dann quasi auf einen Schlag doppelt soviel Speicher).
Aber Vorsicht: Wenn sich während des Kopierens eine der 6 Raid0-Platten verabschiedet, sind deine Daten weg!

Grüße Johannes
 
Hallo,

ich habe lange mit raids rumgespielt, um das beste an Performance raus zu bekommen.
Raid5 hatte ich am Anfang. Konnte ich keinen guten Durchsatz erzielen.
Ich betreibe Filehosting und da geht es am meisten um den Durchsatz!

Raid5 - Wie gesagt, konnte ich keinen hohen Durchsatz erzielen.
Raid10 - Lief schon besser, aber immer noch nicht optimal.
Raid0 - Kommt nicht in Frage. Ggf. 2-3 Platten im Raid0 aber lieber nicht.

Es ist teilweise so, das ca. 700 clients ca. 300 verschiedene Daten von der Festplatte ziehen. Welche eine Größe von ~500Mb haben.
Da kämpfen die Platten sich im Raid tot.

Wenn ich es auf einzelne Platten verteile, kann es natürlich auch sein, das der meiste Teil von Platte 1 zieht. Aber es ist dann halt mehr balancierter und ich erziele sicherlich mehr Durchsatz als im Raid.

Nun gut. Wenn ich den Raid1 Stang aus dem Raid10 löse und die Platten formatiere. Wie kann ich dann am besten die Daten auf die einzelnen Platten verteilen, das verstehe ich noch nicht ganz.
 
Bessere Performance als mit RAID 1+0 wirst du kaum hinbekommen. Bei einzelnen Platten wirst du selten eine balancierte Nutzung sehen und das ist dann nur für den Glückspilz gut, der eine Platte für sich alleine hat.

Wieviel IOPS bringt die jetztige Konfiguration denn? Hast du mal ein sar -d 1 10 laufen lassen?

Was willst du eigentlich optimieren? Sind die Downloadraten zu niedrig oder ist das Raid nur zu laut? Irgendwo hat jedes System sein Limit und bei I/O geht mehr Performance nur durch mehr Spindeln. Statt 12x 1.5TB also besser 120x 150GB.
 
Die Downloadrate ist zu niedrig ja.
Wie gesagt greifen mehrere Clients auf einmal auf verschiedene Dateien zu.
Bei einem Raid10 werden die Daten ja auf die Platten verteilt. Wenn ich Client A Datei 1 lädt. Und Client B Datei 2 lädt. Springt die Platte ja mit dem Lesekopf hin und her.

Wenn Datei 1 aber auf Platte 1 liegt und Datei 2 auf Platte 2. Gibt es da keine Probleme.
Selbst wenn 10 Clients Datei 1 laden würden, wäre die Platte mit dem lesen nicht so überfordert.
Hoffe man versteht was ich meine.

Dein Befehl ergibt folgendes:
Code:
Durchschn.:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Durchschn.:    dev8-0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Durchschn.:    dev8-1      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Durchschn.:   dev8-16    381,83  90936,74     54,22    238,30    160,57    200,71      2,57     98,23
Durchschn.:   dev8-17    381,83  90936,74     54,22    238,30    160,57    200,71      2,57     98,23
Durchschn.:   dev8-32     15,52    307,27    117,88     27,39      0,17     11,22      2,76      4,28
Durchschn.:   dev8-33      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Durchschn.:   dev8-34      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Durchschn.:   dev8-35      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Durchschn.:   dev8-36     15,52    307,27    117,88     27,39      0,17     11,22      2,76      4,28
Durchschn.:   dev8-48      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Durchschn.:   dev8-49      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
 
Bei einem Raid10 werden die Daten ja auf die Platten verteilt. Wenn ich Client A Datei 1 lädt. Und Client B Datei 2 lädt. Springt die Platte ja mit dem Lesekopf hin und her.
Das stimmt so leider nicht 100%ig. Du musst natürlich auch bedenken, dass jede Platte nur 1/12 der Datei lesen muss - also auch nur zu 1/12 der Sektoren springen muss.
Meines Wissens ist ein Raid 10 wirklich so ziemlich das schnellste, was du für Lesezugriff erreichen kannst. Ganz zu schweigen von der Datensicherheit und dem Problem der Datenaufteilung!

Grüße Johannes
 
Deine Beschreibung mit Client A und B ist erstmal einleuchtend. Für 700 Clients mit 700 verschiedenen Files hast du aber zu wenig Platten für den Ansatz und genau da kommt RAID0 ins Spiel, in dem jede Datei auf alle Platten verteilt wird, damit sich das statistisch gesehen verteilt. Oder ist die Anzahl der aktiven Files deutlich kleiner?

Ais den Daten werde ich noch nicht ganz schlau. Hast du da noch mehr Platten drin, die derzeit ungenutzt sind, oder sind das alles Devices vom RAID? Im zweiten Fall hast du eine ziemliche Ungleichverteilung und das kann eigentlich nicht sein.

Die beiden Devices 16/17 sind eigentlich ganz flott (2.57ms durchschnittliche Zugriffszeit). Für die Performance ist nicht so gut, daß da eine lange Queue (160 I/Os) ist, so daß jeder I/O im Schnitt 200ms warten muß. Das bekommst du aber nur in den Griff, in dem du die I/Os auf mehr Platten verteilst.

Du liest bei jedem I/O über 120KB von der Platte (128KB sieht rund aus). Werden die von der Applikation dann auch sofort verarbeitet? Sind die Netzwerkpuffer groß genug, damit das schonmal Richtung Netzwerk gehen kann? Wäre auch eine Erklärung, wenn du die Daten mehrfach lesen mußt, wenn durch Prefetching mehr Daten in den Cache kommen und dann schon wieder weg sind, wenn man sie brauchen könnte.
 
Für 700 Clients mit 700 verschiedenen Files hast du aber zu wenig Platten für den Ansatz und genau da kommt RAID0 ins Spiel, in dem jede Datei auf alle Platten verteilt wird, damit sich das statistisch gesehen verteilt. Oder ist die Anzahl der aktiven Files deutlich kleiner?

Ais den Daten werde ich noch nicht ganz schlau. Hast du da noch mehr Platten drin, die derzeit ungenutzt sind, oder sind das alles Devices vom RAID?

Du liest bei jedem I/O über 120KB von der Platte (128KB sieht rund aus). Werden die von der Applikation dann auch sofort verarbeitet?

Naja, sagen wir mal 700 Clients, die 300 Files laden.

Ja, ich habe noch weitere Devices in meinem System abgesehen von den RAID.

Die Verarbeitung wird auch sofort gemacht.

Meint ihr also, das ich aus den Platten nicht mehr raus kriegen werde an Performance? Das einzige ist dann halt mehrere kleine Platten zu einem Raid zu machen?
 
Meint ihr also, das ich aus den Platten nicht mehr raus kriegen werde an Performance? Das einzige ist dann halt mehrere kleine Platten zu einem Raid zu machen?

So ist es. Rechne doch mal mit deinen Wunschparametern durch.

Angenommen du willst eine Downloadrate von 2MBit/s. Das entspricht ganz platt 256KB/s. Bei 700 Clients also 179200KB/s (lassen wir das ganze Netzwerkzeugs mal außen vor). Bei der vorhandenen I/O-Größe von 128KB sind das also 1400 I/Os pro Sekunde, die das RAID können muß (worst-case: jeder Client liest andere Daten; Caching gibt es nicht). Eine Platte kanst du, wenn du auf Performance Wert legst, mit 30-50 I/Os pro Sekunde befeuern, danach fangen die Queues an und es wird langsamer. Für angenommene 50 I/Os pro Sekunde pro Platte benötigst du also 28 Platten, um die 1400 I/Os Gesamtleistung zu bringen. Das Ganze mal zwei, wenn es gespiegelt sein soll.
 
Das Ganze mal zwei, wenn es gespiegelt sein soll.

Soviel ich weiß, teilt er beim Raid1 die IOs (natürlich nur beim Lesezugriff) auf die beiden Platten auf. Sprich bei 50 IOs liest er 25 von IOs von der einen 25 von der anderen. Somit würdest du mit 28 Platten hinkommen - vorausgesetze der Speicher reicht dir.

Grüße Johannes
 
Das hört sich ja alles schon mal sehr spannend an.
Somit würde ich jetzt sagen, um einen guten Durchsatz zu erzielen, sollte man sich lieber kleine Server mit ein paar mehr platten Kaufen, als einen großen mit weniger Platten.

Was empfehlen sich denn dann so für Server?
Würde ggf. welche kaufen und diese dann irgendwo als Housing laufen lassen.
Ich denke mal in meinem Fall kommt es gar nicht auf Arbeitsspeicher / CPU so wirklich an oder? Hauptpunkt sind bei mir eher die Festplatten.
500GB oder lieber 250GB platten?
 
500GB oder lieber 250GB platten?

Das ist die falsche Frage. Wenn du Performance willst, dann ist die mittlere Zugriffszeit das einzige Kriterium (die Umdrehungszahl hängt da direkt dran). Wenn du das Geld hast, dann hole SAS mit 15000 U/min, da hast du 3.4ms Zugriffszeit und könntest pro Platte bis 100 I/Os pro Sekunde kalkulieren. Die SATA-Platte gleicher Größe kostet zwar nur ein Zehntel, schafft aber nur 8.5ms und deshalb ist bei 50 I/Os pro Sekunde dann auch Schluß mit Lustig.

Ich hab' dir oben gezeigt, wie du damit die Anzahl der Platten ausrechnest, die du für die Performance brauchst. Danach kannst du ausrechnen, wieviel Platz das mit welcher Plattengröße ergibt. Nur wenn du da mehr Daten draufpackst und deshalb mehr Clients bekommst, dann geht die Rechnung nicht mehr auf, weil die Performance für eine feste Anzahl Clients ausgerechnet ist.

Platten nach Größe zu kaufen ist nur gut, wenn man an die Daten nicht ran muß. Wer auf Performance Wert legt, der muß die Platten nach IOPS kaufen und damit hat man mittlerweile fast immer mehr Platz gekauft, als man sinnvoll nutzen darf.
 
Nochmal eine Frage dazu.

Ich verwende ja momentan RAiD10.
Somit habe ich ja die hälfte von der Kapazität meiner Platten zum lesen "ungenutzt" bzw nur zur Sicherung.

Es kommen am Tag rund ~100 neue Dateien dazu.
Am meisten werden die Files jedoch gelesen.
Read/Write Verhältnis 20:1.

Wäre es nun nicht sinnvoller, das RAiD10 auf zu lösen, daraus irgendwie einzelne Platten zu machen und nachts ein rsync durchlaufen zu lassen, der z.B. Platte1 auf Platte2 spiegelt?

Somit könnte ich nämlich abwechselnd Platte1 und Platte2 zum lesen der Daten benutzen und erziele so doppelten durchsatz / lesegeschwindigkeit.

Vllt. gäbe es auch die Möglichkeit 2xRAiD0 mit 12Platten zu erstellen und dann auch mir rsync die daten nachst auf den anderen Verbund spiegeln.

Edit: ich glaube das ist die beste Lösung!
Wenn es mal zu einem Defekt der Platten kommt, macht es nicht, wenn mal 20 Dateien fehlen oder so.
Aber logisch gedacht sollte das doch super funktionieren oder?
Wenn der erste RAiD0 Verbund ausgelastet ist, greife ich auf den andere RAiD0 Verbund zu.
Nacht, wenn nicht so viel los ist den rsync und alle sind glücklich :)
 
Last edited by a moderator:
Beim Raid10 wird von beiden Strängen (den beiden Raid1) gelesen. Beim Schreiben kann er natürlich nur mit der Geschwindigkeit eines Stranges schreiben, da die Daten ja auf beide Stränge müssen. Beim Lesen wird die Last entsprechend verteilt. Es ist also somit das Optimum.

Grüße Johannes
 
Habe mal ein wenig mit den RAiD-Systemen und hdparm gespielt.

Code:
1 Platte
 Timing buffered disk reads:  404 MB in  3.01 seconds = 134.25 MB/sec

RAiD1 - 2 Platten
 Timing buffered disk reads:  526 MB in  3.01 seconds = 174.69 MB/sec

RAiD0 - 2 Platten
 Timing buffered disk reads:  694 MB in  3.01 seconds = 230.63 MB/sec

RAiD0 - 4 Platten
 Timing buffered disk reads:  1098 MB in  3.00 seconds = 365.51 MB/sec

RAiD0 - 6 Platten
 Timing buffered disk reads:  1338 MB in  3.00 seconds = 445.52 MB/sec

RAiD0 - 12 Platten
 Timing buffered disk reads:  1428 MB in  3.00 seconds = 475.42 MB/sec

RAiD10 - 4 Platten
 Timing buffered disk reads:  682 MB in  3.00 seconds = 227.29 MB/sec

RAiD10 - 12 Platten
 Timing buffered disk reads:  1158 MB in  3.00 seconds = 385.94 MB/sec

Meine Idee ist nun, aus den 12 Platten die an einem Controller hängen, 6 RAiD0 zu machen.
Damit sollte ich demnach den besten Durchsatz erzielen oder nicht?
 
Last edited by a moderator:
Habe eben nochmal was getestet.
Habe 2 RAiD0 erstellt und bei beiden gleichzeitig ein hdparm durchgeführt.
Komischerweise fällt das Ergebnis dann so aus: Timing buffered disk reads: 404 MB in 3.01 seconds = 134.42 MB/sec

Liegt es vielleicht am 3ware Controller?
 
Back
Top