...
The configuration of the Gluster VMs can be done with the provided script https://github.com/astromsshin/cloud_ex/blob/main/tool_setup_glusterfs_multiple_servers.sh on the github repository https://github.com/astromsshin/cloud_ex. The script is given below:
Code Block | ||
---|---|---|
| ||
#!/bin/bash
# Run this script with root permission
# on the master node of the GlusterFS cluster
# Directory serving the Gluster filesystem
TARGETDIR="/glusterfs/vol"
# Gluster filesystem volume available for clients
TARGETVOL="gvol"
# Name of the Gluster cluster
CLUSTERNAME="glustercluster"
MINIONLASTIND="0"
# Install the server
echo "... install on ${CLUSTERNAME}-master"
apt install glusterfs-server -y
systemctl enable --now glusterd
for ind in $(seq 0 ${MINIONLASTIND})
do
echo "... install on ${CLUSTERNAME}-minion-${ind}"
ssh ${CLUSTERNAME}-minion-${ind} "apt install glusterfs-server -y; systemctl enable --now glusterd"
done
# Probing
for ind in $(seq 0 ${MINIONLASTIND})
do
echo "... probing ${CLUSTERNAME}-minion-${ind}"
gluster peer probe ${CLUSTERNAME}-minion-${ind}
done
# Prepare the directory
echo "... creating directory on ${CLUSTERNAME}-master"
mkdir -p ${TARGETDIR}
for ind in $(seq 0 ${MINIONLASTIND})
do
echo "... creating directory on ${CLUSTERNAME}-minion-${ind}"
ssh ${CLUSTERNAME}-minion-${ind} "mkdir -p ${TARGETDIR}"
done
# Information
gluster --version
gluster peer status
# Produce the Gluster filesystem volume with the above directory
VOLSTR="${CLUSTERNAME}-master:${TARGETDIR}"
for ind in $(seq 0 ${MINIONLASTIND})
do
VOLSTR="${VOLSTR} ${CLUSTERNAME}-minion-${ind}:${TARGETDIR}"
done
gluster volume create ${TARGETVOL} ${VOLSTR} force
# Make the volume available
gluster volume start ${TARGETVOL}
# Information
gluster volume info |
Step 3. Mounting the created Gluster filesystem on client VMs
The configuration of the Gluster firesystem affects how the client VMs mount and access the Gluster filesystem. The following script, which is available on the github repository https://github.com/astromsshin/cloud_ex as https://raw.githubusercontent.com/astromsshin/cloud_ex/main/tool_setup_glusterfs_client_all_nodes-multiple_servers.sh.
Code Block | ||
---|---|---|
| ||
#!/bin/bash
# Name of the cluster which defines the clients' names
CLUSTERNAME="ml-image"
# Last integer index of the minions in the cluster
MINIONLASTIND="8"
# Directory name which is a mount point on clients
TARGETDIR="/mnt/gluster"
# IP of the Gluster server
GLUSTERSERVERIP="10.0.100.120 10.0.100.191"
# Name of the Gluster server
GLUSTERSERVERNAME="test-basic-master test-basic-minion-0"
# Updating /etc/hosts
IPARRAY=($GLUSTERSERVERIP)
NAMEARRAY=($GLUSTERSERVERNAME)
# ... Master
for (( i=0; i<=${#IPARRAY[@]}; i++ ))
do
echo ${IPARRAY[$i]} ${NAMEARRAY[$i]} >> /etc/hosts
done
# ... Minion
for ind in $(seq 0 ${MINIONLASTIND})
do
for (( i=0; i<=${#IPARRAY[@]}; i++ ))
do
ssh ${CLUSTERNAME}-minion-${ind} "echo ${IPARRAY[$i]} ${NAMEARRAY[$i]} >> /etc/hosts"
done
done
# Rest of tasks
RUNCMD="apt -y install glusterfs-client; mkdir ${TARGETDIR}; mount -t glusterfs ${NAMEARRAY[0]}:/gvol ${TARGETDIR}; chmod -R 777 ${TARGETDIR}"
# ... Master
echo "... setuping on ${CLUSTERNAME}-master"
echo $RUNCMD | bash
# ... Minion
for ind in $(seq 0 ${MINIONLASTIND})
do
echo "... setuping on ${CLUSTERNAME}-minion-${ind}"
ssh ${CLUSTERNAME}-minion-${ind} "${RUNCMD}"
done |
Since there are multiple Gluster servers, you need to type their ip addresses and names in the above script. You can easily find the ip addresses and names in the cloud dashboard.