{"id":138327,"date":"2026-03-19T12:00:00","date_gmt":"2026-03-19T10:00:00","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=138327"},"modified":"2026-03-19T18:54:28","modified_gmt":"2026-03-19T15:54:28","slug":"configure-windows-server-failover-clustering","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/configure-windows-server-failover-clustering\/","title":{"rendered":"Configure Windows Server 2022\/2025 Failover Clustering"},"content":{"rendered":"\n<p>Windows Server Failover Clustering (WSFC) is a built-in feature of Windows Server that groups multiple servers into a cluster to provide high availability for workloads like SQL Server, Hyper-V, and file services. When one node fails, another node automatically takes over the workload with minimal downtime. This guide walks through setting up Windows Server 2022\/2025 failover clustering from scratch &#8211; covering prerequisites, installation, cluster creation, quorum configuration, shared storage, highly available roles, networking, Cluster-Aware Updating, and PowerShell management commands.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites for Windows Server Failover Clustering<\/h2>\n\n\n\n<p>Before creating a failover cluster on Windows Server 2022 or 2025, make sure these requirements are met:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Minimum 2 servers<\/strong> running Windows Server 2022 or 2025 (Datacenter or Standard edition). All nodes must run the same edition and version<\/li>\n\n\n\n<li><strong>Active Directory domain membership<\/strong> &#8211; all cluster nodes must be joined to the same AD domain. The cluster computer object (CNO) is created in AD during cluster creation. If you need to set up AD first, follow the guide on <a href=\"https:\/\/computingforgeeks.com\/how-to-install-active-directory-domain-services-in-windows-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">installing Active Directory Domain Services on Windows Server<\/a><\/li>\n\n\n\n<li><strong>Shared storage<\/strong> &#8211; iSCSI SAN, Fibre Channel, or Storage Spaces Direct (S2D) for clustered disks. At minimum, one shared disk for quorum witness<\/li>\n\n\n\n<li><strong>Two network adapters per node<\/strong> &#8211; one for client\/management traffic and one dedicated for cluster heartbeat (private network)<\/li>\n\n\n\n<li><strong>Same subnet or routed connectivity<\/strong> between all nodes. Multi-subnet clusters are supported but require additional DNS and IP configuration<\/li>\n\n\n\n<li><strong>DNS resolution<\/strong> &#8211; all nodes must resolve each other by hostname. A properly configured <a href=\"https:\/\/computingforgeeks.com\/install-and-configure-dns-server-in-windows-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">DNS server on Windows Server<\/a> is essential<\/li>\n\n\n\n<li><strong>Domain admin or delegated permissions<\/strong> to create computer objects in the target OU<\/li>\n\n\n\n<li><strong>Identical hardware configuration<\/strong> recommended across all nodes (same NIC drivers, firmware, storage HBA)<\/li>\n\n\n\n<li><strong>Windows Firewall<\/strong> &#8211; allow the following ports: TCP 135, 137, 3343, 5985, and dynamic RPC ports (49152-65535). UDP 3343 for cluster communication. Refer to our guide on <a href=\"https:\/\/computingforgeeks.com\/how-to-open-a-port-in-windows-server-firewall\/\" target=\"_blank\" rel=\"noreferrer noopener\">opening ports in Windows Server Firewall<\/a> for detailed steps<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Install the Failover Clustering Feature<\/h2>\n\n\n\n<p>The Failover Clustering feature must be installed on every node that will join the cluster. You can install it using PowerShell or Server Manager.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Option A: Install Using PowerShell<\/h3>\n\n\n\n<p>Open an elevated PowerShell session on each node and run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools<\/code><\/pre>\n\n\n\n<p>Expected output shows Success as the exit code and True under the Restart Needed column if a reboot is required:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Success Restart Needed Exit Code      Feature Result\n------- -------------- ---------      --------------\nTrue    No             Success        {Failover Clustering}<\/code><\/pre>\n\n\n\n<p>To install the feature on all nodes at once from a single management machine, use PowerShell remoting:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$nodes = \"NODE1\", \"NODE2\", \"NODE3\"\nInvoke-Command -ComputerName $nodes -ScriptBlock {\n    Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools\n}<\/code><\/pre>\n\n\n\n<p>Verify the feature is installed on all nodes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName $nodes -ScriptBlock {\n    Get-WindowsFeature Failover-Clustering | Select-Object Name, InstallState\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Option B: Install Using Server Manager<\/h3>\n\n\n\n<p>If you prefer the GUI approach:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open <strong>Server Manager<\/strong> and click <strong>Manage > Add Roles and Features<\/strong><\/li>\n\n\n\n<li>Click <strong>Next<\/strong> through the wizard until you reach the <strong>Features<\/strong> page<\/li>\n\n\n\n<li>Check <strong>Failover Clustering<\/strong>. When prompted, also add the management tools<\/li>\n\n\n\n<li>Click <strong>Next<\/strong> and then <strong>Install<\/strong><\/li>\n\n\n\n<li>Repeat on every node<\/li>\n<\/ul>\n\n\n\n<p>Reboot the servers if prompted.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Run the Cluster Validation Wizard<\/h2>\n\n\n\n<p>Before creating the cluster, run the validation wizard. This is a mandatory step that checks hardware compatibility, network configuration, storage access, and system configuration across all intended nodes. Microsoft support requires a validated configuration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Validate Using PowerShell<\/h3>\n\n\n\n<p>Run the full validation test suite from any node:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Test-Cluster -Node NODE1, NODE2 -Include \"Storage\", \"Inventory\", \"Network\", \"System Configuration\"<\/code><\/pre>\n\n\n\n<p>For a full validation with all test categories:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Test-Cluster -Node NODE1, NODE2<\/code><\/pre>\n\n\n\n<p>The validation report is saved as an HTML file. Review it for any errors or warnings:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$report = Test-Cluster -Node NODE1, NODE2\nStart-Process $report.FullName<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Validate Using Failover Cluster Manager<\/h3>\n\n\n\n<p>Open <strong>Failover Cluster Manager<\/strong> from Server Manager or by running <code>cluadmin.msc<\/code>. In the center pane under Management, click <strong>Validate Configuration<\/strong>. Add the server names and run all tests. Review the report for any failures before proceeding.<\/p>\n\n\n\n<p>Common validation failures and fixes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Network warning about single network<\/strong> &#8211; add a dedicated heartbeat NIC on a separate subnet<\/li>\n\n\n\n<li><strong>Storage test failures<\/strong> &#8211; verify all nodes can see the shared LUNs through iSCSI Initiator or disk management<\/li>\n\n\n\n<li><strong>Software update differences<\/strong> &#8211; install the same Windows patches on all nodes<\/li>\n\n\n\n<li><strong>Domain membership issues<\/strong> &#8211; confirm all nodes are in the same AD domain and can resolve each other<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Create the Failover Cluster<\/h2>\n\n\n\n<p>Once validation passes, create the cluster. You need a cluster name (the CNO &#8211; Cluster Name Object) and a static IP address for the cluster.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Create Cluster Using PowerShell<\/h3>\n\n\n\n<p>Run this command from any one of the validated nodes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-Cluster -Name \"YOURCLUSTER\" -Node NODE1, NODE2 -StaticAddress 192.168.1.100 -NoStorage<\/code><\/pre>\n\n\n\n<p>The <code>-NoStorage<\/code> flag skips automatic addition of shared disks. This is recommended so you can add and configure storage manually afterward. Replace <code>YOURCLUSTER<\/code> with your desired cluster name and <code>192.168.1.100<\/code> with the IP you have reserved for the cluster.<\/p>\n\n\n\n<p>Verify the cluster was created successfully:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-Cluster | Format-List Name, Domain, SharedVolumesRoot<\/code><\/pre>\n\n\n\n<p>Sample output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Name             : YOURCLUSTER\nDomain           : yourdomain.local\nSharedVolumesRoot : C:\\ClusterStorage<\/code><\/pre>\n\n\n\n<p>Check the nodes are online:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterNode | Format-Table Name, State, NodeWeight<\/code><\/pre>\n\n\n\n<p>Expected output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Name   State NodeWeight\n----   ----- ----------\nNODE1  Up             1\nNODE2  Up             1<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Create Cluster Using Failover Cluster Manager<\/h3>\n\n\n\n<p>In Failover Cluster Manager, click <strong>Create Cluster<\/strong> in the Actions pane. The wizard walks through selecting servers, running validation (if not already done), specifying the cluster name and IP address, and confirming the configuration. The cluster is created after you click Finish.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Configure Cluster Quorum<\/h2>\n\n\n\n<p>Quorum determines how many node failures the cluster can survive while remaining online. A proper quorum configuration is critical for preventing split-brain scenarios where both halves of a partitioned cluster try to own the same resources.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quorum Models Explained<\/h3>\n\n\n\n<p>Windows Server 2022\/2025 supports these quorum witness types:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Witness Type<\/th><th>Description<\/th><th>Best For<\/th><\/tr><\/thead><tbody><tr><td>Node Majority<\/td><td>Each node gets one vote. Majority of votes keeps cluster running<\/td><td>Odd number of nodes (3, 5, 7)<\/td><\/tr><tr><td>Disk Witness<\/td><td>Small shared disk (512 MB min) gets one vote<\/td><td>Even number of nodes with shared storage<\/td><\/tr><tr><td>Cloud Witness<\/td><td>Azure blob storage account acts as witness<\/td><td>Multi-site clusters, no shared storage<\/td><\/tr><tr><td>File Share Witness<\/td><td>SMB file share on a separate server gets one vote<\/td><td>Legacy setups, cross-site clusters<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Configure Disk Witness<\/h3>\n\n\n\n<p>For a two-node cluster with shared storage, a disk witness is the most common choice. First add the small shared disk to the cluster, then set it as the quorum witness:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-ClusterQuorum -DiskWitness \"Cluster Disk 1\"<\/code><\/pre>\n\n\n\n<p>Verify the quorum configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterQuorum | Format-List Cluster, QuorumResource, QuorumType<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Configure Cloud Witness (Azure)<\/h3>\n\n\n\n<p>Cloud witness is the recommended approach for clusters without shared storage or for stretched (multi-site) clusters. You need an Azure Storage Account with a general-purpose account (not Blob-only).<\/p>\n\n\n\n<p>Create the Azure storage account first (through Azure Portal or Azure CLI), then configure the cluster:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-ClusterQuorum -CloudWitness `\n    -AccountName \"mystorageaccount\" `\n    -AccessKey \"YourStorageAccountAccessKey\"<\/code><\/pre>\n\n\n\n<p>For Azure Government or other sovereign clouds, add the <code>-Endpoint<\/code> parameter with the appropriate blob endpoint URL.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configure File Share Witness<\/h3>\n\n\n\n<p>Create an SMB share on a server that is not part of the cluster. Grant the cluster computer object (CNO) Full Control on the share and NTFS permissions. Then configure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-ClusterQuorum -FileShareWitness \"\\\\FILESERVER\\ClusterWitness\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Add Shared Storage to the Cluster<\/h2>\n\n\n\n<p>Clustered workloads need shared storage accessible from all nodes. The two primary approaches are iSCSI-based shared disks and Storage Spaces Direct (S2D).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Option A: Connect iSCSI Shared Storage<\/h3>\n\n\n\n<p>On each cluster node, open the iSCSI Initiator and connect to your iSCSI target. Start by enabling the iSCSI service:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Start-Service MSiSCSI\nSet-Service MSiSCSI -StartupType Automatic<\/code><\/pre>\n\n\n\n<p>Connect to the iSCSI target:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-IscsiTargetPortal -TargetPortalAddress 192.168.1.50\nConnect-IscsiTarget -NodeAddress \"iqn.2024.com.storage:target01\" -IsPersistent $true<\/code><\/pre>\n\n\n\n<p>Repeat on all cluster nodes. Initialize and format the disk on only one node:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-Disk | Where-Object PartitionStyle -eq 'RAW' |\n    Initialize-Disk -PartitionStyle GPT -PassThru |\n    New-Partition -AssignDriveLetter -UseMaximumSize |\n    Format-Volume -FileSystem NTFS -NewFileSystemLabel \"ClusterData\"<\/code><\/pre>\n\n\n\n<p>Now add the disk to the cluster:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterAvailableDisk | Add-ClusterDisk<\/code><\/pre>\n\n\n\n<p>Verify the disks are visible in the cluster:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterResource | Where-Object ResourceType -eq \"Physical Disk\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Option B: Enable Storage Spaces Direct (S2D)<\/h3>\n\n\n\n<p>Storage Spaces Direct uses local disks on each node to create a software-defined shared storage pool. This is available only on Windows Server Datacenter edition and requires at minimum 2 nodes with at least 2 capacity drives each.<\/p>\n\n\n\n<p>After creating the cluster (with <code>-NoStorage<\/code>), enable S2D:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enable-ClusterStorageSpacesDirect -Confirm:$false<\/code><\/pre>\n\n\n\n<p>This pools all eligible local disks across nodes into a single storage pool. Create a virtual disk and volume:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-Volume -StoragePoolFriendlyName \"S2D on YOURCLUSTER\" `\n    -FriendlyName \"ClusterVol01\" `\n    -FileSystem CSVFS_ReFS `\n    -Size 500GB `\n    -ResiliencySettingName Mirror<\/code><\/pre>\n\n\n\n<p>The volume is automatically added as a Cluster Shared Volume (CSV) and mounted at <code>C:\\ClusterStorage\\ClusterVol01<\/code> on all nodes.<\/p>\n\n\n\n<p>Verify S2D health:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-StorageSubSystem *Cluster* | Get-StorageHealthReport<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Configure Cluster Networking<\/h2>\n\n\n\n<p>A properly designed cluster network uses separate networks for different traffic types. At minimum, configure two networks: one for client access and one for internal cluster communication (heartbeat).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">View Cluster Networks<\/h3>\n\n\n\n<p>List the networks the cluster has detected:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterNetwork | Format-Table Name, State, Role, Address<\/code><\/pre>\n\n\n\n<p>The Role property controls what each network is used for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>0<\/strong> &#8211; Network is not used by the cluster<\/li>\n\n\n\n<li><strong>1<\/strong> &#8211; Cluster communication only (heartbeat)<\/li>\n\n\n\n<li><strong>3<\/strong> &#8211; Both cluster communication and client access (default)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Configure Heartbeat Network<\/h3>\n\n\n\n<p>Rename the networks for clarity and assign the correct roles. The heartbeat network should be on a dedicated private subnet (for example, 10.10.10.0\/24):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Rename networks for clarity\n(Get-ClusterNetwork -Name \"Cluster Network 1\").Name = \"Client-Network\"\n(Get-ClusterNetwork -Name \"Cluster Network 2\").Name = \"Heartbeat-Network\"\n\n# Set heartbeat network to cluster-only communication\n(Get-ClusterNetwork -Name \"Heartbeat-Network\").Role = 1\n\n# Set client network for both client and cluster traffic\n(Get-ClusterNetwork -Name \"Client-Network\").Role = 3<\/code><\/pre>\n\n\n\n<p>Verify the configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterNetwork | Format-Table Name, Role, State, Address -AutoSize<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Configure Live Migration Network<\/h3>\n\n\n\n<p>For Hyper-V clusters, dedicate a network for live migration traffic to prevent VM migrations from saturating your client or heartbeat networks:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterResourceType -Name \"Virtual Machine\" |\n    Set-ClusterParameter -Name MigrationExcludeNetworks -Value (\n        (Get-ClusterNetwork -Name \"Client-Network\").Id\n    )<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Create Highly Available Roles<\/h2>\n\n\n\n<p>With the cluster running and storage configured, deploy highly available roles. These are the workloads that failover between nodes automatically.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Highly Available File Server<\/h3>\n\n\n\n<p>Create a clustered file server role with a virtual name and IP that clients connect to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Add-ClusterFileServerRole -Name \"FS01\" `\n    -Storage \"Cluster Disk 2\" `\n    -StaticAddress 192.168.1.110<\/code><\/pre>\n\n\n\n<p>Then create a shared folder on the clustered file server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-SmbShare -Name \"SharedDocs\" `\n    -Path \"D:\\SharedDocs\" `\n    -ScopeName \"FS01\" `\n    -FullAccess \"YOURDOMAIN\\Domain Users\"<\/code><\/pre>\n\n\n\n<p>For Scale-Out File Server (SOFS) used with Hyper-V or SQL Server workloads, create it with the SOFS flag:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Add-ClusterScaleOutFileServerRole -Name \"SOFS01\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">SQL Server Always On Availability Group<\/h3>\n\n\n\n<p>SQL Server Always On Availability Groups (AG) require an underlying WSFC cluster. After <a href=\"https:\/\/computingforgeeks.com\/how-to-install-ms-sql-on-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">installing SQL Server<\/a> on each node, enable Always On and create the AG:<\/p>\n\n\n\n<p>Enable Always On in SQL Server Configuration Manager on each node, or via PowerShell:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enable-SqlAlwaysOn -ServerInstance \"NODE1\" -Force\nEnable-SqlAlwaysOn -ServerInstance \"NODE2\" -Force<\/code><\/pre>\n\n\n\n<p>Create the Availability Group using T-SQL in SQL Server Management Studio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE AVAILABILITY GROUP [AG01]\nWITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY)\nFOR DATABASE [YourDatabase]\nREPLICA ON\n    N'NODE1' WITH (\n        ENDPOINT_URL = N'TCP:\/\/NODE1.yourdomain.local:5022',\n        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,\n        FAILOVER_MODE = AUTOMATIC),\n    N'NODE2' WITH (\n        ENDPOINT_URL = N'TCP:\/\/NODE2.yourdomain.local:5022',\n        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,\n        FAILOVER_MODE = AUTOMATIC);\n\nALTER AVAILABILITY GROUP [AG01]\nADD LISTENER N'AG01-Listener' (\n    WITH IP ((N'192.168.1.120', N'255.255.255.0')),\n    PORT = 1433);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Hyper-V Virtual Machine High Availability<\/h3>\n\n\n\n<p>Install the Hyper-V role on all cluster nodes first:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart<\/code><\/pre>\n\n\n\n<p>After reboot, configure the cluster to host highly available VMs. Store VM files on Cluster Shared Volumes (CSV):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Add a cluster disk as CSV\nAdd-ClusterSharedVolume -Name \"Cluster Disk 2\"\n\n# Create a new highly available VM\nNew-VM -Name \"WebServer01\" `\n    -MemoryStartupBytes 4GB `\n    -Path \"C:\\ClusterStorage\\Volume1\" `\n    -NewVHDPath \"C:\\ClusterStorage\\Volume1\\WebServer01\\disk0.vhdx\" `\n    -NewVHDSizeBytes 100GB `\n    -Generation 2\n\n# Make the VM highly available\nAdd-ClusterVirtualMachineRole -VMName \"WebServer01\"<\/code><\/pre>\n\n\n\n<p>Verify the VM is clustered:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterGroup | Where-Object GroupType -eq \"VirtualMachine\" | Format-Table Name, State, OwnerNode<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Set Up Cluster-Aware Updating (CAU)<\/h2>\n\n\n\n<p>Cluster-Aware Updating automates Windows Update across cluster nodes, draining and pausing one node at a time to maintain availability throughout the patching process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enable CAU Self-Updating Mode<\/h3>\n\n\n\n<p>In self-updating mode, the cluster patches itself on a schedule without external intervention. Install the CAU role on the cluster:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Add-CauClusterRole -ClusterName \"YOURCLUSTER\" `\n    -DaysOfWeek Tuesday `\n    -WeeksOfMonth 2 `\n    -MaxRetriesPerNode 3 `\n    -RequireAllNodesOnline `\n    -Force<\/code><\/pre>\n\n\n\n<p>This schedules updates for the second Tuesday of every month (aligning with Microsoft Patch Tuesday). The cluster will drain workloads from one node, apply updates, reboot if needed, then move to the next node.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Run CAU Manually<\/h3>\n\n\n\n<p>To trigger an immediate update run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-CauRun -ClusterName \"YOURCLUSTER\" -MaxRetriesPerNode 3 -Force<\/code><\/pre>\n\n\n\n<p>Check CAU status and results:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-CauRun -ClusterName \"YOURCLUSTER\" -Detailed<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">CAU Using Failover Cluster Manager<\/h3>\n\n\n\n<p>Open Failover Cluster Manager, connect to the cluster, and click <strong>Cluster-Aware Updating<\/strong> in the left pane. From there you can configure self-updating options, preview applicable updates, or manually initiate an update run with point-and-click controls.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9: Monitoring and Troubleshooting the Cluster<\/h2>\n\n\n\n<p>Regular monitoring helps catch issues before they cause downtime. Windows Server 2022\/2025 provides multiple tools for cluster health monitoring.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Check Cluster Health<\/h3>\n\n\n\n<p>Get an overview of all cluster resources and their states:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterGroup | Format-Table Name, State, OwnerNode -AutoSize\nGet-ClusterResource | Format-Table Name, State, ResourceType, OwnerGroup -AutoSize<\/code><\/pre>\n\n\n\n<p>Check for any failed resources:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterResource | Where-Object State -eq \"Failed\" | Format-Table Name, ResourceType, OwnerGroup<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Review Cluster Events<\/h3>\n\n\n\n<p>Cluster events are logged in the system and dedicated cluster event channels. Query recent failover events:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-WinEvent -LogName \"Microsoft-Windows-FailoverClustering\/Operational\" -MaxEvents 50 |\n    Where-Object LevelDisplayName -eq \"Error\" |\n    Format-Table TimeCreated, Id, Message -Wrap<\/code><\/pre>\n\n\n\n<p>Generate a cluster diagnostic log for deeper troubleshooting:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterLog -Destination C:\\Temp -TimeSpan 60<\/code><\/pre>\n\n\n\n<p>This collects the last 60 minutes of cluster logs from all nodes and saves them to C:\\Temp.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Common Troubleshooting Commands<\/h3>\n\n\n\n<p>Test cluster network connectivity between nodes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ClusterNetwork | Get-ClusterNetworkInterface | Format-Table Name, Node, Network, State<\/code><\/pre>\n\n\n\n<p>Check cluster validation to identify emerging issues:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Test-Cluster -Node (Get-ClusterNode).Name -Include \"Network\", \"System Configuration\"<\/code><\/pre>\n\n\n\n<p>Repair a cluster node that is in a quarantined state:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Start-ClusterNode -Name \"NODE2\" -ClearQuarantine<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">PowerShell Commands for Failover Cluster Management<\/h2>\n\n\n\n<p>Here is a reference of the most useful PowerShell cmdlets for day-to-day cluster management on Windows Server 2022\/2025.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cluster Information<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># View cluster details\nGet-Cluster | Format-List *\n\n# List all cluster nodes\nGet-ClusterNode | Format-Table Name, State, NodeWeight\n\n# List all cluster groups (roles)\nGet-ClusterGroup | Format-Table Name, State, OwnerNode, GroupType\n\n# List all cluster resources\nGet-ClusterResource | Format-Table Name, State, ResourceType, OwnerGroup\n\n# List cluster shared volumes\nGet-ClusterSharedVolume | Format-Table Name, State, OwnerNode<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Node Management<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Pause a node (drain roles before maintenance)\nSuspend-ClusterNode -Name \"NODE1\" -Drain\n\n# Resume a paused node\nResume-ClusterNode -Name \"NODE1\"\n\n# Evict a node from the cluster\nRemove-ClusterNode -Name \"NODE3\" -Force\n\n# Add a new node to existing cluster\nAdd-ClusterNode -Name \"NODE3\" -Cluster \"YOURCLUSTER\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Resource and Group Management<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Move a cluster group to another node\nMove-ClusterGroup -Name \"SQL Server (MSSQLSERVER)\" -Node \"NODE2\"\n\n# Start a stopped cluster resource\nStart-ClusterResource -Name \"SQL Server\"\n\n# Stop a cluster resource\nStop-ClusterResource -Name \"SQL Server\"\n\n# Manually fail over all groups to another node\nGet-ClusterGroup | Move-ClusterGroup -Node \"NODE1\"\n\n# Test failover of a specific group\nMove-ClusterGroup -Name \"FS01\" -Node \"NODE2\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Storage Management<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># List available disks to add\nGet-ClusterAvailableDisk\n\n# Add available disks to the cluster\nGet-ClusterAvailableDisk | Add-ClusterDisk\n\n# Convert a cluster disk to CSV\nAdd-ClusterSharedVolume -Name \"Cluster Disk 2\"\n\n# Check disk health\nGet-ClusterResource -Name \"Cluster Disk 1\" | Get-ClusterParameter DiskPath<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>You now have a fully functional Windows Server 2022\/2025 failover cluster with properly configured quorum, shared storage, cluster networking, and highly available roles. The cluster will automatically fail over workloads between nodes during planned maintenance or unexpected failures. For production environments, implement regular backup of cluster configuration using <code>Get-ClusterGroup | Export-Clixml<\/code>, monitor cluster health with System Center or Windows Admin Center, and keep all nodes patched using Cluster-Aware Updating on a regular schedule.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Related Guides<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/computingforgeeks.com\/how-to-install-active-directory-domain-services-in-windows-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">Install Active Directory Domain Services in Windows Server<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/enable-remote-desktop-protocol-rdp-on-windows-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">Enable Remote Desktop Protocol (RDP) on Windows Server<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/how-to-open-a-port-in-windows-server-firewall\/\" target=\"_blank\" rel=\"noreferrer noopener\">How To Open a Port in Windows Server Firewall<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/install-and-configure-dns-server-in-windows-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">Install and Configure DNS Server on Windows Server<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/how-to-install-and-configure-dhcp-server-on-windows-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">Install and Configure DHCP Server on Windows Server<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Windows Server Failover Clustering (WSFC) is a built-in feature of Windows Server that groups multiple servers into a cluster to provide high availability for workloads like SQL Server, Hyper-V, and file services. When one node fails, another node automatically takes over the workload with minimal downtime. This guide walks through setting up Windows Server 2022\/2025 &#8230; <a title=\"Configure Windows Server 2022\/2025 Failover Clustering\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/configure-windows-server-failover-clustering\/\" aria-label=\"Read more about Configure Windows Server 2022\/2025 Failover Clustering\">Read more<\/a><\/p>\n","protected":false},"author":3,"featured_media":162971,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[461,299,90],"tags":[38690],"class_list":["post-138327","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-databases","category-how-to","category-windows","tag-failover-clustering-wsfc"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/138327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=138327"}],"version-history":[{"count":1,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/138327\/revisions"}],"predecessor-version":[{"id":162870,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/138327\/revisions\/162870"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/162971"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=138327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=138327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=138327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}