AppFabric Update – Anleitung

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

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.

Systemsteuerung - Programme und Features - AppFabric 1.1 für Windows Server - 1.1.2106.32

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.
PowerShell - Icon - Symbol

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

Get-SPServiceInstance - SPDistributedCacheService - AppFabricCachingService - Server Status online - SharePoint 2013

 

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

Get-CacheHost - AppFabricCachingService - Service Status UP - SharePoint 2013

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

.NET Framework Version 4.6 - PowerShell - Get-ItemProperty - HKLM-SOFTWARE-Microsoft-NET Framework Setup-NDP-v4-Full

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.

AppFabric Update - DistributedCache - Configuration.dll - Version Info

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

AppFabric Update - DistributedCache - E-Business Servers Updates - KB-Nummer - Version

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>
. . .

AppFabric Update - DistributedCacheService.exe.config - neu - Background Garbage collection fix

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,
Information Services (IIS) Manager - Internetinformationsdienste (IIS)-Manager - Icon
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,
Information Services (IIS) Manager - Internetinformationsdienste (IIS)-Manager - Icon
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

  1. jeremytaylor.net: How to patch SharePoint Distributed Cache the proper way
  2. wictorwilen.se: How to check the version of AppFabric 1.1 aka the Distributed Cache
  3. wictorwilen.se: How to patch the Distributed Cache in SharePoint 2013
  4. msdn.microsoft.com: Upgrade Procedure for an AppFabric Cache Cluster (AppFabric 1.1)
  5. support.microsoft.com: Cumulative Update 7 for Microsoft AppFabric 1.1 for Windows Server
  6. www.microsoft.com: Cumulative Update 7 (KB3092423) for Microsoft AppFabric 1.1 for Windows Server
  7. toddklindt.com: AppFabric (Distributed Cache) Can Be Patched on its own in SharePoint 2013
  8. blogs.msdn.microsoft.com: SharePoint 2013 + Distributed Cache (AppFabric) Troubleshooting

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert