In this blog post, let’s see how to upgrade a Windows Server 2012R2 Failover cluster to Windows Server 2016. My current LAB setup is a 3 node cluster, all running 2012R2 and I decided to upgrade them to 2016 to learn new features/enhancements of windows server 2016. Thought of coming up with a short blog post on how to perform this if anyone of you are on the same boat as me.

Anyways….Here’s my current lab setup.

1_current_clust_config

Before moving on…what options do I have for upgrading my cluster?
Option 1: Install Windows Server 2016 on a completely new machine and introduce to the existing cluster and move roles and remove the old 2012R2 node….Work on the next node and perform the same….so on…till all your nodes in your cluster are 2016 machines. As the last step Raise the Cluster functionality level to 2016.

Option 2: Select a node which you want to upgrade, drain roles->evict node->Perform in-place upgrade from 2012R2 to 2016->Introduce the upgraded node back to cluster. Perform the same till all your nodes in your cluster are 2016 machines. As the last step Raise the Cluster functionality level to 2016.

NOTE: Yes, you can have windows server 2016 and windows server 2012R2 nodes participating in the same cluster. It’s called mixed mode, which is a new compatibility feature/enhancement introduced to transition from server 2012 R2 to 2016 without downtime. However you can’t leave the cluster in that state for ever. You’ve 4 weeks time to be in supported state. As soon as all the nodes in the cluster are upgraded to server 2016 the cluster functional level should be upgraded. Once this is done, we can’t revert/rollback, we can’t add 2012 R2 nodes to this cluster anymore.

I’ve chosen to perform inplace upgrades(Method 2 as mentioned above). Would I do this in Production? Probably not.

Now…I’ve drained the node which I would like to upgrade to 2016 and evicted from cluster.

2

3

It’s gone! My current cluster state at this point is shown below.

4_node_evicted

Now…I inserted 2016 media on the server which I just evicted and performed upgrade.

5_install

6

7_upgrade_drive

I had no free space on C$, so I ended up adding a new drive(U$) to facilitate upgrade process. Well, It failed…I had to expand Drive C$ and restart the process!!

8

After struggling for around 90 minutes or so, I am all set.

9_upgrade_done

Now, I am reintroducing the node back into the cluster.

10

12

13

14

Alrighttttttttttttttty…..Here it is!

15

As you can see below, Current cluster functional level is set to 8. Once all the nodes have been upgraded to 2016 in this cluster, we should upgrade functional level as I already mentioned and the below command would return 9 as the output.

16

There you go guys, Hope this helps. Happy weekend!

Update: After spending few more hours, I was able to upgrade all my nodes to 2016 and upgraded cluster functionality level. It’s no longer in Mixed Mode(in other words, I won’t be able to add a windows 2012 R2 node to my cluster). See below…As I mentioned above, the cluster functional level is set to 9 after I issued “update-clusterfunctionallevel”

last

 

5 responses to “Upgrading Windows Failover Cluster 2012R2 to 2016”

  1. Always On availability group(s) – Rolling upgrades – MSSQLTREK Avatar

    […] of years ago, I wrote a blog post explaining how to upgrade Windows OS from 2012 R2 to 2016 on nodes participating in fail over […]

  2. Darryl Avatar
    Darryl

    Did the nodes have SQL Server installed whilst you did the upgrade?

    1. sreekanth bandarla Avatar
      sreekanth bandarla

      Yes.

      1. Ashman Avatar
        Ashman

        Wass there anything different you needed to do or actions to perform regarding the SQL role that was installed on the nodes or did SQL cluster features work without any issues post upgrade ?

  3. Cosmo Avatar
    Cosmo

    FWIW, we have upgraded about 45 clusters from 2012 to 2016 … all with SQL Server AGs. We never bothered to evict the nodes before upgrading. It’s not necessary. We have done 2-node + witness and 4 node + witness clusters in dev, alpha, and prod.

    We simply pick an asynchronous replica, upgrade it. Wait for data sync to catch up, fail over to the upgraded node. Then upgrade the remaining nodes (one at a time), then set the cluster functional level via powershell.

    we only had one machine that failed to connect to the cluster and that was due to networking changes required as part of the upgrade. We removed it from the AG, evicted it from the windows cluster, then added it back and restored the databases.

Leave a reply to Always On availability group(s) – Rolling upgrades – MSSQLTREK Cancel reply

I’m Sreekanth

Welcome to MSSQLTREK, my little corner of the internet where I geek out about SQL Server, databases, and all things cloud. This blog is my space to share lessons learned, cool tips, real-world troubleshooting stories, and the occasional deep dive into data and performance. Whether you’re a fellow Cloud Architect, DBA, Developer, or just cloud-curious, come along for the ride — let’s explore, optimize, and build awesome data solutions together!

Let’s connect