How to set up Cassandra test cluster using Docker

In this post I’ll walk you through set up of the test Apache Cassandra cluster in a Docker environment. This is useful if you want to experiment with this NoSql database or need it as part of your development environment.

First of all, you need to have Docker installed on your system.

If you use it from Mac OS X, like me, then please make sure your VirtualBox VM instance has enough memory for running Cassandra cluster.

  1. Open “VirtualBox” app
  2. Find the VM, in my case it was “default”
  3. Open “Settings”, then “System”
  4. Make sure it has at least 8GB available

Now we are ready to begin the fun part.

Single instance

Let’s run single Cassandra instance and then check that it is up using `docker ps` command:

$ docker run --name cassandra1 -m 2g -d cassandra:3.0.4 
c8d489f00f1778535c7806c92ca17707e9876a872f28b97cd4a05eb265b7af38

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c8d489f00f17 cassandra:3.0.4 "/docker-entrypoint.s" 10 seconds ago Up 10 seconds 7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp cassandra1

Note that there is `-m 2g` option for docker run command, it gives 2GB RAM to this container. If you are curious run `docker logs cassandra1` to see log message produced during Cassandra start up.

Connection to Cassandra instance with `cqlsh` is not difficult. Just need find out current container IP address.

$ docker inspect --format='{{ .NetworkSettings.IPAddress }}' cassandra1
172.17.0.2

$ docker run -it --link cassandra1 --rm cassandra:3.0.4 \
sh -c 'exec cqlsh 172.17.0.2'
Connected to Test Cluster at 172.17.0.2:9042.
[cqlsh 5.0.1 | Cassandra 3.0.4 | CQL spec 3.4.0 | Native protocol v4]
Use HELP for help.
cqlsh>

Cluster

To form the cluster we need to run second Cassandra container `cassandra2` and connect it to `cassandra1`.

$ docker run — name cassandra2 -m 2g -d \
-e CASSANDRA_SEEDS=”$(docker inspect — format=’{{ .NetworkSettings.IPAddress }}’ cassandra1)” \
cassandra:3.0.4

Ok, now we have a cluster with two instances. Let’s verify that using `nodetool status` command which need to be executed inside the container.

$ docker exec -i -t cassandra1 sh -c '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 101.84 KB 256 100.0% fb3d0aef-d70e-4637-8bdf-7e861acfcea6 rack1
UN 172.17.0.2 107.36 KB 256 100.0% ccd1000e-1b9a-422a-a2b4-d291da9c0585 rack1

More instances can be added to this cluster using the same approach. Before running other instances make sure that “nodetool” returns “Status=Up” for all existing cluster nodes.

I hope it was easy!


Originally published at yurisubach.com on March 24, 2016.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.