2015-01-15 9 views
18

Ich habe einen Cassandra-Cluster mit drei Knoten, von denen zwei oben sind. Sie sind alle im selben DC. Wenn meine Java-Anwendung in den Cluster schreibt, erhalte ich einen Fehler in meiner Anwendung, der auf ein Problem mit Cassandra zurückzuführen zu sein scheint:Nicht genug Replikat für Abfrage bei Konsistenz ONE verfügbar (1 erforderlich, aber nur 0 am Leben)

verursacht durch: com.datastax.driver.core.exceptions.UnavailableException: Nicht genug Replik für Abfrage bei Konsistenz ONE (1 erforderlich, aber nur 0 am Leben) bei com.datastax.driver.core.exceptions.UnavailableException.copy (UnavailableException.java:79)

Der Teil, der keinen Sinn macht, ist dass "1 erforderlich, aber nur 0 am Leben" Aussage. Es gibt zwei Knoten oben, was bedeutet, dass einer für die Replikation "lebendig" sein sollte.

Oder missverstehe ich die Fehlermeldung?

Danke.

Antwort

22

Sie erhalten diesen Fehler wahrscheinlich, weil der Replikationsfaktor des Schlüsselbereichs, zu dem die Tabelle gehört, einen Replikationsfaktor von 1 hat. Ist das korrekt?

Wenn die Partition, die Sie lesen/aktualisieren, nicht genügend verfügbare Replikate (Knoten mit diesen Daten) zur Einhaltung der Konsistenzstufe hat, erhalten Sie diesen Fehler.

Wenn Sie in der Lage sein wollen, mehr als 1 Knoten nicht verfügbar ist, zu handhaben, tun, was Sie können, ist in altering your keyspace suchen einen höheren Replikationsfaktor einzustellen, vorzugsweise in diesem Fall drei, und dann einen nodetool repair auf jedem Knoten zum Laufen zu bringen alle Ihre Daten auf allen Knoten. Mit dieser Änderung wären Sie in der Lage, den Verlust von 2 Knoten zu überstehen, um mit einer Konsistenzstufe von eins zu lesen.

This cassandra parameters calculator ist eine gute Referenz für das Verständnis der Überlegungen zu Knotenanzahl, Replikationsfaktor und Konsistenzstufen.

+0

Dank. Ja, das stimmt, es hat einen Replikationsfaktor von eins. Aber was ich nicht verstehe ist, dass ich einen sekundären Knoten hatte, der oben war. Also: ein Hauptknoten und ein Knoten, zu dem es replizieren konnte. In meinem Fall war nur einer von drei Knoten NICHT verfügbar. – user3712321

+3

Ein Replikationsfaktor von 1 bedeutet, dass für jede Datenzeile nur ein Replikat vorhanden ist. Wenn Sie also 1 Knoten und eine RF von 1 haben, bedeutet dies, dass alle Daten auf diesem Knoten nicht mehr verfügbar sind. Siehe: http://www.datastax.com/documentation/cassandra/2.0/cassandra/architecture/architectureDataDistributeReplication_c.html –

+0

Vielen Dank. Der Rechner, auf den du verlinkt hast, ist sehr hilfreich. – user3712321

2

Ich traf dies heute, weil das Datencenter-Feld Groß-und Kleinschreibung ist. Wenn Ihr dc ‚somedc01‘ ist dies nicht zur Arbeit zu gehen:

replication = 
    { 
     'class': 'NetworkTopologyStrategy', 
     'SOMEDC01': '3' # <-- BOOM! 
    } 
    AND durable_writes = true; 

Wie auch immer, es ist nicht so intuitiv, hoffe, das hilft.

+1

Das hat mir geholfen. Ich habe Einzelknotenkonfiguration und der Fehler war der gleiche wie in der Betreffzeile. – prot

0

in meinem Fall, ich habe eine Nachricht 0 verfügbar, aber Cassandra war hoch und Cqlsh funktionierte korrekt, das Problem war Zugriff von Java: Abfrage war für eine vollständige Tabelle, und einige Datensätze waren nicht zugänglich (alle Knoten, die sie enthalten). Wählen Sie in der Cqlsh-Tabelle * aus der Tabelle aus, nur die verfügbaren Datensätze. So ist die Lösung Knoten erholen nach unten, und vielleicht mit Replikationsfaktoren zu ändern:

ALTER KEYSPACE .... 
nodetool repair -all 

dann nodetool Status zu sehen, Änderungen und Clusterstruktur

Verwandte Themen