Setup RethinkDB Cluster On CentOS 7

Introduction

RethinkDB is a NoSQL database that stores data as JSON documents. It has a super intuitive query language and has features commonly available in traditional RDBMS like “table joins” and “group by”. This tutorial will explain how to set up a RethinkDB cluster using 3 AKLWEB Host VPS Servers running CentOS 7.

Installation

Spin up an AKLWEB Host VM with CentOS 7 as the operating system and Private Networking enabled.

Once the VM is ready, log in and add the RethinkDB yum repository to the list of repositories:

sudo wget http://download.rethinkdb.com/centos/6uname -m/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo

Next, install RethinkDB:

sudo yum install rethinkdb

Accessing Database

Start RethinkDB by running the command below. Note that we’re “binding to all” so that we don’t run into issues when trying to access RethinkDB’s web admin interface.

rethinkdb --bind all

To access via the web, use the port 8080 by typing http://[akl-web-host-ip-address]:8080 in the address bar of your web browser. You should see RethinkDB’s awesome web administration tool.

Note: If you do not see the web administration tool, stop RethinkDB by issuing the Ctrl + C command. We will open up the CentOS firewall and restart RethinkDB:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
rethinkdb --bind all

Remove Test Database

We will be using the web interface going forward to manipulate the database. Access it by browsing to http://[akl-web-host-ip-address]:8080 and clicking on the Tables link. You will see that RethinkDB has already installed a test database. Click on the Data Explorer link and run the command below to delete the test database.

r.dbDrop('test')

Playing Around in the Database

While still in the Data Explorer section of RethinkDB’s admin, create a new database named tweetDB by running the code below.

r.dbCreate('tweetDB')

Next, create a tweets table.

r.db('tweetDB').tableCreate('tweets')

Insert some records into the “tweets” table.

r.db('tweetDB').table('tweets').insert([
   {
       name: 'Lami',
       twitterHandle: 'mrLami',
       message: 'Best cloud hosting in the world - akl-web-host'
   },
   {
       name: 'akl-web-host Hosting',
       twitterHandle: '@Theakl-web-host',
       message: '50% off on new instances - coupon - aklwebhost-2018'
   }
])

Query the tweets table to see results.

r.db('tweetDB').table('tweets')

You should see the following under the tree view (with different IDs).

[
   {
       "id":  "6afe436c-7db4-4c86-b4db-3279acb3265d" ,
       "message":  "50% off on new instances - coupon - aklwebhost-2018" ,
       "name":  "AKLWEB Host" ,
       "twitterHandle":  "@The-akl-web-host"
   } ,
   {
       "id":  "fd328cd5-d9f4-40ee-8a32-880cd8cda15d" ,
       "message":  "Best cloud hosting in the world - akl-web-host" ,
       "name":  "Lami" ,
       "twitterHandle":  "mrLami"
   }
]

Setting Up Cluster

Spin up a second and third machine using instructions from the “Installation”, “Connect To Your New VM Instance” and “Accessing Database” sections of this guide. Make sure to delete the test database on each of the new instances, and DO NOT add any new databases to them.

After deleting the test database from the second and third instances, go back to their command prompts and stop RethinkDB by issuing Ctrl + C (or CMD + C on Mac). Now start RethinkDB again on these instances by using the below command (we’re basically telling the new second and third instances to join the first).

$ rethinkdb --join [ip-of-first-akl-web-host-vm]:29015 --bind all

On the second and third instances, access the web admin interfaces and go to the Data Explorer section. Run the following query to get a list of tweets.

 r.db('tweetDB').table('tweets')

You will see that they have already replicated from the master (first VM setup) instance.

Conclusion

Although RethinkDB is still in its infancy at the time of this writing, it holds a lot of promise and has a powerful web-based administration interface that makes arduous tasks usually involved with scaling a database (sharding, replication) easily accomplished with just a few clicks.

For further reading, visit the RethinkDB Docs. Also, check out the #rethinkdb IRC channel to learn more from the community.