J’installe en ce moment chez l’un de nos clients les environnements SharePoint 2013 pour leur futur portail groupe. Leur ferme de production comporte une dizaine de serveurs SharePoint dont 4 sont exclusivement dédiés à la recherche.

La topologie est la suivante :

  • 2 serveurs de “Query” dédiés hébergent les composants de traitement des query ainsi que les partitions d’index.
  • 2 serveurs de “Crawl” hébergent les composants d’administration, de crawl, de content processing et d’analytics.

L’installation devant être répétée sur au moins 4 environnements SharePoint 2013 différents, j’ai commencé par écrire un script PowerShell “configuresearch.ps1” qui se charge :

  • de créer l’application de service, son proxy et les pools d’applications SharePoint pour les services,
  • de démarrer les instances des services adéquates sur serveurs de Query et Crawl,
  • de créer et définir les répertoires pour les caches d’index,
  • de créer les différents composants de recherche (index, crawl, content processing…) sur les bons serveurs dans une nouvelle topologie,
  • d’activer la nouvelle topologie et de supprimer la topologie créer par défaut.

Tout se passe correctement au lancement du script jusqu’à l’activation  de la topologie où se produit l’erreur “échec d’activation de la topologie de recherche” :

01/28/2014 09:47:44.79                PowerShell.exe (0x0F0C)                            0x0A68 SharePoint Server Search           Administration                                aetke    Medium              Could not find or connect to hostcontroller on server SERVER. Exception: Could not connect to net.tcp://SERVER/ceres/hostcontroller/nettcp. The connection attempt lasted for a time span of 00:00:22.0549399. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.31.10.145:808.

En y regardant de plus près, le serveur tente de se connecter aux autres serveurs de recherche sur le port 808. Après un petit coup de telnet vers chaque serveur de recherche le constat est que le port est ouvert pour certains et pas pour d’autres… Etrange pour des serveurs configurés (à priori) identiquement.

Un coup d’oeil au firewall sur les différents serveurs donne le résultat suivant :

Serveur OK

Firewall KO

Serveur KO

firewall3

On constate que les serveurs OK proposent une unique règle sur le port 808 activée pour le framework v3… alors que les serveurs KO proposent 2 règles dont une est désactivée… celle pour WCF pour le framework v4 utilisé par SharePoint justement !

Résolution du problème

J’ignore encore à quelle étape du process d’installation est créée la 2ème règle et pourquoi elle l’est uniquement sur certains serveurs (les masters de départ sont identiques ainsi que l’installation) mais SharePoint 2013 nécessite que le port 808 soit ouvert pour WCF du framework V4. La solution est donc d’activer cette règle.

Sur chaque serveur de recherche, exécuter la commande suivante :

​netsh advfirewall firewall set rule group="Windows Communication Foundation" new enable=yes

Sous Windows Server 2012, vous pouvez également utiliser PowerShell :

​Enable-NetFirewallRule -DisplayGroup "Windows Communication Foundation" -Verbose