Join us at ScyllaDB LIVE, instructor-led NoSQL training sessions | June 18
Register now


4 min to complete


ScyllaDB 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 ScyllaDB commands and features seem familiar to Apache Cassandra® users, it is for a good reason. ScyllaDB 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 ScyllaDB 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 ScyllaDB in Docker is only recommended to evaluate and try ScyllaDB. 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.

Before starting the cluster, make sure the aio-max-nr value is high enough (1048576 or more).
This parameter determines the maximum number of allowable Asynchronous non-blocking I/O (AIO) concurrent requests by the Linux Kernel, and it helps ScyllaDB perform in a heavy I/O workload environment.
Check the value:

cat /proc/sys/fs/aio-max-nr

If it needs to be changed:

echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

We’ll start by setting up a 3-node ScyllaDB Docker cluster. If you already have the cluster set up, you can skip this step. Set up a Docker Container with one node, called scylla-node1:

docker run --name scylla-node1 -d scylladb/scylla:5.2.0

Create two more nodes, scylla-node2 and scylla-node3, and add them to the cluster of scylla-node1. The command “$(docker inspect –format='{{ .NetworkSettings.IPAddress }}’ scylla-node1)” translates to the IP address of scylla-node1:

docker run --name scylla-node2 -d scylladb/scylla:5.2.0 --seeds="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' scylla-node1)" 
docker run --name scylla-node3 -d scylladb/scylla:5.2.0 --seeds="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' scylla-node1)" 

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