Cassandra DB: What ultimately controls "replication_factor"?

I want to check and test the "replication_factor" and ONE consistency level from Cassandra DB.

And I defined a cluster: "MyCluster01" with three nodes in two data centers: DC1 (node1, node2) in RAC1, DC2 (node3) in RAC2 .

The structure shown below:

[root@localhost ~]# nodetool status
Datacenter: DC1
===============
Status=Up/Down |/ State=Normal/Leaving/Joining/Moving

--  Address        Load       Tokens  Owns    Host ID                               Rack

UN  10.0.0.62  409.11 KB  256     ?       59bf9a73-45cc-4f9b-a14a-a27de7b19246  RAC1

UN  10.0.0.61  408.93 KB  256     ?       b0cdac31-ca73-452a-9cee-4ed9d9a20622  RAC1
Datacenter: DC2
===============
Status=Up/Down |/ State=Normal/Leaving/Joining/Moving

--  Address        Load       Tokens  Owns    Host ID                               Rack

UN  10.0.0.63  336.34 KB  256     ?       70537e0a-edff-4f48-b5db-44f623ec6066  RAC2

Then I created a key space and a table as shown below:

CREATE KEYSPACE my_check1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'};
create table replica_test(id uuid PRIMARY KEY);

    After I inserted one record into that table: 
insert into replica_test(id) values (uuid());
select * from replica_test;
 id
--------------------------------------
 5e6050f1-8075-4bc9-a072-5ef24d5391e5

I got this entry.

But when I stopped node1 and again requested in node 2 and node 3, none of the requests failed.

select * from replica_test;

Traceback (most recent call last):   File "/usr/bin/cqlsh", line 997,
in perform_simple_statement
    rows = self.session.execute(statement, trace=self.tracing_enabled)   File
"/usr/share/cassandra/lib/cassandra-driver-internal-only-2.1.3.post.zip/cassandra-driver-2.1.3.post/cassandra/cluster.py",
line 1337, in execute
    result = future.result(timeout)   File "/usr/share/cassandra/lib/cassandra-driver-internal-only-2.1.3.post.zip/cassandra-driver-2.1.3.post/cassandra/cluster.py",
line 2861, in result
    raise self._final_exception Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ONE"
info={'required_replicas': 1, 'alive_replicas': 0, 'consistency':
'ONE'}

While the "nodetool status" command returns:

UN  10.0.0.62  409.11 KB  256     ?       59bf9a73-45cc-4f9b-a14a-a27de7b19246  RAC1

DN  10.0.0.61  408.93 KB  256     ?       b0cdac31-ca73-452a-9cee-4ed9d9a20622  RAC1

UN  10.0.0.63  336.34 KB  256     ?       70537e0a-edff-4f48-b5db-44f623ec6066  RAC2

And when I tried to stop node 2, leaving node 1 and 3 alive; or stop node 3, keeping node 1 and 2 alive; An error has occurred.

, , ?

+4
2

"replication_factor"?

, (RF) , (DC). 3 RF 1. , , 1 node. , node.

, RF 3 3 node. 1 2 .

:

nodetool getendpoints my_check1 replica_test 5e6050f1-8075-4bc9-a072-5ef24d5391e5

, node 5e6050f1-8075-4bc9-a072-5ef24d5391e5. , node, , .

, . 2 DC, SimpleStrategy. SimpleStrategy . NetworkTopologyStrategy - , SimpleSnitch. Cassandra node .

, NetworkTopologyStrategy. ( cassandra.yaml) , .

+4

NetworkTopologyStrategy .

+1

All Articles