9 min to complete

In this lab, we’ll bring up a three-node cluster and demonstrate how the WRITE and READ look, in a cluster where our Replication Factor (RF) is set to 3. We’ll simulate a situation where some nodes are down and see how changing the Consistency Level affects the read and write operations and failure conditions in a Scylla cluster.
Before we proceed with the Scylla installation, please ensure that your environment meets the following prerequisites:
- Docker for Linux, Mac, or Windows. Please note that running in Scylla in Docker is only recommended to evaluate and try Scylla. For best performance, a regular OS install is recommended.
- 3GB of RAM or greater for Docker
- If you are using Linux, you will need docker-compose.
- Set up a Docker Container with one node, called Node_X:
docker run --name Node_X -d scylladb/scylla:4.1.0
- Create two more nodes, Node_Y and Node_Z, and add them to the cluster of Node_X. The command “$(docker inspect –format='{{ .NetworkSettings.IPAddress }}’ Node_X)” translates to the IP address of Node-X:
docker run --name Node_Y -d scylladb/scylla:4.1.0 --seeds="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' Node_X)"
docker run --name Node_Z -d scylladb/scylla:4.1.0 --seeds="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' Node_X)"
- Wait a minute or so and check the node status:
docker exec -it Node_Z nodetool status
- You’ll see that eventually, all the nodes have UN for status. U means up, and N means normal. Read more about Nodetool Status Here.
Once the nodes are up, and the cluster is set, we can use the CQL shell to create a table.
- Run a CQL shell:
docker exec -it Node_Z cqlsh
- Create a keyspace called “mykeyspace”, with a Replication Factor of three:
CREATE KEYSPACE mykeyspace WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'replication_factor' : 3};
- Next, create a table with three columns: user id, first name, and last name, and insert some data:
use mykeyspace;
CREATE TABLE users ( user_id int, fname text, lname text, PRIMARY KEY((user_id)));
- Insert into the newly created table two rows:
insert into users(user_id, fname, lname) values (1, 'rick', 'sanchez');
insert into users(user_id, fname, lname) values (4, 'rust', 'cohle');
- Read the table contents:
select * from users;
To summarize, we saw how to create a three-node cluster with RF=3, how to open a CQL Shell, create a table, insert data into it, and read the data. In the next topic, we will see what happens when nodes are down and how the Consistency Level impacts the read/write operations.