Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Not enough replica available for query at consistency ONE (1 required but only 0 alive)

Tags:

cassandra

I have a Cassandra cluster with three nodes, two of which are up. They are all in the same DC. When my Java application goes to write to the cluster, I get an error in my application that seems to be caused by some problem with Cassandra:

Caused by: com.datastax.driver.core.exceptions.UnavailableException: Not enough replica available for query at consistency ONE (1 required but only 0 alive) at com.datastax.driver.core.exceptions.UnavailableException.copy(UnavailableException.java:79)

The part that doesn't make sense is that "1 required but only 0 alive" statement. There are two nodes up, which means that one should be "alive" for replication.

Or am I misunderstanding the error message?

Thanks.

like image 408
timsterc Avatar asked Jan 15 '15 23:01

timsterc


People also ask

How do I change my consistency level in Cassandra?

You can use a cqlsh command, CONSISTENCY , to set the consistency level for queries in the current cqlsh session. For programming client applications, set the consistency level using an appropriate driver. For example, call QueryBuilder. insertInto with a setConsistencyLevel argument using the Java driver.

How do you change the replication factor in Cassandra?

If you want to change the replication factor of a keyspace, you can do it by executing the ALTER KEYSPACE command, which has the following syntax: Syntax: ALTER KEYSPACE "KeySpace Name" WITH replication = {'class': 'Strategy name', 'replication_factor' : 'No. Of replicas'};

What is consistency in Cassandra?

The Cassandra consistency level is defined as the minimum number of Cassandra nodes that must acknowledge a read or write operation before the operation can be considered successful. Different consistency levels can be assigned to different Edge keyspaces.


2 Answers

You are likely getting this error because the Replication Factor of the keyspace the table you are querying belongs to has a Replication Factor of one, is that correct?

If the partition you are reading / updating does not have enough available replicas (nodes with that data) to meet the consistency level, you will get this error.

If you want to be able to handle more than 1 node being unavailable, what you could do is look into altering your keyspace to set a higher replication factor, preferably three in this case, and then running a nodetool repair on each node to get all of your data on all nodes. With this change, you would be able to survive the loss of 2 nodes to read at a consistency level of one.

This cassandra parameters calculator is a good reference for understanding the considerations of node count, replication factor, and consistency levels.

like image 141
Andy Tolbert Avatar answered Sep 28 '22 03:09

Andy Tolbert


I hit this today because the datacenter field is case sensitive. If your dc is 'somedc01' this isn't going to work:

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

Anyway, it's not that intuitive, hope this helps.

like image 38
r_2 Avatar answered Sep 28 '22 04:09

r_2