Deployment guide

GlusterFS

Overview

GlusterFS is a mature, open-source, POSIX-compliant distributed file system. It aggregates storage from a set of servers into a single namespace and presents it as an ordinary directory tree. Applications read and write files exactly as they would on a local disk, while the data underneath is distributed across bricks and, once you add peers, replicated.

This SecureAnyCloud image installs the stock upstream GlusterFS 11 server from the Ubuntu 24.04 archive. It configures a single-node distribute volume named gv0 with one brick on a dedicated Azure data disk, and mounts that volume with the native GlusterFS FUSE client at /srv/glusterfs. The volume is ready to use as soon as first boot completes.

What you get:

  • GlusterFS 11 (glusterd, the native FUSE client and the gluster CLI), managed by systemd
  • A single-node distribute volume gv0, started, with one brick at /data/brick1/gv0
  • Persistent brick storage on a dedicated 40 GiB Azure data disk, formatted xfs and mounted at /data
  • The volume already mounted with the native client at /srv/glusterfs
  • An nftables host firewall that drops the entire GlusterFS protocol on every non-loopback interface
  • 24/7 SecureAnyCloud support

GlusterFS has no native login, so the appliance keeps the whole storage protocol off the network. glusterd (ports 24007-24008) and the brick (ports 49152-49200) are firewalled to the local machine and reached only through the local mount.

This is a single-node starter volume. One node holds one copy of every file, so it suits evaluation and getting started, not redundancy. The final step of this guide shows how to grow it into a replicated multi-node cluster.

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.

Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting size.

Configure the NSG to allow inbound 22/tcp from your management network. No inbound application ports are needed. The GlusterFS protocol is deliberately not exposed, and you use the volume through the local mount on the VM.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for GlusterFS by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) only.

Select Review + create, then Create. The image provisions the dedicated data disk that holds the brick automatically.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:glusterfs-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name glusterfs \
  --image sac1647283583153:glusterfs-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_ed25519.pub \
  --vnet-name <your-vnet> --subnet <your-subnet> \
  --public-ip-sku Standard

Step 3 - Connect to your VM

Connect to the VM over SSH, using its public IP address:

ssh azureuser@<vm-public-ip>

Step 4 - Confirm GlusterFS is installed and running

Run the commands below. They check the server version, confirm that the daemon, the mount unit and the host firewall are active, and show that the volume is mounted with the native client.

glusterd --version | head -1 systemctl is-active glusterd glusterfs-mount nftables findmnt -no SOURCE,FSTYPE,TARGET /srv/glusterfs

The output shows GlusterFS 11, three active services, and the native FUSE mount at /srv/glusterfs:

glusterfs 11.1 active active active gfs-node:/gv0 fuse.glusterfs /srv/glusterfs

Step 5 - Inspect the volume

The gluster CLI is the GlusterFS admin tool. Print the volume definition and its runtime status. You should see one distribute volume, Started, with its single brick Online:

sudo gluster volume info gv0
sudo gluster volume status gv0
Volume Name: gv0 Type: Distribute Volume ID: fc57bed4-48c7-48e4-9283-b8d0a0a16746 Status: Started Number of Bricks: 1 Transport-type: tcp Bricks: Brick1: gfs-node:/data/brick1/gv0 Status of volume: gv0 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gfs-node:/data/brick1/gv0 49153 0 Y ...

Status: Started and Online: Y confirm that the volume is live and serving. The brick lives on the dedicated data disk mounted at /data, not on the OS disk.

Step 6 - Read and write through the mount

The volume is mounted at /srv/glusterfs. Write a file through the mount, read it back, and check that it lands on the brick:

echo "hello from sac" | sudo tee /srv/glusterfs/hello.txt
sudo cat /srv/glusterfs/hello.txt
sudo sha256sum /srv/glusterfs/hello.txt
sudo find /data/brick1/gv0 -maxdepth 1 -name hello.txt -printf '%M %u %g %s %p\n'
sudo rm -f /srv/glusterfs/hello.txt
hello from sac hello from sac b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 /srv/glusterfs/hello.txt -rw-r--r-- root root 20 /data/brick1/gv0/hello.txt

The file you wrote through /srv/glusterfs appears on the brick at /data/brick1/gv0. The mount and the brick are two views of the same data. Point your applications at /srv/glusterfs and use it like any other directory.

Step 7 - Verify the firewall

GlusterFS has no native username or password. Its access control is IP-based plus the host firewall.

This image ships an nftables table that drops every GlusterFS port on every interface except loopback. Nothing that speaks the GlusterFS protocol is reachable from outside the VM, whatever your NSG allows. Inspect the table:

sudo nft list table inet sac_glusterfs ss -H -lnt 'sport = :24007'
table inet sac_glusterfs { chain input { type filter hook input priority filter; policy accept; iif "lo" accept tcp dport { 24007-24008, 38465-38467, 49152-49200 } drop } } LISTEN 0 1024 0.0.0.0:24007 0.0.0.0:*

glusterd listens on the machine, but the nftables drop rule makes ports 24007-24008 and the brick ports 49152-49200 unreachable from any non-loopback interface. The local FUSE mount still works because locally destined traffic goes through the loopback path.

Access the storage through the mount at /srv/glusterfs, or export it over your own protected protocol, for example NFS or SMB, secured and firewalled to suit your environment.

Step 8 - Read the per-VM connection info

First boot writes a root-only note that describes this VM's volume, brick and mount. The file holds no login credential. It is a convenience reference, not a secret:

sudo cat /root/glusterfs-info.txt

Step 9 - Grow into a replicated multi-node cluster

A single node holds one copy of every file, so this VM on its own has no fault tolerance. For redundancy, deploy one or more additional GlusterFS nodes, peer them, and convert the volume to a replicated type. In outline, with a second node deployed the same way:

# On this (first)
node, allow the peer's address to the GlusterFS ports, then peer it: sudo nft insert rule inet sac_glusterfs input ip saddr <peer-private-ip> tcp dport 24007 accept sudo nft insert rule inet sac_glusterfs input ip saddr <peer-private-ip> tcp dport 49152-49200 accept sudo gluster peer probe <peer-private-ip> # Add a brick on the peer and raise the replica count to 2: sudo gluster volume add-brick gv0 replica 2 <peer-private-ip>:/data/brick1/gv0 sudo gluster volume info gv0

Open the same GlusterFS ports between the nodes in your Azure NSG as well, and keep them closed to the public internet. With replica 2, every file is written to both nodes, so the volume survives the loss of either one.

See the GlusterFS documentation for replicated and dispersed volume types and for tuning.

Support

SecureAnyCloud maintains this image and provides 24/7 support with a 24-hour response SLA.

GlusterFS is open source and dual-licensed under the GNU General Public License version 2 and the GNU Lesser General Public License version 3. There is no per-node or per-capacity fee. The SecureAnyCloud charge covers packaging, security patching, image maintenance and support.

Deploy on Azure

Launch GlusterFS on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure