Sep 12, 2018


Blog Categories

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:15fcf6e1daf31447fd8762c4d925d268f7138623f3e448602
a33a3ba9efb9168
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></version></host-directory></host-directory>

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
================
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

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.

$ npm start
You can now view dashboard-base in the browser.
  Local:            http://localhost:3000/
  On Your Network:  http://10.0.1.158:3000/
Note that the development build is not optimized.
To create a production build, use npm run build.

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. Keep an eye on our git repo for docker.

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.