Frage Cassandra - Hardware-Planung


Kurz gesagt: Wenn ich 5 Tb Daten habe und diese auf 5 Cassandra Servern bereitstellen möchte - muss jede Maschine 5 Tb Speicherplatz für Daten haben (ohne Protokollspeicher zu zählen)? Aus der Dokumentation klingt es, als ob Cassandra manchmal die doppelte Datenmenge benötigt - also 10 TB / Server oder 10 TB insgesamt im Array?

Wie viel RAM sollte jede Maschine haben? Angenommen, die 5 TB befinden sich alle im selben Spaltenbereich. Ich hatte geplant, den RAM auf jeder Maschine zu maximieren, aber ich bin nicht sicher, dass das genug ist. Benötige ich ein Array von Servern mit insgesamt 5 TB RAM?


6
2017-12-23 16:30


Ursprung


Ich habe Cassandra noch nie benutzt, deshalb weiß ich nicht, was Redundanz und Speichermöglichkeiten sind, aber es scheint mir, dass Cassandra X-mal den Datenspeicher für X-Kopien benötigen würde. - DerfK


Antworten:


Wenn Sie Ihre 5 TB Daten gleichmäßig auf Ihren 5 Servern verteilen, hostet jeder Server 1 TB Daten. Aufgrund der Komprimierungsanforderungen benötigt jeder Server 2 TB Speicherplatz (im schlimmsten Fall benötigt eine Komprimierung doppelt so viel Speicherplatz auf der Festplatte wie Daten), was insgesamt 10 TB in Ihrem Cluster bedeutet.

Im obigen Fall speichern Sie nur eine einzelne Replik Ihrer Daten im Cluster. Wenn ein Server ausfällt, ist in diesem Fall ein Fünftel Ihrer Daten nicht erreichbar. Wenn Sie zwei Replikate Ihrer Daten im Cluster speichern möchten, benötigt jeder Knoten 4 TB Speicherplatz, was insgesamt 20 TB in Ihrem Cluster bedeutet.


6
2017-12-23 19:56



Das ist einfach. TY. Irgendwelche Hinweise auf die Menge an RAM? - ethrbunny
RAM ist komplizierter: Nicht genug ist nie gut, zu viel für Java und Sie haben große GC-Zeit. Sie sollten Ihren vm überwachen und ihm genau das geben, was er braucht, um zu lange GC zu vermeiden, und so viel RAM wie möglich für den Plattencache übriglassen. - jfg956


Angenommen, alle Daten befinden sich im RAM, ist das eine riesige und teure Maschine. Glücklicherweise müssen Sie in den meisten Anwendungen nicht alle Ihre Daten im Speicher behalten, sondern nur Ihre aktiven / aktiven Daten.

Cassandra ist in der Lage, automatisch Daten von HD in den RAM zu holen, wenn der Eintrag aus dem Speicher fehlt. Umgekehrt, wenn die Aufzeichnung in nicht zugreifenden Daten aus dem Speicher ausgeschlossen wird ("kalte" Daten). Sie können Cassandra als Anwendungsebenen-Cache vergleichen, wobei Einträge Kontozeilen sind. Cache-Treffer / Fehlschläge in diesem Fall können als Datensätze auf der Cassandra-Dateisystem-Platte interpretiert werden, die in den Speicher zurückgebracht werden müssen.

Also in Bezug auf Sizing:

  • HDD ist für den gesamten Datensatz dimensioniert
  • RAM ist so dimensioniert, dass "Cache-Misses" reduziert werden
  • Der Replikationsfaktor beeinflusst den Durchsatz und die Ausfallsicherheit

Also reden über RAM: Sie müssen nur genügend Daten im Speicher halten, um unnötiges erneutes Abrufen von der Festplatte zu vermeiden. Es ist sehr abhängig von der Anwendung. Ich würde vorschlagen, ein Benchmarking durchzuführen, um zu überprüfen, wie viele aktive Sitzungen Sie pro Tag in Bezug auf die Gesamtanzahl von Sitzungen erhalten, die Sie auf dem System gespeichert haben. Dies trifft gut zu, wenn Ihr System lesendominiert ist und Lesezeiträume anzeigt.

Schaut auch diesen Thread für weitere Inspiration an https://stackoverflow.com/questions/4924978/cache-design-question

Dieses Verhältnis von Live-Daten zu Gesamtdaten bestimmt die RAM-Anforderungen für Ihr System. Im Wesentlichen ist es ein Kompromiss von Cassandra vermisst vs RAM Kosten. Ähnliche Überlegungen - auf einer anderen Ebene - gelten für das Design von CPU-Caches.


3
2017-12-16 16:44





Der Cassandra-Speicherplatz pro Knoten für die Leistung beträgt 1/2 Terabyte. Wenn Sie also nicht auf extrem lange Komprimierungen und sehr lange Map- / Reduce-Zeiten warten möchten, sollten Sie überdenken, wie viele Maschinen erforderlich sind.


2
2017-12-24 03:59



Gag - ernsthaft? Wo kann ich mehr darüber lesen? - ethrbunny