AppFabric (Distributed Cache) Update – CU Installation
Der AppFabric bzw. Distributed Cache wird automatisch mit der SharePoint Installation mitinstalliert. Früher hieß es seitens Microsoft, dass dieser Dienst mit dem SharePoint mitgepatcht wird.
Mittlerweile hat sich die Empfehlung geändert: Der AppFabric bzw. der Distributed Cache Dienst muss vom Administrator per Hand aktualisiert werden.
In dieser Anleitung möchte ich zeigen, wie das AppFabric Update problemlos durchgeführt werden kann.
Ist-Zustand
SharePoint Umgebung
- SharePoint 2013 SP1 (On-Premises, 3 Tier Cluster)
- MS SQL-Server 2008 R2 Failover-Cluster
- AppFabric CU1 (RTM) – Product Version 1.0.4639.0
- Diestributed Cache Dienste laufen nur auf den WFEs der Farm.
- Backup: AvePoint DocAve 6 SP6
- Nintex Workflow 2013 & Nintex Forms 2013
- OWA / WAC
- Workflow-Manager
Voraussetzungen für das AppFabric Update
Für die Installation der Cumulativen Updates ist das .NET Framework mindestens in der Version 4.5 notwendig.
Vorarbeiten
Informationen sammeln
AppFabric-Version aus Systemsteuerung
In der Systemsteuerung unter „Programme und Features“ sieht man, dass AppFabric 1.1 für Windows Server installiert ist, aber nicht welches CU.
Die Version, die angezeigt wird (1.1.2106.32) bleibt auch nach der Installation der Cumulativen Updates an dieser Stelle bestehen.
AppFabric Product Version aus Registry
Der Reg-Key HKLM:\SOFTWARE\Microsoft\AppFabric\V1.0\ bestätigt die Version aus der Systemsteuerung.
PowerShell als Administrator öffnen und folgenden Befehl ausführen.
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\AppFabric\V1.0\ -Name ProductVersion | select ProductVersion
Ausgabe:
ProductVersion
----------------
1.1.2106.32
AppFabric Product Version aus der installierten DLL-Datei auslesen
Die aus der Systemsteuerung und aus der Registry entnommene Versionsnummern sind eher uninteressant.
Die Version der installierten Dateien verrät uns aber die im System bereits installierte AppFabric-Version.
Get-ItemProperty "C:\Program Files\AppFabric 1.1 für Windows Server\PowershellModules\DistributedCacheConfiguration\Microsoft.ApplicationServer.Caching.Configuration.dll" -Name VersionInfo).VersionInfo.ProductVersion
Wenn die Ausgabe beispielsweise die Nummer 1.0.4639.0 zeigt, dann ist auf dem Server AppFabric CU1 installiert.
Die Liste der AppFabric Versionen findet man in der Tabelle am Ende des Artikels.
KB-Nummer aus installierten Updates (Ordnern) auslesen
Im Ordner „Updates“ entsprechen alle Unterordner der installierten KB-Nummern
Get-ChildItem "C:\ProgramData\Microsoft\E-Business Servers Updates\Updates\" | Select Name
Ausgabe:
Name
—-
Uninstall2671763
Laut der Tabelle am Ende des Artikels entspricht die KB-Nummer dem CU1
Dienste überprüfen
SharePoint-Dienste AppFabricCachingService auflisten
Um die in der SharePoint-Farm laufende Distributed Cache Dienste aufzulisten, folgende Zeile in der PowerShell-Konsole ausführen.
Add-PSSnapin Microsoft.SharePoint.PowerShell
Get-SPServiceInstance | ? {($_.service.tostring()) -eq "SPDistributedCacheService Name=AppFabricCachingService"} | select Server, Status
Hinweis:
Man sollte sich die Server aus dieser Ausgabe merken, da auf diesen Servern später die Dienst-Instanzen wieder gestartet werden müssen. |
DistributedCache Cluster-Hosts auflisten
Diese Befehle machen nur auf den Servern Sinn, die sich im AppFabric-Cache-Cluster befinden. Auf den Servern, die sich nicht im Cache-Cluster befinden, gibt es in der Registry keine Cache-Cluster-Konfiguration. Deshalb wird folgende Fehlermeldung angezeigt:
Use-CacheCluster : ErrorCode<ERRPS001>:SubStatus<ES0001>:Fehler beim Lesen der Werte für Anbieter und erbindungszeichenfolge. Geben Sie die Werte manuell an.
# Gibt den Status eines oder aller Knoten im Cache-Cluster zurück.
Use-CacheCluster #Erst dann können die CMD-Lets benutzt werden.
Get-CacheHost
Voraussetzungen checken
Sicherstellen, dass .NET Framework mit mindesten Version 4.5 installiert ist.
Die „Version“ in dem unten stehenden Reg-Key sollte mindestens 4.5.xxxxx sein
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\" -Name Version | select Version
Backup
Backup der Server durchführen (z.B. VM-Snapshot o.Ä.).
CacheCluster Config Export (XML)
CacheCluster Konfiguration am besten immer vor der Durchführung der Änderungen am Distributed Cache exportieren.
Das Kommando ist nur auf den Servern möglich, wo die Dienstinstanz auch tatsächlich konfiguriert ist (hier WFEs), da normalerweise nur dort die Konfiguration vorhanden ist.
# Die Cache-Cluster-Konfiguration wird auf dem Desktop abgelegt
Export-CacheClusterConfig $home\desktop\$(Get-Date -Format 'yyyy-MM-dd_HH.mm.ss tt')_CacheClusterConfig.xml
CacheClusterConfig Export (Reg-Key)
# Registry exportieren
reg export HKLM\SOFTWARE\Microsoft\AppFabric $home\desktop\$(Get-Date -Format 'yyyy-MM-dd_HH.mm.ss tt')_AppFabric_Reg.reg
Server aus dem LB entfernen
Um die Benutzerzugriffe auf dem Installationsserver auszuschließen, sollte man den Server, auf dem gerade installiert wird, aus dem Load-Balancing entfernen.
Dienstinstanz stoppen und entfernen
Auf den Servern, die hier in der Ausgabe-Liste auftauchen, muss die Instanz, vor der eigentlichen Installation, gestoppt, und nach der Installation wieder gestartet werden.
# Server auflisten, auf welchen die Dienste gestoppt und entfernt werden müssen
Get-SPServiceInstance | ? {($_.service.tostring()) -eq "SPDistributedCacheService Name=AppFabricCachingService"} | select Server, Status
Bei uns laufen die Dienste nur auf den WFE, d.h. nur dort müssen wir die Instanzen auch stoppen.
Add-pssnapin Microsoft.SharePoint.PowerShell
# Bei uns nur auf den WFEs ausführen, sonst gibt es eine Fehlermeldung
# Nach dem Ausführen diese Befehls, einige Minuten warten!
Stop-SPDistributedCacheServiceInstance –Graceful
# Hat auf den App-Servern keine Ausgabe (muss nur auf den Servern ausgeführt werden, wo die Instanzen auch laufen, hier WFEs)
# Nach dem Ausführen diese Befehls, einige Minuten warten.
Remove-SPDistributedCacheServiceInstance
# Die Instanzen wieder checken # Auf unseren App-Servern keine Änderung, da dort keine Instanz läuft.
Get-SPServiceInstance | ? {($_.service.tostring()) -eq "SPDistributedCacheService Name=AppFabricCachingService"} | select Server, Status
Downlaod und Installation
Download des AppFabric Updates
Leider gibt es keine mit bekannte offizielle Webseite, die immer das aktuelle kumulative Update bereitstellen würde.
Die Suche nach den Begriffen Microsoft+AppFabric+Cumulative+Update+Download hilft weiter.
An dieser Stelle können alle CUs bis inkl. CU7 heruntergeladen werden.
Es gibt kumulative Updates für unterschiedliche Sprachen in den 64bit/32bit Versionen.
Hinweis: Die Sprachunterschiede scheinen nicht nur in dem Installationsassistenten, sondern auch in den installierten DLL-Dateien vorhanden zu sein.
In unserem Fall laden wir uns das
„Cumulative Update 7 (KB3092423) for Microsoft AppFabric 1.1 for Windows Server“
nur in der ENU 64bit Version herunter (auch wenn bei uns die deutsche SharePoint Version inkl. EN-Language-Pack installiert ist).
Installation des AppFabric Updates
In unserem Fall installieren wir CU7 von hier:
https://support.microsoft.com/en-my/kb/3092423
Wir installieren die Englische 64bit Version: AppFabric-KB3092423-x64-ENU.exe
Die Log-Datei findet man nach der Installation unter:
C:\ProgramData\Microsoft\E-Business Servers Updates\Updates\Uninstall<KB-Nummer>\Setup.log
Nach der Installation
Version checken
Version der installierten Dateien (DLL)
(Get-ItemProperty "C:\Program Files\AppFabric 1.1 für Windows Server\PowershellModules\DistributedCacheConfiguration\Microsoft.ApplicationServer.Caching.Configuration.dll" -Name VersionInfo).VersionInfo.ProductVersion
Die Ausgabe sollte z.B. für die CU7=1.0.4657.2 sein.
KB-Nummer der installierten Updates checken
# Im Ordner Updates entsprechen alle Unterordner der installierten KB-Nummern
Get-ChildItem "C:\ProgramData\Microsoft\E-Business Servers Updates\Updates\" | Select Name
Ausgabe (die letzte Zeile ist entscheidend, da sie die KB-Nummer des zuletzt installierten kumulativen Updates zeigt):
Name
----
Uninstall2671763
Uninstall3092423
Details zu den KB-Nummern siehe Ende des Artikels.
Background Garbage collection fix
Ab inkl. CU3 kann man folgenden Background Garbage collection fix anwenden.
Config-File im z.B. notepad als Admin aufrufen (vorher evtl. die Datei kopieren/sichern)
C:\%ProgramFiles%\AppFabric 1.1 für Windows Server\DistributedCacheService.exe.config
Zwischen den Zeilen „</configSections>
“ und <dataCacheConfig
muss folgender Inhalt eingefügt werden:
<appSettings>
<add key="backgroundGC" value="true"/>
</appSettings>
Beispiel
Alt
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- Microsoft.ApplicationServer.Caching.Core assembly name is hard-coded --> <section name="dataCacheConfig" type="Microsoft.ApplicationServer.Caching.DataCacheConfigSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <section name="fabric" type="Microsoft.Fabric.Common.ConfigFile, Microsoft.WindowsFabric.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowLocation="true" allowDefinition="Everywhere" /> <section name="dataCache" type="Microsoft.ApplicationServer.Caching.DataCacheSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <dataCacheConfig cacheHostName="AppFabricCachingService"> <log location="C:\ProgramData\Microsoft\AppFabric\Runtime" logLevel="-1" /> <clusterConfig provider="SPDistributedCacheClusterProvider" connectionString="Data Source=SpFarm_Dev;Initial Catalog=SharePoint_Config;Integrated Security=True;Enlist=False" /> </dataCacheConfig> <fabric> . . .
Neu
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- Microsoft.ApplicationServer.Caching.Core assembly name is hard-coded --> <section name="dataCacheConfig" type="Microsoft.ApplicationServer.Caching.DataCacheConfigSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <section name="fabric" type="Microsoft.Fabric.Common.ConfigFile, Microsoft.WindowsFabric.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowLocation="true" allowDefinition="Everywhere" /> <section name="dataCache" type="Microsoft.ApplicationServer.Caching.DataCacheSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <appSettings> <add key="backgroundGC" value="true"/> </appSettings> <dataCacheConfig cacheHostName="AppFabricCachingService"> <log location="C:\ProgramData\Microsoft\AppFabric\Runtime" logLevel="-1" /> <clusterConfig provider="SPDistributedCacheClusterProvider" connectionString="Data Source=SpFarm_Dev;Initial Catalog=SharePoint_Config;Integrated Security=True;Enlist=False" /> </dataCacheConfig> <fabric> . . .
IIS Reset
IIS-Reset ausführen:
iisreset /noforce
Falls der Dienst nicht rechtzeitig gestartet werden kann, wird evtl. folgende Fehlermeldung angezeigt:
Fehler beim Versuch, den Dienst neu zu starten.
Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung. (2147943453, 8007041d)
In diesem Fall sind die Sites im IIS-Manager wahrscheinlich gestoppt.
Einfach den IIS-Manager aufrufen,
den Server auf der linken Seite markieren und starten.
DistributedCache Dienst Instanz starten
# Nur auf den Servern ausführen, auf denen vorher die Instanz auch lief (hier WFEs)
Add-pssnapin Microsoft.SharePoint.PowerShell
Add-SPDistributedCacheServiceInstance
Instanzen checken
ServiceInstance checken
Checken, ob die Server (hier WFEs) aufgelistet sind und Status „Online“ haben.
Get-SPServiceInstance | ? {($_.service.tostring()) -eq "SPDistributedCacheService Name=AppFabricCachingService"} | select Server, Status
Cache Hosts Checken
Service Status sollte „UP“ sein
Use-CacheCluster
Get-CacheHost
Falls alle Server der Farm durch und in der Auflistung doch nicht alle ursprünglich vorhandene Instanzen vorhanden sind, dann auf dem fehlenden Server noch einmal Stop…, Remove…, Add… durchführen (s.u.).
Add-pssnapin Microsoft.SharePoint.PowerShell
# Nach dem Ausführen diese Befehls, einige Minuten warten!
Stop-SPDistributedCacheServiceInstance –Graceful
# Hat auf den App-Servern keine Ausgabe (muss nur auf den Servern ausgeführt werden, wo die Instanzen auch laufen, hier WFEs)
# Nach dem Ausführen diese Befehls, einige Minuten warten.
Remove-SPDistributedCacheServiceInstance
# Nur auf den Servern ausführen, auf denen vorher die Instanz auch lief (hier WFEs)
Add-SPDistributedCacheServiceInstance
Server wieder in den LB aufnehmen
Damit der Server die Benutzeranfragen annehmen kann, diesen wieder in den LoadBalancing aufnehmen.
AppFabric Update auf übrigen SharePoint-Servern installieren
Man sollte alle Server, auf welchen SharePoint installiert ist, patchen. Auch die, wo die Dienstinstanz nicht läuft, da AppFabric standardmäßig mit dem SharePoint installiert wird. Auf den SharePoint-Servern auf welchen der Dienst nicht läuft, braucht man das Stoppen/Starten der Dienste nicht ausführen, sondern muss nur den Patch installieren.
AppFabric (Distributed Cache) CU Liste
CU Level | Product Version | KB | Published |
CU1 (RTM) | 1.0.4639.0 | KB2671763 | 27.03.2012 |
CU2 | 1.0.4644.0 | KB2716015 | 23.10.2012 |
CU3 | 1.0.4652.2 | KB2787717 | 14.12.2012 |
CU4 | 1.0.4653.2 | KB2800726 | 11.04.2013 |
CU5 | 1.0.4655.2 | KB2932678 | 28.04.2015 |
CU6 | 1.0.4656.2 | KB3042099 | 01.05.2015 |
CU7 | 1.0.4657.2 | KB3092423 | 10.11.2015 |
Fehler und Lösungen
iisreset: Fehler beim Versuch, den Dienst neu zu starten.
Fehler beim Versuch, den Dienst neu zu starten.
Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung. (2147943453, 8007041d)
Lösung
In diesem Fall sind die Sites im IIS-Manager wahrscheinlich gestoppt.
Einfach den IIS-Manager aufrufen,
den Server auf der linken Seite markieren und starten.
Stop-SPDistributedCacheServiceInstance : cacheServiceInstance not found
Stop-SPDistributedCacheServiceInstance : cacheServiceInstance not found.
In Zeile:1 Zeichen:1
+ Stop-SPDistributedCacheServiceInstance -Graceful
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Share...lyOnLocalServer:SPCmdletStopDis...lyOnLocalServer) [Stop-SPDistributedCacheServiceI
nstance], InvalidOperationException
+ FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletStopDistributedCacheServiceInstanceGracefullyOnLocalServer
Lösung
Auf diesem Server läuft keine Instanz (da wahrscheinlich kein WFE).
Use-CacheCluster : ErrorCode<ERRPS001>:SubStatus<ES0001>:Fehler beim Lesen der Werte für Anbieter und Verbindungszeichenfolge. Geben Sie die Werte manuell an
Use-CacheCluster : ErrorCode<ERRPS001>:SubStatus<ES0001>:Error in reading provider and connection string values.
Bzw.:
Use-CacheCluster : ErrorCode<ERRPS001>:SubStatus<ES0001>:Fehler beim Lesen der Werte für Anbieter und Verbindungszeichenfolge. Geben Sie die Werte
manuell an.
In Zeile:1 Zeichen:1
+ Use-CacheCluster
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Connect-AFCacheClusterConfiguration], DataCacheException
+ FullyQualifiedErrorId : ERRPS001,Microsoft.ApplicationServer.Caching.Commands.ConnectAFCacheClusterConfigurationCommand
Lösung
Auf diesem Server fehlen die Werte der Verbindungskonfiguration in der Registry.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration
Nach dem Aufnehmen des Servers in den DistributedCache-Cluster sollte normalerweise die Konfiguration des Cache-Clusters aus der Datenbank in die Registry des Servers geschrieben werden.
Es wäre theoretisch möglich, eine Reg-Datei von einem funktionierenden Server zu exportieren oder die .reg Datei selbst erstellen und auf dem Problemserver zu importieren. Davon rate ich aber dringend ab!
Beispiel einer Reg-Datei:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration]
"AdminConfigured"=dword:00000001
"ServiceConfigured"=dword:00000001
"ConnectionString"="Data Source=DB_Server;Initial Catalog=Config_DB;Integrated Security=True;Enlist=False"
"Provider"="SPDistributedCacheClusterProvider"
Links
- jeremytaylor.net: How to patch SharePoint Distributed Cache the proper way
- wictorwilen.se: How to check the version of AppFabric 1.1 aka the Distributed Cache
- wictorwilen.se: How to patch the Distributed Cache in SharePoint 2013
- msdn.microsoft.com: Upgrade Procedure for an AppFabric Cache Cluster (AppFabric 1.1)
- support.microsoft.com: Cumulative Update 7 for Microsoft AppFabric 1.1 for Windows Server
- www.microsoft.com: Cumulative Update 7 (KB3092423) for Microsoft AppFabric 1.1 for Windows Server
- toddklindt.com: AppFabric (Distributed Cache) Can Be Patched on its own in SharePoint 2013
- blogs.msdn.microsoft.com: SharePoint 2013 + Distributed Cache (AppFabric) Troubleshooting