Over a million developers have joined DZone.

Couchbase XDCR Using Docker Swarm, Machine, and Compose

This article shows how you can simplify your complex deployments using Docker Swarm, Docker Machine, and Docker Compose.

· Database Zone

Learn NoSQL for free with hands-on sample code, example queries, tutorials, and more.  Brought to you in partnership with Couchbase.

Cross Datacenter Replication (XDCR) in Couchbase provides an easy way to replicate data from one cluster to another. The clusters are typically set in geographically diverse data centers. This enables disaster recovery or to bring data closer to users for faster data access.

This blog will show how to:

  • Setup two data centers using Docker Swarm
  • Run Couchbase containers on each node of Docker Swarm
  • Setup a Couchbase cluster on each Docker Swarm cluster
  • Configure one-way XDCR between two Couchbase clusters

For the purpose of this blog, the two data centers will be set up on a local machine using Docker Machine.

swarm-xdcr-couchbase-overview


The complete code used in this blog is available at github.com/arun-gupta/couchbase-xdcr-docker.

Create Consul Discovery Service

Each node in Docker Swarm needs to be registered with a discovery service. This blog will use Consul for that purpose. And even Consul will be running on a Docker Machine.

Typically, you’ll run Consul in a cluster but for simplicity, a single instance is started in our case.

Create a Docker Machine and start Consul using this script:

Create Docker Swarm Cluster

Docker Swarm allows multiple Docker hosts to be viewed as a single unit. This allows your multi-container applications to easily run on multiple hosts. Docker Swarm serves the same Remote API as served by a single host. This allows your existing tools to target a single host or a cluster of hosts.

Both the Docker Swarm clusters will be registered with a single discovery service. This is achieved by using the following value for --swarm-discovery:

Create a Docker Swarm cluster using Docker Machine using this script:

The script needs to be invoked as:

This will create two Docker Swarm clusters with one “master” and two “worker” as shown below:

Consul is running on Docker Machine with IP address 192.168.99.101, so the Consul UI is accessible at http://192.168.99.101:8500:


swarm-xdcr-couchbase


It shows two Docker Swarm clusters that have been registered.

The exact list of nodes for each cluster can also be seen. Nodes in clusterA are shown:

swarm-xdcr-consul-clusterA

Nodes in clusterB are shown:

swarm-xdcr-consul-clusterB


Run Couchbase containers

Run Couchbase container on each node of Docker Swarm cluster using this Compose file.

Configure Docker CLI for the first cluster and run 3 containers:

Check the running containers:

Configure Docker CLI for the second cluster and run 3 containers:

Check the running containers:

Create/Rebalance Couchbase cluster

Scaling and Rebalancing Couchbase Cluster using CLI explains how to create a cluster of Couchbase nodes and rebalance an existing cluster using Couchbase CLI.

Create Couchbase cluster on each Swarm cluster using this script.

The script needs to be invoked as:

And now rebalance this cluster using this script:

This script is invoked as:

Couchbase Web Console for any node in the cluster will show the output:

swarm-xdcr-couchbase-clusterA


Invoke this script to create the second Couchbase cluster as:

Rebalance this cluster as:

Couchbase Web Console for any node in the second cluster will show the output:

swarm-xdcr-couchbase-clusterB


Setup XDCR

Cross datacenter replication can be setup to be uni-directional, bi-directional or multi-directional. Uni-directional allows data to replicated from source cluster to destination cluster, bi-directional allows replication both ways, multi-directional allows configuration in any direction.

We’ll create a simple uni-directional replication using this script:

This script is invoked as:

./setup-xdcr.sh A B


A bi-directional replication can be easily created by executing the commands again but reversing the source and destination cluster.

Couchbase Web Console for the source cluster will show:

swarm-xdcr-couchbase-clusterA-xdcr

Couchbase Web Console for the destination cluster will show:

swarm-xdcr-couchbase-clusterB-xdcr


Enjoy!

The Getting Started with NoSQL Guide will get you hands-on with NoSQL in minutes with no coding needed. Brought to you in partnership with Couchbase.

Topics:
couchbase ,docker swarm ,docker machine ,docker compose ,docker

Published at DZone with permission of Arun Gupta, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}