Here is my quick reference guide to patching Skype for Business Server environment with Cumulative updates for the Skype for Business application itself. Microsoft provides regular cumulative updates which can be found here on the TechNet Skype for Business downloads and updates page. The Cumulative Updates contain important bug fixes as well as feature enhancements to the product so you will want to stay up to date and patch with a regular cadence. I don’t like being more than one CU behind at any given point in time.
You will want to download the Cumulative Update Installer which takes the guess work out of what patches are required on which Skype server role. At the time of writing this post the current Cumulative Update or CU is the June 2016 CU. The following shows the typical landing page where you can download the current CU.
Figure 1: Cumulative Update installation page
The following outlines patching a typical Skype for Business 2015 Enterprise Edition Server environment. In this case I have the following inventory of servers running a SfB 2015 Role:
· 6 Front End Servers
· 3 Mediation Servers
· 2 Edge Servers
The patching process is broken up into three parts which are:
· Patching the Front End Server Pools
· Patching Mediation, Director and Edge servers
· Patching the backend SQL Databases
It is recommended you plan and schedule a maintenance window to patch your environment. It should be done afterhours as the process can cause temporary outages for users. While these outages are quick (anywhere from 30 seconds to 2 minutes) you should still schedule the changes after business hours.
Patching Front-End Servers
Expert Tip:
Patching your Skype Front-End servers requires you do them one at a time. I cannot emphasize the importance of this so that you do not experience any Windows Fabric issues. Work with one pool and one server at a time when patching and never patch more than one front end server at one time.
1. Type the following cmdlet:
Get-CsPoolFabricState -PoolFqdn SkypePool.contoso.com.com
You should see something similar to the following output. Basically we are looking for any missing replicas. The following shows a working state. I’ve highlighted in green a sample of the text you are looking for that shows a healthy fabric.
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.
PS C:\Windows\system32> Get-CsPoolFabricState -PoolFqdn SkypePool.contoso.com.com
Replica Instances for MCUFactory Service
Address: SKYPESFBFE01.CONTOSO.COM - Primary: 1 Secondary: 3
Address: SKYPESFBFE02.CONTOSO.COM - Primary: 1 Secondary: 2
Address: SKYPESFBFE03.CONTOSO.COM - Primary: 1 Secondary: 3
Address: SKYPESFBFE04.CONTOSO.COM - Primary: 2 Secondary: 1
Address: SKYPESFBFE05.CONTOSO.COM - Primary: 0 Secondary: 2
Address: SKYPESFBFE06.CONTOSO.COM - Primary: 1 Secondary: 1
Local MCUFactory Service:
Missing Primary : 0
Missing Both Secondary : 0
Missing One Secondary : 0
No Missing Replicas : 6
Total Count : 6
Pool MCUFactory Server and Services Summary:
Fqdn: SKYPESFBFE01.CONTOSO.COM Primary: 1 Secondary: 3
Fqdn: SKYPESFBFE02.CONTOSO.COM Primary: 1 Secondary: 2
Fqdn: SKYPESFBFE03.CONTOSO.COM Primary: 1 Secondary: 3
Fqdn: SKYPESFBFE04.CONTOSO.COM Primary: 2 Secondary: 1
Fqdn: SKYPESFBFE05.CONTOSO.COM Primary: 0 Secondary: 2
Fqdn: SKYPESFBFE06.CONTOSO.COM Primary: 1 Secondary: 1
Replica Instances for ConferenceDirectory Service
Address: SKYPESFBFE02.CONTOSO.COM - Primary: 0 Secondary: 1
Address: SKYPESFBFE04.CONTOSO.COM - Primary: 0 Secondary: 1
Address: SKYPESFBFE05.CONTOSO.COM - Primary: 1 Secondary: 0
Local ConferenceDirectory Service:
Missing Primary : 0
Missing Both Secondary : 0
Missing One Secondary : 0
No Missing Replicas : 1
Total Count : 1
Pool ConferenceDirectory Server and Services Summary:
Fqdn: SKYPESFBFE02.CONTOSO.COM Primary: 0 Secondary: 1
Fqdn: SKYPESFBFE04.CONTOSO.COM Primary: 0 Secondary: 1
Fqdn: SKYPESFBFE05.CONTOSO.COM Primary: 1 Secondary: 0
Replica Instances for Routing Service
Address: SKYPESFBFE01.CONTOSO.COM - Primary: 3 Secondary: 8
Address: SKYPESFBFE02.CONTOSO.COM - Primary: 3 Secondary: 7
Address: SKYPESFBFE03.CONTOSO.COM - Primary: 3 Secondary: 8
Address: SKYPESFBFE04.CONTOSO.COM - Primary: 3 Secondary: 8
Address: SKYPESFBFE05.CONTOSO.COM - Primary: 4 Secondary: 7
Address: SKYPESFBFE06.CONTOSO.COM - Primary: 3 Secondary: 0 Other: 9
Local Routing Service:
Missing Primary : 0
Missing Both Secondary : 0
Missing One Secondary : 0
No Missing Replicas : 19
Total Count : 19
Pool Routing Server and Services Summary:
Fqdn: SKYPESFBFE01.CONTOSO.COM Primary: 3 Secondary: 8
Fqdn: SKYPESFBFE02.CONTOSO.COM Primary: 3 Secondary: 7
Fqdn: SKYPESFBFE03.CONTOSO.COM Primary: 3 Secondary: 8
Fqdn: SKYPESFBFE04.CONTOSO.COM Primary: 3 Secondary: 8
Fqdn: SKYPESFBFE05.CONTOSO.COM Primary: 4 Secondary: 7
Fqdn: SKYPESFBFE06.CONTOSO.COM Primary: 3 Secondary: 0
Replica Instances for LYSS Service
Address: SKYPESFBFE01.CONTOSO.COM - Primary: 3 Secondary: 8
Address: SKYPESFBFE02.CONTOSO.COM - Primary: 3 Secondary: 7
Address: SKYPESFBFE03.CONTOSO.COM - Primary: 3 Secondary: 8
Address: SKYPESFBFE04.CONTOSO.COM - Primary: 3 Secondary: 8
Address: SKYPESFBFE05.CONTOSO.COM - Primary: 4 Secondary: 7
Address: SKYPESFBFE06.CONTOSO.COM - Primary: 3 Secondary: 0
Local LYSS Service:
Missing Primary : 0
Missing Both Secondary : 0
Missing One Secondary : 0
No Missing Replicas : 19
Total Count : 19
Pool LYSS Server and Services Summary:
Fqdn: SKYPESFBFE01.CONTOSO.COM Primary: 3 Secondary: 8
Fqdn: SKYPESFBFE02.CONTOSO.COM Primary: 3 Secondary: 7
Fqdn: SKYPESFBFE03.CONTOSO.COM Primary: 3 Secondary: 8
Fqdn: SKYPESFBFE04.CONTOSO.COM Primary: 3 Secondary: 8
Fqdn: SKYPESFBFE05.CONTOSO.COM Primary: 4 Secondary: 7
Fqdn: SKYPESFBFE06.CONTOSO.COM Primary: 3 Secondary: 0
Replica Instances for Fabric Service
Address: SKYPESFBFE01.CONTOSO.COM - Primary: 0 Secondary: 3
Address: SKYPESFBFE02.CONTOSO.COM - Primary: 0 Secondary: 3
Address: SKYPESFBFE03.CONTOSO.COM - Primary: 0 Secondary: 3
Address: SKYPESFBFE04.CONTOSO.COM - Primary: 0 Secondary: 3
Address: SKYPESFBFE05.CONTOSO.COM - Primary: 3 Secondary: 0
Address: SKYPESFBFE06.CONTOSO.COM - Primary: 0 Secondary: 3
Local Fabric Service:
Missing Primary : 0
Missing Both Secondary : 0
Missing One Secondary : 0
No Missing Replicas : 3
Total Count : 3
Pool Fabric Server and Services Summary:
Fqdn: SKYPESFBFE01.CONTOSO.COM - Health: Ok Status: Up [Seed Node] Primary: 0 Secondary: 3
Fqdn: SKYPESFBFE02.CONTOSO.COM - Health: Ok Status: Up [Seed Node] Primary: 0 Secondary: 3
Fqdn: SKYPESFBFE03.CONTOSO.COM - Health: Ok Status: Up [Seed Node] Primary: 0 Secondary: 3
Fqdn: SKYPESFBFE04.CONTOSO.COM - Health: Ok Status: Up [Seed Node] Primary: 0 Secondary: 3
Fqdn: SKYPESFBFE05.CONTOSO.COM - Health: Ok Status: Up [Seed Node] Primary: 3 Secondary: 0
Fqdn: SKYPESFBFE06.CONTOSO.COM - Health: Ok Status: Up [Seed Node] Primary: 0 Secondary: 3
Pool All Server and Services Summary:
Fqdn: SKYPESFBFE01.CONTOSO.COM Primary: 7 Secondary: 19
Fqdn: SKYPESFBFE02.CONTOSO.COM Primary: 7 Secondary: 17
Fqdn: SKYPESFBFE03.CONTOSO.COM Primary: 7 Secondary: 19
Fqdn: SKYPESFBFE04.CONTOSO.COM Primary: 8 Secondary: 18
Fqdn: SKYPESFBFE05.CONTOSO.COM Primary: 9 Secondary: 16
Fqdn: SKYPESFBFE06.CONTOSO.COM Primary: 7 Secondary: 1
PS C:\Windows\system32>
If this cmdlet shows any missing replicas, then run the following cmdlet to recover the pool before you apply any patches.
Reset-CsPoolRegistrarState -ResetType QuorumLossRecovery
2. On the first server you want to patch, run the following cmdlet:
Stop-CsWindowsService
3. Apply the upgrade or patch to this server. (run the Skype Cumulative Updater or apply windows patches if you are only applying Windows patches)
4. Once the patch has been completed reboot the server
5. Validate that all Skype Services have been started and that there are no issues in the Event Logs.
Repeat Steps 2-4 for each front end server that needs to be upgraded.
Expert Tip:
It should be stated that the guidance that Microsoft supplies recommends the use of the Invoke-CsComputerFailOver and Invoke-CsComputerFailBack cmdlets when patching front-end servers. These cmdlets take the specified front end server out of the pool for maintenance mode while you patch them and then add them back to the topology when you are done patching them.
I have found that using these cmdlets results in having to use the Reset-CsPoolRegistrarState -ResetType QuorumLossRecovery to recover from fabric issues. In general I find stopping the services and patching does not put the fabric in a state requiring the use of the Reset-CsPoolRegistrarState -ResetType QuorumLossRecovery cmdlet.
Please consider your options and proceed at your own discretion.
Patching Mediation, Director and Edge servers
For Mediation, Directors and Edge Servers the process is more simplified since there isn’t a windows fabric you need to concern yourself with. Generally speaking, I would still recommend doing one server at a time for each of these server roles. If your environment is large and you have more than one person to assist you could divide these servers up to speed up the process. IE. Patch one mediation server and one director server at the same time.
1. On the first server you want to patch, run the following cmdlet:
Stop-CsWindowsService
2. Apply the upgrade or patch to this server. (run the Skype Cumulative Updater or apply windows patches if you are only applying Windows patches)
3. Once the patch has been completed reboot the server
4. Validate that all Skype Services have been started and that there are no issues in the Event Logs.
Repeat Steps 1-4 for each Mediation, Director or Edge Server that needs to be upgraded.
Patch Backend SQL Databases:
Once all servers have been patched we can patch the back end databases. This process assumes you have SQL Always On Availability Groups providing highly available backend database services to your Skype servers. The process varies slightly if you are not running Enterprise Edition or have SQL Mirroring installed. Please refer here for information on the process you should follow.
1. From any FE Server open an elevated PowerShell module and run the following cmdlets:
Stop-CsWindowsService
net stop w3svc
2. Ensure the Primary SQL Server is hosting all the backend SQL databases. Then run the following cmdlet. This cmdlet assumes that you also have Monitoring, Cdr and Archiving databases installed on the same SQL server. If not please refer here for further info. Below SQLAOAG.contoso.com represents the FQDN of your SQL Always ON Availability group.
Install-CsDatabase -Update -ConfiguredDatabases -SqlServerFqdn SQLAOAG.contoso.com.com -ExcludeCollocatedStores
3. To patch Monitoring, LCSCdr and Archiving databases use the following cmdlet
Install-CsDatabase -ConfiguredDatabases -SqlServerFqdn SQLAOAG.contoso.com.com -Verbose
4. To check that everything completed OK run the following cmdlet
Test-CsDatabase -ConfiguredDatabases -SqlServerFqdn SQLAOAG.contoso.com| Select-Object DatabaseName,Installed*,Expected*
a. Ensure the output shows Installed and Expected as the same
DatabaseName InstalledVersion ExpectedVersion
------------ ---------------- ---------------
rtcxds 15.13.10 15.13.10
rtcshared 5.0.1 5.0.1
rtcab 62.42.12 62.42.12
rgsconfig 5.5.1 5.5.1
rgsdyn 2.2.1 2.2.1
cpsdyn 1.1.2 1.1.2
LcsCDR 39.85.10 39.85.10
QoEMetrics 62.93.9 62.93.9
LcsLog 24.40.2 24.40.2
Comments