DIY Local Cassandra cluster

It’s easy to run a local cassandra cluster with docker, provided that you have enough memory on your system.

The standard docker container will consume 4G of memory, but you can easily reduce that down to 1G with the following Dockerfile.

FROM cassandra

RUN sed -i'' 's/#-Xms4G/-Xms1G/' /etc/cassandra/jvm.options
RUN sed -i'' 's/#-Xmx4G/-Xmx1G/' /etc/cassandra/jvm.options

Build the container and tag it as small-cassandra:latest.

$ sudo docker build . -t 'small-cassandra:latest'

Then start the first node of your cluster.

$ sudo docker run --name cassandra1 -d small-cassandra

And add nodes at will. Make sure to change the name each time.

$ sudo docker run --name cassandra2 -d --link cassandra1:cassandra small-cassandra

Allow ample time for the cluster to settle. You can get the cluster status with nodetool status

$ sudo docker exec -it cassandra1 bash
[email protected]:/# nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  172.17.0.3  92.5 KiB   256          100.0%            0e0d319f-4767-4a81-9632-45b8cc0ed441  rack1
UN  172.17.0.2  108.63 KiB  256          100.0%            ebc07dc6-9c35-4ab6-9799-4be9e8358aff  rack1