4 min to complete


Scylla is a NoSQL peer to peer distributed database, designed to handle big-data without having a single point of failure. Even if a hardware or network failure occurs, the system provides high Availability.

The database is designed around several core principles:

  • High Scalability – the system must scale both horizontally (adding more nodes) as well as vertically (make optimal use of modern multi-core, multi-CPU node architectures, and high-capacity storage devices).
  • High Availability – the system should have low latency and remain highly accessible for operations even if one or more nodes are in a failure state, or if there is a network failure.
  • High performance – the system should run as close to the hardware as possible to deliver low and consistent latency as well as very high throughput.
  • Low Maintenance – the system should include ease-of-use features, such as autonomous capabilities and automated facilities, for example, the ability to intelligently configure itself and tune its performance.

If most Scylla commands and features seem familiar to Apache Cassandra® users, it is for a good reason. Scylla was designed to be fully API-level compliant with Cassandra.

Hands-on: set up a three-node cluster

Throughout this lesson, we’ll use Docker to set up two clusters and demonstrate the different topics. Initially, we’ll set up a three-node Scylla cluster, and later we’ll set up a multi-dc cluster. As a reminder, please ensure that your environment meets the following prerequisites:

  1. 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.
  2. 3GB of RAM or greater for Docker
  3. If you are using Linux, you will need docker-compose.

We’ll start by setting up a 3-node Scylla Docker cluster. If you already have the cluster set up, you can skip this step. 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)" 

That’s it. The cluster is set up. So what’s a Node?