/multinode-glusterfs-vagrant

This guide walks users through setting up a 3-node GlusterFS cluster, creating and starting a volume, and mounting it on a client.

Apache License 2.0Apache-2.0

Multinode GlusterFS on Vagrant

This guide walks users through setting up a 3-node GlusterFS cluster, creating and starting a volume, and mounting it on a client.

It's fun to learn GlusterFS, kids!

Install prerequisites

Install Vagrant and a provider such as VirtualBox.

We'll also need the vagrant-cachier plugin so we don't pull all of these packages unnecessarily on four hosts.

$ vagrant plugin install vagrant-cachier

Start the VMs

This instructs Vagrant to start the VMs and install GlusterFS on them.

$ vagrant up

Probe for peers

Before we can create a volume spanning multiple machines, we need to tell Gluster to recognize the other hosts.

$ vagrant ssh gluster-server-1 -c 'sudo gluster peer probe 172.21.12.12 ; sudo gluster peer probe 172.21.12.13'

Create a volume

Now we can create and start our volume spanning multiple hosts.

$ vagrant ssh gluster-server-1 -c 'sudo gluster volume create glustertest replica 3 transport tcp 172.21.12.11:/brick 172.21.12.12:/brick 172.21.12.13:/brick force'
$ vagrant ssh gluster-server-1 -c 'sudo gluster volume start glustertest'

Here, we create a replicated volume across three hosts. The number of bricks must match the number of replicas.

Mount the volume

On our client, we can mount this volume and play around with it.

$ vagrant ssh gluster-client -c 'sudo mkdir /mnt/glusterfs && sudo mount -t glusterfs 172.21.12.11:/glustertest /mnt/glusterfs'

Note here that we just need to specify one host to mount - this is because the gluster client will connect and get metadata about the volume, and may never even talk to this host again! Neat!

Play around

We can use this like a local filesystem:

$ vagrant ssh gluster-client -c 'echo hello | sudo tee /mnt/glusterfs/f.txt'

Or, we can write big chunks of data to see how it performs:

$ vagrant ssh gluster-client -c 'sudo dd if=/dev/urandom of=/mnt/glusterfs/junk bs=64M count=16'

Test the cluster

What happens when we take down a machine?

$ vagrant halt gluster-server-1
vagrant ssh gluster-client -c 'ls /mnt/glusterfs/'
f.txt  junk  lolol.txt

Everything still works!

What happens if we take down a second machine?

$ vagrant halt gluster-server-2
vagrant ssh gluster-client -c 'ls /mnt/glusterfs/'
f.txt  junk  lolol.txt

Everything still works!

Inspecting cluster state

As you mess with things, two commands are helpful to determine what is happening:

vagrant@gluster-server-x:/$ sudo gluster peer status
vagrant@gluster-server-x:/$ sudo gluster volume info

You can also tail the gluster logs:

vagrant@gluster-server-x:/$ sudo tail -f /var/log/glusterfs/etc-glusterfs-glusterd.vol.log

As you bring down the other hosts, you'll see the healthy host report them as down in the logs:

[2014-08-14 23:00:10.415446] W [socket.c:522:__socket_rwv] 0-management: readv on 172.21.12.12:24007 failed (No data available)
[2014-08-14 23:00:12.686355] E [socket.c:2161:socket_connect_finish] 0-management: connection to 172.21.12.12:24007 failed (Connection refused)
[2014-08-14 23:01:02.611395] W [socket.c:522:__socket_rwv] 0-management: readv on 172.21.12.13:24007 failed (No data available)
[2014-08-14 23:01:03.726702] E [socket.c:2161:socket_connect_finish] 0-management: connection to 172.21.12.13:24007 failed (Connection refused)

Similarly, you'll see the host come back up:

[2014-08-14 23:02:34.288696] I [glusterd-handshake.c:563:__glusterd_mgmt_hndsk_versions_ack] 0-management: using the op-version 30501
[2014-08-14 23:02:34.293048] I [glusterd-handler.c:2050:__glusterd_handle_incoming_friend_req] 0-glusterd: Received probe from uuid: 1dc04e5c-958f-4eea-baab-7afb33aaee69
[2014-08-14 23:02:34.293415] I [glusterd-handler.c:3085:glusterd_xfer_friend_add_resp] 0-glusterd: Responded to 172.21.12.12 (0), ret: 0
[2014-08-14 23:02:34.294823] I [glusterd-sm.c:495:glusterd_ac_send_friend_update] 0-: Added uuid: 1dc04e5c-958f-4eea-baab-7afb33aaee69, host: 172.21.12.12
[2014-08-14 23:02:34.295016] I [glusterd-sm.c:495:glusterd_ac_send_friend_update] 0-: Added uuid: 929cfe49-337b-4b41-a1e6-bc1636d5c757, host: 172.21.12.13
[2014-08-14 23:02:34.296738] I [glusterd-handler.c:2212:__glusterd_handle_friend_update] 0-glusterd: Received friend update from uuid: 1dc04e5c-958f-4eea-baab-7afb33aaee69
[2014-08-14 23:02:34.296904] I [glusterd-handler.c:2257:__glusterd_handle_friend_update] 0-: Received uuid: 9c9f8f9b-2c12-45dc-b95d-6b806236c0bd, hostname:172.21.12.11
[2014-08-14 23:02:34.297068] I [glusterd-handler.c:2266:__glusterd_handle_friend_update] 0-: Received my uuid as Friend
[2014-08-14 23:02:34.297270] I [glusterd-handler.c:2257:__glusterd_handle_friend_update] 0-: Received uuid: 929cfe49-337b-4b41-a1e6-bc1636d5c757, hostname:172.21.12.13
[2014-08-14 23:02:34.297469] I [glusterd-rpc-ops.c:356:__glusterd_friend_add_cbk] 0-glusterd: Received ACC from uuid: 1dc04e5c-958f-4eea-baab-7afb33aaee69, host: 172.21.12.12, port: 0
[2014-08-14 23:02:34.313528] I [glusterd-rpc-ops.c:553:__glusterd_friend_update_cbk] 0-management: Received ACC from uuid: 1dc04e5c-958f-4eea-baab-7afb33aaee69

Cleanup

When you're all done, tell Vagrant to destroy the VMs.

$ vagrant destroy -f