Set up Geo-replication

Ayush Ujjwal
Apr 27 · 4 min read
Geo-replication image

In the last blog, we went through the basics of Geo-replication and its different deployment services. In this blog, we will be going through the setup step-by-step. 🚶


You have at least 2 Virtual Machines (VMs). One of them will hold the main volume 💾 and the other one will hold the secondary volume 💾. We will be setting up geo-replication on these two volumes only.

Let’s start with the setup now 😄


  1. Create 2 volumes. If you want to know how to set up volumes refer to this article

This is with replica volume. With just 2 servers you can go for 2 distribute volumes with 1 server each. You can refer to the following doc.

2. Start 🚲 the 2 volumes. Here, I am considering the 2 volumes as geom(main volume) and geos(secondary volume)

# gluster vol start geom
# gluster vol start geos

The following 2 commands must give a success else the volumes won’t be started.

3. If your primary cluster:

  • has a minimum of 2 nodes then execute the following command and go to step 8 directly
# gluster vol set all cluster.enable-shared-storage enable
  • has one node in the cluster follow from step 4.

4. You need to create a shared storage volume on the primary or main server. (You can replace the hostname with the IP address)

# gluster vol create gluster_shared_storage replica 3 servera:/data/glusterfs/avol/brick1/b11 servera:/data/glusterfs/avol/brick1/b12 servera:/data/glusterfs/avol/brick1/b13 force

Why force? 😈

This is because it will give a warning 😷 as you are trying to create a replica volume using three bricks on the same server and hence fail. If you don’t want that to happen force is necessary to be added in the end.

5. Start 🚲 the shared volume that you created now

# gluster vol start gluster_shared_storage

6. Now you need to create a shared storage directory. 💾 This will be used as a mount point for the shared storage.

# mkdir -p /var/run/gluster/shared_storage

With the help of mkdir -p command you can create sub-directories of a directory. It will create parent directory first, if it doesn’t exist. But if it already exists, then it will not print an error message and will move further to create sub-directories.

7. Mount the shared volume 💾 on the directory just created.

# mount -t glusterfs servera:gluster_shared_storage /var/run/gluster/shared_storage

When you ‘mount’ something you are placing access to the file system contained within onto your root file system structure. Effectively giving the files a location.

To know more about mount refer to this.

8. Passwordless-ssh setup:

On any one of the primary servers generate the ssh-key 🔑

# ssh-keygen

Copy the ssh-key to any one of the secondary servers

# ssh-copy-id root@serverb    

You can replace the hostname with the IP address.

9. Create ssh keys

# gluster system:: execute gsec_create 

This command does the following:

  • It created 2 pairs of ssh keys (private and public), one for ‘tar over ssg’ and the other for ‘gsyncd shell’ on each node in the cluster.
  • It prefixes the ssh public keys with the command=“tar ${SSH_ORIGINAL_COMMAND#*}” and ‘command=“/usr/libexec/glusterfs/gsyncd”’ for ‘tar’ and gsyncd ssh public keys respectively.
  • It aggregates above prefixed ssh public keys from all the nodes of the cluster into single file located at “/var/lib/glusterd/geo-replication/”

10. Create the session and push the ssh keys to all the secondary cluster nodes.

# gluster vol geo-rep geom serverb::geos create push-pem

11. You need to enable the use of gluster_shared_storage for geo-rep. Although this step can be ignored if the main volume is not a replicated volume/ EC volume.

# gluster vol geo-rep geom serverb::geos config use_meta_volume true

Geo-rep uses the shared storage volume to decide which worker has to be ACTIVE. It creates common files per replica and workers acquire fcntl lock on it, whoever wins will become ACTIVE.

12. Check the status of geo-rep by executing the following command.

# gluster vol geo-rep geom serverb::geos status

You will get a table with the status of the geo-rep workers. It should show Created.

13. You need to start geo-rep and check the status again.

# gluster vol geo-rep geom serverb::geos start
# gluster vol geo-rep geom serverb::geos status

The status of all the geo-rep workers should go to Initializing and then to History Crawl on to Changelog Crawl.

And DONE 😃🎊


Also, Read

Geek Culture

Proud to geek out.

Sign up for Geek Culture Hits

By Geek Culture

Subscribe to receive top 10 most read stories of Geek Culture — delivered straight into your inbox, once a week. Take a look.

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store