Gestion du cache distribué dans SharePoint 2013

La gestion du cache distribué compte parmi l’un des points les plus laborieux de l’administration SharePoint 2013. Premièrement il est géré par AppFabric et non SharePoint. Deuxièmement il est administrable uniquement par PowerShell. Troisièmement s’il manque de mémoire, plusieurs services de la ferme fonctionneront de manière erratique, voire pas du tout.

Je me permets ces commentaires car il m’a donné du fil à retordre lors de l’installation et configuration des fermes. Et dernièrement, on s’est retrouvé 2 fois de suite avec un newsfeed vide au petit matin en production. D’ailleurs l’avertissement sur la technet est explicite :

Le service de cache distribué peut se retrouver dans un état inopérationnel ou irrécupérable si vous ne suivez pas les procédures répertoriées dans cet article. Dans des situations extrêmes, vous pourriez avoir à recréer la batterie de serveurs. Le cache distribué dépend du prérequis Windows Server AppFabric. N’administrez pas le Service de mise en cache AppFabric depuis la fenêtre Services des Outils d’administration du Panneau de configuration. N’utilisez pas les applications dans le dossier nommé AppFabric pour Windows Server dans le menu Démarrer.

ou encore :

L’arrêt du cache engendre une perte de données partielle. Le cache de flux dépend du service de cache distribué. Les balises et les activités de document sont enregistrées uniquement dans le cache de flux ; elles ne sont pas persistantes dans les bases de données de contenu. Lorsque le service de cache distribué est arrêté, les balises et les activités de document sont perdues. […] Une manière de conserver les balises et les activités de document consiste à utiliser la méthode décrite dans la section Effectuer un arrêt approprié du service de cache distribué plus loin dans cet article. Lorsque la méthode de l’arrêt approprié du service de cache distribué est utilisée, toutes les données du cache sont déplacées d’un serveur vers un autre avant l’arrêt du service de cache distribué.

La cache distribué peut être hébergé soit sur un seul serveur soit sur un cluster de cache et l’administration sera différente dans les deux cas.

Un seul hôte

Démarrer

$instanceName ="SPDistributedCacheService Name=AppFabricCachingService"
$serviceInstance = Get-SPServiceInstance | ? {($_.service.tostring()) -eq $instanceName -and ($_.server.name) -eq $env:computername}
$serviceInstance.Provision()

Arréter

$instanceName ="SPDistributedCacheService Name=AppFabricCachingService"
$serviceInstance = Get-SPServiceInstance | ? {($_.service.tostring()) -eq $instanceName -and ($_.server.name) -eq $env:computername}
$serviceInstance.Unprovision()

Cluster de cache

Dans une batterie de serveurs SharePoint Server 2013, il existe un seul cache qui lequel s’étend sur tout le cluster de cache. Pour supprimer un hôte du cluster de cache, il fait l’arrêter proprement ce qui permet de transférer ses données dans les autres hôtes du cluster.

Dixit la technet L’exécution du processus de transfert nécessite au moins 15 minutes selon le nombre d’éléments existant dans le cache.

Ajouter un serveur au cluster de cache et démarrer le service de cache distribué à l’aide de Windows PowerShell

Add-SPDistributedCacheServiceInstance

Supprimer un serveur du cluster de cache à l’aide de Windows PowerShell.

Le Stop[…] –Graceful est nécessaire pour éviter de perdre des données lors de l’arret.

Stop-SPDistributedCacheServiceInstance -Graceful
Remove-SPDistributedCacheServiceInstance

Réparer le cache

Généralement on se sert de ces commandes quand rien d’autres ne fonctionne ou que l’on a l’erreur suivante : cacheHostInfo is null. Concrètement cela consiste à le supprimer puis le recréer.

$instance = "SPDistributedCacheService Name=AppFabricCachingService"
$service = Get-SPServiceInstance |?{($_.service.tostring()) -eq $instancename -and ($_.server.name) -eq $env:COMPUTERNAME}
$service.delete()
Add-SPDistributedCacheServiceInstance

Gestion de la mémoire

Par défaut 10% de la mémoire de la machine mais en cas de modification de la mémoire il faut réallouer à la main avec la règle suivante :

Mémoire pour la cache distribué = min(16Go, (mémoire du serveur – 2Go)/2)

Important : quand l’environnement est virtualisé, il faut que l’allocation de mémoire pour les serveurs hébergeant le cache distribué soit fixe. Par conséquent il faut éviter l’option Dynamic Memory.

Planification du cache distribué

Les commandes PowerShell

Configuration des hôtes

Firewall Windows, autoriser les services/applications suivant(e)s :

  • AppFabric Caching Service (TCP-In)
  • File and Printer Sharing (pour le ping)

/wp-content/uploads/2014/06/appdistributedcachefirewall.jpg

Vérifier les connexions réseau des serveurs:

  • Connection > properties > Internet Protocol Version 4 (TCP/IPv4)
  • Vérifier que tous les serveurs utilisent les même DNS primaire et secondaire

 Références

Gérer le service de cache distribué dans SharePoint Server 2013

Pour aller plus loin

Beside the Point – AppFabric Caching and SharePoint: Concepts and Examples (Part 1)

Beside the Point – AppFabric Caching (and SharePoint): Configuration and Deployment (Part 2)

Samuel Betts – Troobleshooting