Skip to content
Igor Duarte edited this page Apr 2, 2026 · 1 revision

Deploy a new ScyllaDB cluster from scratch.

Prerequisites

  • ScyllaDB cluster nodes accessible via SSH
  • Ansible 6.7.0+

Cluster Metadata Directory

Create a directory for your cluster. This directory will hold your inventory, group_vars, and other cluster-specific configuration. You will run all playbooks from this directory.

mkdir -p ~/my-cluster/group_vars

Inventory

Approach 1: Simple inventory

For small or development clusters, define all Scylla nodes directly in [scylla]:

[scylla]
node1 ansible_host=10.0.0.1 dc=dc1 rack=a
node2 ansible_host=10.0.0.2 dc=dc1 rack=b
node3 ansible_host=10.0.0.3 dc=dc2 rack=c

[scylla-manager]
manager1 ansible_host=10.0.0.10

[scylla-monitor]
monitor1 ansible_host=10.0.0.11

Define variables in group_vars/:

  • group_vars/scylla.yml - Scylla node variables
  • group_vars/scylla-manager.yml - Manager variables
  • group_vars/scylla-monitor.yml - Monitoring variables

Approach 2: Organized inventory with child groups

For production clusters, organize nodes by DC using child groups. This allows per-DC configuration:

[scylla:children]
scylla-dc1
scylla-dc2

[scylla-dc1]
node1 ansible_host=10.0.0.1 rack=a
node2 ansible_host=10.0.0.2 rack=b
node3 ansible_host=10.0.0.3 rack=c

[scylla-dc2]
node4 ansible_host=10.0.0.4 rack=a
node5 ansible_host=10.0.0.5 rack=b
node6 ansible_host=10.0.0.6 rack=c

[scylla-manager]
manager-node ansible_host=10.0.0.10

[scylla-monitor]
monitor-node ansible_host=10.0.0.11

group_vars/scylla.yml (global variables):

scylla_version: latest
scylla_edition: enterprise
scylla_cluster_name: mycluster
scylla_snitch: GossipingPropertyFileSnitch
scylla_seeds:
  - '{{ hostvars[groups.scylla.0].ansible_host }}'
scylla_io_probe: true

group_vars/scylla-dc1.yml (DC1 configuration):

dc: dc1
detect_nvmes: true

group_vars/scylla-dc2.yml (DC2 configuration):

dc: dc2
scylla_raid_setup:
  - /dev/nvme1n1
  - /dev/nvme1n2
  - /dev/nvme1n3

group_vars/scylla-manager.yml (Manager variables):

scylla_clusters:
  - cluster_name: "mycluster"
    host: "{{ hostvars[groups.scylla.0].ansible_host }}"
    auth_token_file: "{{ inventory_dir }}/scyllamgr_auth_token.txt"

group_vars/scylla-monitor.yml (Monitoring variables):

scylla_cluster_name: mycluster
alerts_sender_email: example-email@scylladb.com
alerts_sender_password: Sender_p@ssw0rd
alerts_receiver_email: example-email@scylladb.com

Deploy Scylla Nodes

From inside your cluster metadata directory:

ANSIBLE_ROLES_PATH=$PATH_TO_YOUR_CLONED_REPO ansible-playbook -i inventory.ini $PATH_TO_YOUR_CLONED_REPO/example-playbooks/scylla_deploy/nodes.yml

See ansible-scylla-node for details.

Deploy Scylla Manager

From inside your cluster metadata directory:

ANSIBLE_ROLES_PATH=$PATH_TO_YOUR_CLONED_REPO ansible-playbook -i inventory.ini $PATH_TO_YOUR_CLONED_REPO/example-playbooks/scylla_deploy/manager.yml

See ansible-scylla-manager for details.

Deploy Scylla Monitoring

Deploy monitoring stack. From inside your cluster metadata directory:

ANSIBLE_ROLES_PATH=$PATH_TO_YOUR_CLONED_REPO ansible-playbook -i inventory.ini $PATH_TO_YOUR_CLONED_REPO/example-playbooks/scylla_deploy/monitoring.yml

See ansible-scylla-monitoring for details.

Saving Your Configuration

Save your variables and inventory inside your cluster metadata directory. These are part of your cluster state and will be needed for future operations like adding nodes, replacing nodes, and upgrades.

Clone this wiki locally