Mount a cluster file system
This example mounts the GFS2 (Global File System 2) cluster file system. Learn more about configuring cluster resources and cluster failure behavior in the High Availability Add-On Overview section of the Red Hat Enterprise documentation.
GFS2 (Global File System 2) is a shared-disk cluster file system. It allows multiple nodes to work simultaneously with a single file system, ensuring consistency and high performance. Learn more about GFS2 in the Global File System 2 section of the Red Hat Enterprise documentation.
The example uses the following for GFS2 to work:
corosyncis an inter-node communication service that provides messaging between cluster nodes, monitors their availability, and determines quorum — the minimum required number of active nodes for safe cluster operation;pacemakeris a cluster resource manager that manages starting, stopping, and moving resources between cluster nodes if one of them fails;dlmis a distributed lock manager that coordinates access to shared resources in a cluster.
To mount a cluster file system:
1. Connect a network volume to each server
Follow the instructions in Connect a network drive to a dedicated server running Linux.
2. Configure each cluster node
To ensure your nodes work together in a cluster, configure each node.
-
Connect to the server via SSH or the KVM console.
-
View the configuration file name of the
netplanutility:ls /etc/netplan/The response will show the configuration file name. For example:
50-cloud-init.yamlCopy the configuration file name.
-
Open the configuration file of the
netplanutility using thevitext editor:vi /etc/netplan/<file_name>Specify
<file_name>— the configuration file name that you copied in step 2. -
Add IP addresses from the private range to the network interface used by the
corosyncservice. The servers must have access to each other via these addresses. The iSCSI addresses used to connect network drives andcorocyncmust not overlap.<eth_name>:addresses:- <ip_address>Specify:
<eth_name>— the private network interface name for the primary messaging channel between cluster nodes;<ip_address>— the private IP address of the current node in the primary cluster network.
-
Press ESC.
-
Exit the
vitext editor saving changes::wq -
Apply the configuration:
netplan apply -
Make sure that the network interfaces are configured correctly:
ip a -
Install the components for configuring the cluster environment:
apt install corosync pacemaker gfs2-utils pcs resource-agents ldmtool dlm-controld -
Reboot the server.
-
Open the
/etc/hostsconfiguration file in thevitext editor:vi /etc/hosts -
Add IP addresses and node names to
/etc/hosts:<ip_address_1> <node_name_1><ip_address_2> <node_name_2>Specify:
<ip_address_1>— the primary IP address of the first node in the private network;<node_name_1>— the name of the first node in the private network, for example,node-1;<ip_address_2>— the primary IP address of the second node in the private network;<node_name_2>— the name of the second node in the private network, for example,node-2.
-
Press ESC.
-
Exit the
vitext editor saving changes::wq
2. Mount the cluster file system
Configure the cluster on one of the cluster nodes and mount the cluster file system on the network drive.
-
Connect to the server via SSH or via the KVM console.
-
Make sure that the network interfaces are configured correctly:
ip a -
Install the components for configuring the cluster environment:
apt install corosync pacemaker gfs2-utils pcs resource-agents ldmtool dlm-controld -
Reboot the server.
-
Create a security key for
corosync:corosync-keygenThe key file will be saved in the
/etc/corosync/authkeydirectory. -
Distribute the key to the cluster nodes using the
scputility by running the command for each node:scp /etc/corosync/authkey root@<node_name>:/etc/corosync/authkeySpecify
<node_name>— the private network node name that you specified when configuring the cluster node in step 10. -
Create a cluster:
pcs cluster setup <cluster_name> <node_name_1> <node_name_2>Specify:
<cluster_name>— cluster name;<node_name_1>— the private network name of the current node that you specified when configuring the cluster node in step 12;<node_name_2>— the private network name of the second node that you specified when configuring the cluster node in step 12.
-
Start the
corosyncandpacemakerservices for all cluster nodes:pcs cluster start --all -
Make sure that the cluster has entered the
onlinestatus:pcs status -
Make sure that the cluster parameters are correctly configured in the
/etc/corosync/corosync.confconfiguration file:cat /etc/corosync/corosync.confThe response will show the contents of the configuration file. For example:
totem {version: 2cluster_name: cluster_nametransport: knetcrypto_cipher: aes256crypto_hash: sha256}nodelist {node {ring0_addr: node-1name: node-1nodeid: 1}node {ring0_addr: node-2name: node-2nodeid: 2}}quorum {provider: corosync_votequorumtwo_node: 1}logging {to_logfile: yeslogfile: /var/log/corosync/corosync.logto_syslog: yestimestamp: on}Where:
cluster_name— the cluster name that you specified in step 7;node-1— the name of the current node in the cluster network;node-2— the name of the second node in the cluster network.
-
Display information about network drives:
multipath -llThe command output will display device information. For example:
mpatha (3600140530fab7e779fa41038a0a08f8e) dm-0 LIO-ORG,TCMU devicesize=20G features='0' hwhandler='1 alua' wp=rw|-+- policy='service-time 0' prio=10 status=active| `- 8:0:0:0 sdc 8:32 active ready running`-+- policy='service-time 0' prio=10 status=enabled`- 9:0:0:0 sdd 8:48 active ready runningWhere
mpathais the network drive name. -
Format the network drive to the GFS2 file system:
mkfs.gfs2 -p lock_dlm -t <cluster_name>:<cluster_volume_name> -j <number_of_cluster_nodes> /dev/mapper/<block_storage_name>Specify:
<cluster_name>:<cluster_volume_name>— the GFS2 file system identifier within the cluster, which consists of two values and must be no more than 16 characters in total, where:<cluster_name>— the cluster name that you specified in step 7;<cluster_volume_name>— file system name;
<number_of_cluster_nodes>— number of GFS2 file system journals, one journal for each cluster node;<block_storage_name>— the network drive name that you obtained in step 11.
-
Start
dlm— distributed lock manager:pcs resource start dlm -
Configure the cluster policy for quorum loss:
pcs property set no-quorum-policy=freeze -
Create a mount point:
mkdir -p /mnt/<mount_point_name>Specify
<mount_point_name>— the directory name where the cluster file system will be mounted. -
Create a resource that the cluster will mount as a GFS2 file system on all nodes at startup:
crm configure primitive <resource_name> ocf:heartbeat:Filesystem device /dev/mapper/<block_storage_name> directory /mnt/<mount_point_name> fstype gfs2Specify:
<resource_name>— a unique resource name within the cluster;<block_storage_name>— the network drive name that you obtained in step 11;<mount_point_name>— the directory name on the network drive that you created in step 15.
-
Make sure that the cluster is operating correctly:
crm statusThe response will show the cluster status information. For example:
Cluster Summary:* Stack: corosync* Current DC: node-1 (version 2.1.2-ada5c3b36e2) - partition with quorum* Last updated: Mon Feb 10 11:58:13 2025* Last change: Fri Feb 7 19:19:07 2025 by root via cibadmin on node-1* 2 nodes configured* 2 resource instances configuredNode List:* Online: [ node-1 node-2 ]Full List of Resources:* dlm (ocf:pacemaker:controld): Started [ node-1 node-2 ]* ClusterFS (ocf:heartbeat:Filesystem): Started [ node-1 node-2 ]Where:
- in the
Current DCline, the cluster Designated Controller is displayed. Thepartition with quorumstate means that the cluster has reached quorum and is operating correctly; - in the
Node Listblock, the cluster nodes are listed. TheOnlinestatus means that the nodes are available and active; - in the
Full List of Resourcesblock, the state of the cluster resources is displayed. TheStartedstatus means that the resources are successfully running on the specified cluster nodes.
- in the
-
Make sure that
corosynchas established a connection with the other cluster nodes:corosync-cfgtool -sThe response will show information about
corosyncnetwork connections. For example:Local node ID 2, transport knetLINK ID 0 udpaddr = 192.168.1.23status:nodeid: 1: connectednodeid: 2: localhostWhere in the
Statusblock, the connection status to each cluster node is displayed:nodeid: 1: connected— the node is available, connection established;nodeid: 2: localhost— current node.
-
Make sure that the
dlmcluster resource is operating correctly and all cluster nodes are discovered:dlm_tool statusThe response will show the
dlmresource status information. For example:cluster nodeid 2 quorate 1 ring seq 80 80daemon now 234888 fence_pid 0node 1 M add 630 rem 212 fail 60 fence 159 at 1 1738943226node 2 M add 61 rem 0 fail 0 fence 0 at 0 0Where:
quorate 1— the cluster has reached quorum;node 1andnode 2with theMstatus — cluster nodes are active and participating in the cluster operation.
-
Make sure that the network drive is displayed in the system and mounted to the required mount point:
lsblkThe response will show information about drives and their mount points. For example:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS----sdc 8:32 0 150G 0 disk└─mpatha 252:0 0 150G 0 mpath /mnt/gfssdd 8:48 0 150G 0 disk└─mpatha 252:0 0 150G 0 mpath /mnt/gfsWhere:
sdc,sdd— network drives;mpatha— multipath device;/mnt/gfs— GFS2 file system mount point.
-
Make sure that the GFS2 file system is mounted correctly:
mount | grep gfsThe response will show file system information. For example:
/dev/mapper/mpatha on /mnt/gfs type gfs2 (rw,relatime,rgrplvb)Where:
/dev/mapper/mpatha— the network drive where the GFS2 file system is located;/mnt/gfs— file system mount point;gfs2— file system type.