In SharePoint 2013 hatten wir ja das Vergnügen, ein GUI für die Verwaltung der Search Topologie zu haben. Diese Zeiten sind endgültig vorbei. Des einen Leid, des anderen Freud. Neu muss die Topologie der Suche per PowerShell verwaltet werden. Wie man das macht, entnehmt ihr dem unten folgenden Code.
Grundsätzlich unterscheiden wir folgende Rollen, welche auf verschiedenen Servern redundant aufgebaut werden können:
- Crawl Komponente
- Content Processing Komponente
- Analytics Komponente
- Index Komponente (schreibt den Index)
- Query Processing Komponente
- Admin Komponente
Im Beispiel wird die Suche auf zwei Frontends verteilt, auf welcher die Query Rolle läuft und auf zwei Application Server, die alle anderen Rollen redundant verpasst bekommen, zusätzlich soll die Indexpartition 0 auf beide Server gespiegelt werden.
Und hier kommt der Code:
# Abfragen des SharePoint 2013 Search Status Get-SPEnterpriseSearchStatus -SearchApplication (Get-SPEnterpriseSearchServiceApplication) # Definieren der Server $wfe1 = Get-SPEnterpriseSearchServiceInstance -Identity "yourserver" $wfe2 = Get-SPEnterpriseSearchServiceInstance -Identity "yourserver" $app1 = Get-SPEnterpriseSearchServiceInstance -Identity "yourserver" $app2 = Get-SPEnterpriseSearchServiceInstance -Identity "yourserver" # Starten der Service Instanzen auf allen Servern Start-SPEnterpriseSearchServiceInstance -Identity $wfe1 Start-SPEnterpriseSearchServiceInstance -Identity $wfe2 Start-SPEnterpriseSearchServiceInstance -Identity $app1 Start-SPEnterpriseSearchServiceInstance -Identity $app2 # Checken ob die Services alle online sind, bevor wir weiter machen do { $globalState = 0 $wfe1Stat = Get-SPEnterpriseSearchServiceInstance -Identity $wfe1 if ($wfe1Stat.status = "online") {$globalState++} $wfe2Stat= Get-SPEnterpriseSearchServiceInstance -Identity $wfe2 if ($wfe2Stat.status = "online") {$globalState++} $app1Stat = Get-SPEnterpriseSearchServiceInstance -Identity $app1 if ($app1Stat.status = "online") {$globalState++} $app2Stat = Get-SPEnterpriseSearchServiceInstance -Identity $app2 if ($app2Stat.status = "online") {$globalState++} Write-Host "There are $globalState Machines ready" if ($globalState -lt 4) { Write-Host "Waiting for 10 seconds..." Start-Sleep -s 10 } } while ($globalState -lt 4) # Search Service Applikatioin festlegen $ssa = Get-SPEnterpriseSearchServiceApplication $newTopology = New-SPEnterpriseSearchTopology -SearchApplication $ssa # Frontend Rollen festlegen New-SPEnterpriseSearchCrawlComponent -SearchTopology $newTopology -SearchServiceInstance $wfe1 New-SPEnterpriseSearchCrawlComponent -SearchTopology $newTopology -SearchServiceInstance $wfe2 # App Server Rollen festlegen New-SPEnterpriseSearchAdminComponent -SearchTopology $newTopology -SearchServiceInstance $app1 New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $app1 New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $app1 New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $app1 New-SPEnterpriseSearchIndexComponent -SearchTopology $newTopology -SearchServiceInstance $app1 -IndexPartition 0 New-SPEnterpriseSearchAdminComponent -SearchTopology $newTopology -SearchServiceInstance $app2 New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $app2 New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $app2 New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $app2 New-SPEnterpriseSearchIndexComponent -SearchTopology $newTopology -SearchServiceInstance $app2 -IndexPartition 0 # Search Topologie aktivieren Set-SPEnterpriseSearchTopology -Identity $newTopology
Achtung: Eine Neudefinition der Topologie funktioniert nur mit leerem Index. Heisst, ggf. müsst ihr zuerst den Indes zurücksetzen oder ein anderes Vorgehen wählen.
So long, Gruss Samuel