Installing and Configuring a Quorum Server
Hammerspace requires using an external quorum server to improve resilience against certain failure conditions, especially in a two-node HA configuration. The supported external quorum server software is Qnetd, and it is available as an open-source package for most Linux distributions.
| A single quorum server can serve multiple clusters. |
External quorum server requirements:
-
Qnetd (version 3.0 or later) is installed.
-
Server resources are configured according to the vendor-recommended Linux requirements. A minimal server configuration is sufficient. The Qnetd software does not require significant resources to operate.
-
The choice of Linux distribution is up to the customer.
-
The CPU architecture can be either x86_64 or ARM.
-
Only one quorum server is required and supported per cluster.
-
The server must be able to connect to all Anvil nodes in the cluster.
-
Must be in a different failure domain than the Anvil nodes to ensure it has the impact that is expected.
The importance of the quorum server is its functionality. A quorum server enables a cluster to use a non-cluster node as a voting member. This is especially helpful when cluster nodes lose connectivity with each other, a condition that can lead to a split-brain.
When a cluster membership change occurs, the surviving side with the majority of votes will become (or remain) the primary node and continue to provide services to clients.
The quorum server enables automatic decision-making for the cluster in a split-brain situation, eliminating potential downtime caused by manual steps.
Installing Qnetd
The following instructions showing how to install Qnetd on a regular Linux node are provided for two different Linux distributions. Other Linux distributions can also be used.
On Red Hat and Red Hat-like Distributions
Use the following commands to install Qnetd on Red Hat or Red Hat-like distributions:
# dnf install -y corosync-qnetd
Disable TLS:
# sed -i 's/COROSYNC_QNETD_OPTIONS=""/COROSYNC_QNETD_OPTIONS="-s off"/g' /etc/sysconfig/corosync-qnetd
Enable and start the service:
# systemctl enable corosync-qnetd.service
# systemctl start corosync-qnetd.service
Open firewall ports (if needed):
# firewall-cmd --zone public --add-service=high-availability
# firewall-cmd --zone public --add-service=high-availability --permanent
On Ubuntu
Use the following commands to install Qnetd on Ubuntu Linux:
# apt install -y corosync-qnetd
Disable TLS:
# sed -i 's/COROSYNC_QNETD_OPTIONS=""/COROSYNC_QNETD_OPTIONS="-s off"/g' /etc/default/corosync-qnetd
Enable and start the service:
# systemctl enable corosync-qnetd.service
# systemctl start corosync-qnetd.service
Open firewall ports (if enabled; 5403 is the default qnetd port):
# ufw allow 5403
Once the Qnetd software is installed on the Linux server, no further configuration is required on the Linux quorum server.
Configuring an External Quorum Server
After the quorum server is installed, the cluster must be configured to use it.
| External quorum server functionality is configured using the sysadmin CLI, not the Hammerspace Admin CLI. |
# ssh sysadmin@<ANVIL CLUSTER IP>
...
Run quorum-device-set to configure 192.0.2.50 as the quorum server. Sample output included below.
sysadmin> quorum-device-set --host 192.0.2.50
anvil2.example.com: Succeeded
anvil1.example.com: Succeeded
Corosync configuration has been synchronized, please reload corosync daemon using 'pcs cluster reload corosync' command.
Corosync reloaded
anvil2.example.com: Cluster Enabled
anvil1.example.com: Cluster Enabled
anvil2.example.com: Starting Cluster...
anvil1.example.com: Starting Cluster...
Troubleshooting
If you get an error like this while trying to configure a quorum server, then it is likely that one of the Anvil nodes is not reachable at the moment.
Unable to connect to anvil2.example.com, check if pcsd is running there or try setting higher timeout with --request-timeout option (Failed to connect to anvil2.example.com port 2224: Connection refused)
Error: Unable to set corosync config: Unable to connect to anvil2.example.com, check if pcsd is running there or try setting higher timeout with --request-timeout option (Failed to connect to anvil2.example.com port 2224: Connection refused)
Command '['pcs', 'cluster', 'sync']' returned non-zero exit status 1.
An external quorum server is required for high-availability (two-Anvil) deployments.
Checking Status of Configured Quorum Server
You can check the status of the external quorum server using the following command:
# ssh sysadmin@<ANVIL CLUSTER IP>
...
Run quorum-device-status to verify the configuration.
sysadmin> quorum-device-status
Qdevice information
-------------------
Model: Net
Node ID: 2
Configured node list:
0 Node ID = 1
1 Node ID = 2
Membership node list: 1, 2
Qdevice-net information
----------------------
Cluster name: hs-0f9e8d7c-6b5a-4321-8000-000000000001
QNetd host: 192.0.2.50:5403
Algorithm: Fifty-Fifty split
Tie-breaker: Node with lowest node ID
State: Connected