Setting up a new Fauna Cluster using Docker

Every Oracle DBA will have a RAC setup story to tell. It can range from the time it took, the patches they had to install midway, or not being able to connect to the database for no apparent reason. Having lived through these experiences over the years, the very idea of setting up a database cluster makes me think that it cannot be very straightforward. So when I embarked on setting up my first FaunaDB cluster on my second week on the job, I was a bit apprehensive and thought that it would take hours. Leave aside Oracle RAC — even Cassandra and Mongo gave me a hard time. But it turned out that setting up FaunaDB is really simple and can be done within a few minutes. My DBA friends, are you listening ?!!!

As with most new databases these days, I decided to setup a cluster on my laptop using docker. Docker provides a nice way to keep things very simple and clean. My first step was to pull the FaunaDB container image from docker hub.

$  docker pull fauna/faunadb:latest
latest: Pulling from fauna/faunadb
be8881be8156: Pull complete
60f08eedb1d2: Pull complete
d4f58360b842: Pull complete
6a391283a674: Pull complete
e5fae5985ac7: Pull complete
eb00faac30ba: Pull complete
90e011c54f88: Pull complete
6529b57b5cf9: Pull complete
71a47929723d: Pull complete
3e67826a23e5: Pull complete
c62cc3207452: Pull complete
Digest: sha256:15fcf6e1daf31447fd8762c4d925d268f7138623f3e448602a33a3ba9efb9168
Status: Downloaded newer image for fauna/faunadb:latest
$ docker image list|grep -i fauna
fauna/faunadb latest d2f23397fcce 9 days ago 327MB
Debadityas-MacBook-Pro:~ deba$

Now that the image is available, we can straightaway use it to start my first node of the cluster.

$docker run -d --rm --name faunadb -p 8443:8443 fauna/faunadb
47a75e91096149d9607d660eb81b29f87ed32659cc473dc70466976f2f590c4e

If you intend to write a lot of data and want it to persist it between container shutdowns, you will want to map a local disk as a volume inside the container. Further, if you want to access the logs from your host OS, you will want to map the log folder. You can do all of this using the command below.

docker run --rm --name faunadb -p 8443:8443 \
-v <host-directory or named-volume>:/var/lib/faunadb \
-v <host-directory>:/var/log/faunadb \
fauna/faunadb:<version>

Once the container is up and running, then you can check the status of this node. We will log into the container and check the status with the admin tool:

$  docker exec -it 47a /bin/bash
root@47a75e910961:/faunadb# cd /faunadb/enterprise/
root@47a75e910961:/faunadb/enterprise# bin/faunadb-admin --key secret status
No configuration file specified; loading defaults...
Datacenter: NoDc
================
Status State WorkerID Address Owns Goal HostID
up live 512 172.17.0.2 100.0% 100.0% 6bc66c3b-8a67-40a4-a06c-fdbe3bd281ad

Once the first node is up and running, open another terminal window and join two new nodes. Make sure to note the ip/address assigned to the first node.

# Add the 2nd Node
$ docker run -d --rm --name faunadb2 -p 8444:8443 fauna/faunadb --join 172.17.0.2
1e56362fdfede5f884abec8a5b9bc8050db013b483498a0fed107120f7458d71
# Add the 3rd Node
$ $ docker run -d --rm --name faunadb3 -p 8445:8443 fauna/faunadb --join 172.17.0.2
921594173d98af5042b1f77312d321543cd3484926f754c22397452f433d8dea
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
921594173d98 fauna/faunadb "faunadb-entrypoint.…" 4 minutes ago Up 4 minutes 7500-7501/tcp, 0.0.0.0:8445->8443/tcp faunadb3
1e56362fdfed fauna/faunadb "faunadb-entrypoint.…" 5 minutes ago Up 5 minutes 7500-7501/tcp, 0.0.0.0:8444->8443/tcp faunadb2
47a75e910961 fauna/faunadb "faunadb-entrypoint.…" 6 minutes ago Up 6 minutes 7500-7501/tcp, 0.0.0.0:8443->8443/tcp faunadb

After starting the two nodes, we can now check the status of the cluster.

root@47a75e910961:/faunadb/enterprise# bin/faunadb-admin --key secret status
No configuration file specified; loading defaults...
Datacenter: NoDc

So the cluster, a single replica with multiple nodes, is up and running. But keep in mind this has only been installed on my laptop to play with the database. Real FaunaDB clusters are installed across globally distributed data centers. If you want to get a feel for that architecture, here is a great post by John Miller.

Once the database is setup, we want to spin up the dashboard tool. For setting up the dashboard tool, you can refer to its Git repository here.

I have already cloned the repository and done the install. So all I had to do was to start the dashboard.

================
Status State WorkerID Address Owns Goal HostID
up live 512 172.17.0.2 40.2% 33.6% 6bc66c3b-8a67-40a4-a06c-fdbe3bd281ad
up live 513 172.17.0.3 42.6% 35.4% cb2f3ff4-dda7-47c5-ade4-fef9e96ff146
up live 514 172.17.0.4 17.2% 31.1% 44ecee55-b1a4-4eba-af40-0dda3e1daadc

The dashboard will open in a browser window and prompt for your secret that is specified part of the image.

Once the you click on the “Use Secret” button you can access the dashboard to create databases, classes etc.

As you can see, in matter of minutes we could setup a cluster, access the dashboard and start creating data in FaunaDB. If you want even faster access you can try the always ON FaunaDB Serverless Cloud. It is super simple to get started and you don’t have to worry about running or managing a database. We will also provide a docker compose file soon that will make your local setup even easier.

In the coming blog posts, I will talk about how to get started with FaunaDB using Python and also setup a multi-DC cluster with Docker.


Author: Deba Chatterjee
Date: September 4, 2018
Originally published at
blog.fauna.com.

Like what you read? Give Fauna Inc a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.