Move SharePoint 2013 Search Components to New Server

SharePoint Tips & TricksIn this post, I’ll detail how to move all SharePoint 2013 search components to a different server in the SharePoint farm. Unlike SharePoint 2010, there are no topology options in Central Administration so the entire operation must be performed in PowerShell.

Although that may stress some admins out, I’ve found that moving the topology via PowerShell in SharePoint 2013 works much better than moving it via the UI in SharePoint 2010. As you should assume, there is no PowerShell command like:

move-SPSearchTopology –components ALL –destination NewServer.

That’d be nice. And too easy. And honestly, it probably wouldn’t work anyway.

I’m going to assume you have a working Search Service in your (at least) two server SharePoint farm. I’m also going to assume you have rudimentary knowledge of using PowerShell with SharePoint.

Before performing any operation, your Search Administration topology section should look like this:

Search Administration topology

CLEAR THE SHAREPOINT CACHE ON ALL SHAREPOINT SERVERS

Although this isn’t necessary, performing this simple operation will avoid future potential headaches. Trust me.

CLONE THE EXISTING TOPOLOGY

The first real step is to clone the existing topology to move all the search components except for the Admin component. The Admin component must remain online to move all other components, so this particular component has to be moved separately.

You could choose to move the admin component first and then all others after it is moved. I prefer moving it last, because if there’s going to be an issue, I’d prefer it not to be with the admin component. Recovering from a failed move of the admin component can be a complete nightmare.

If it’s going to fail, fail on one of the other components. It’s much easier to troubleshoot.

Anyway, execute the following lines to clone the existing service:

$ssa = Get-SPEnterpriseSearchServiceApplication
$active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa –Active
$clone = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone –SearchTopology $active

START THE SEARCH SERVICE ON THE NEW SERVER

Before you can move the components, a search service must exist on the new server. Run the following (obviously, you need to replace the NewServerName):

$NewServer = Get-SPEnterpriseSearchServiceInstance -Identity “NewServerName“

Now that you have identified the new server, start the service on the server by:

Start-SPEnterpriseSearchServiceInstance -Identity $NewServer

The next step is where a lot of people get stuck. Now that the service has been started, they assume they are good to start creating the new components on the server (which is the next step). But before doing so, you must ensure the new search service is online on the new server.

Type this:

Get-SPEnterpriseSearchServiceInstance -Identity $NewServer

You should see something similar to the following in the console:

SharePoint Server Search Provisioning

If the Status says anything other than online, wait a few minutes and retry the command. Repeat until you see something like this:

SharePoint Server Search Online

Now the Status is online, we can continue.

CREATE NEW SEARCH COMPONENTS ON THE NEW SEARCH SERVER

Now you want to create all Search components except for the admin component. Use the following:

New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $clone -SearchServiceInstance $NewServer
New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $clone -SearchServiceInstance $NewServer
New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $clone -SearchServiceInstance $NewServer
New-SPEnterpriseSearchCrawlComponent -SearchTopology $clone -SearchServiceInstance $NewServer
New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -IndexPartition 0 -SearchServiceInstance $NewServer

There are options on the Index Component that you may be interested in researching. But those are really beyond the scope of the article. Look here for more information: https://technet.microsoft.com/en-us/library/jj219721.aspx.

For now though, let’s assume you’re happy with the parameters. To actually create the components, use this:

Set-SPEnterpriseSearchTopology -Identity $clone

And wait…

When it’s finally completed, your topology page should now look like this:

Revised Topology Page

REMOVE COMPONENTS FROM ORGINAL SEARCH SERVER

Now let’s remove components from the original server. First, close the topology again. Do this:

$ssa = Get-SPEnterpriseSearchServiceApplication
$active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active
$clone = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone –SearchTopology $active

Now you need to get the identity of the search components. Type this:

Get-SPEnterpriseSearchComponent -SearchTopology $clone

The console spits out all the search components in the farm. You’ll need to look through the output to find the values applicable to your SharePoint farm. Here’s a portion of what the console should look like:

SharePoint Search Components

You need the NAME of all components for the old Search Server. In my SharePoint farm, SP2013Demo101 is the old search server and SP2013Demo112 is the new search server. So, the CrawlCompont0 and QueryProcessingComponent1 are some of the names I need.

So now you’ll use the following to remove these components.

Obviously, you’ll want to change the identity for the Names of the components in your environment. Use the output from Get-SPEnterpriseSearchComponent to ensure you have a Remove-SPEnterpriseSearchComponent for all components on the old server, except for the admin component.

Be careful, the names are case sensitive!

Also, notice there is no admin component in the below list.

Remove-SPEnterpriseSearchComponent -Identity QueryProcessingComponent1 -SearchTopology $clone -confirm:$false
Remove-SPEnterpriseSearchComponent -Identity CrawlComponent0 -SearchTopology $clone -confirm:$false
Remove-SPEnterpriseSearchComponent -Identity IndexComponent1 -SearchTopology $clone -confirm:$false
Remove-SPEnterpriseSearchComponent -Identity AnalyticsProcessingComponent1 -SearchTopology $clone -confirm:$false
Remove-SPEnterpriseSearchComponent -Identity ContentProcessingComponent1 -SearchTopology $clone -confirm:$false

Set-SPEnterpriseSearchTopology -Identity $clone

You’ll have to wait for a while to let SharePoint do its thing.

When it’s done, your topology will look like this:

SharePoint Topology 3

Great! The only thing left is move the admin component. It’s pretty much identical to the other components, so I won’t go into great detail.

START AN ADMIN COMPONENT ON THE NEW SERVER

First, clone the topology:

$ssa = Get-SPEnterpriseSearchServiceApplication
$active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa –Active
$clone = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone –SearchTopology $active

Second, identify the destination server:

$NewServer = Get-SPEnterpriseSearchServiceInstance -Identity “NewServerName“

Start a new admin component on the new server.

New-SPEnterpriseSearchAdminComponent -SearchTopology $clone -SearchServiceInstance $NewServer
Set-SPEnterpriseSearchTopology -Identity $clone

Again, you wait.

When it’s done the topology will look like this:

SharePoint Topology 4

DELETE THE OLD ADMIN COMPONENT

Now you have to delete the old admin component. First, clone the topology:

$ssa = Get-SPEnterpriseSearchServiceApplication
$active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active
$clone = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone –SearchTopology $active

Remove the admin component. If you have to, run Get-SPEnterpriseSearchComponent to get the proper name of the admin component running on the old server.

Remove-SPEnterpriseSearchComponent -Identity AdminComponent1 -SearchTopology $clone -confirm:$false
Set-SPEnterpriseSearchTopology -Identity $clone

When this is done, your Topology will look like:

SharePoint Topology 5

Congratulations! All search components are now online on the new server.

2015-04-01T09:16:20+00:00 April 1st, 2015|

14 Comments

  1. Catalina June 23, 2015 at 3:29 pm - Reply

    Thanks! It works great!

  2. Johan July 7, 2015 at 1:32 pm - Reply

    Perfect! thanks.

  3. Carl Vermooten July 9, 2015 at 8:14 am - Reply

    Great post! Saved me so much time. Thanks!

  4. Lukasz Kokot August 3, 2015 at 1:23 pm - Reply

    Hi,

    Would it be bad if I left the Admin component on the original server or is it recommended to move all of the components to the new server?

    LK

  5. Joseph August 5, 2015 at 6:51 am - Reply

    Excellent, article…Thanks a lot for that.

  6. Aaron September 10, 2015 at 12:58 pm - Reply

    Excellent article – very well written.

    I used the steps described in the article and everything worked perfectly.

    Thank you for your help.
    Aaron

  7. patrick November 5, 2015 at 3:18 am - Reply

    Works great, many thanks…!

  8. Michelle Hines November 9, 2015 at 2:54 pm - Reply

    I’ve been trying to follow the directions, but I’m getting error on the second line of code –

    PS C:Usersspadmin> $ssa = Get-SPEnterpriseSearchServiceApplication
    PS C:Usersspadmin> $active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active

    Get-SPEnterpriseSearchTopology : Cannot convert ‘System.Object[]’ to the type ‘Microsoft.Office.Server.Search.Cmdlet.SearchServiceApplicationPipeBind’ required by parameter
    ‘SearchApplication’. Specified method is not supported.
    At line:1 char:61
    + $active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active
    + ~~~~
    + CategoryInfo : InvalidArgument: (:) [Get-SPEnterpriseSearchTopology], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.Office.Server.Search.Cmdlet.GetSearchTopology

  9. Demant January 17, 2016 at 6:57 pm - Reply

    We get error “Cannot convert ‘System.Object[]’ to the type ‘Microsoft.Office.Server.Search.Cmdlet.SearchServiceApplicationPipeBind’ required by parameter” coz we are running ssa’a so to resolve this we need to provide “-identity” parameter, see below
    $ssa = Get-SPEnterpriseSearchServiceApplication -Identity “Search Service Application”
    $ACTIVE = GET-SPENTERPRISESEARCHTOPOLOGY -SEARCHAPPLICATION $SSA -ACTIVE
    $CLONE = NEW-SPENTERPRISESEARCHTOPOLOGY -SEARCHAPPLICATION $SSA -CLONE –SEARCHTOPOLOGY $ACTIVE

    apart from this you might also get “Sequence contains no elements” error to resolve this first verify the actual component name, remember its case sensitive, so use the exact same name what you get for the component name by running Get-SPEnterpriseSearchComponent -SearchTopology $clone

  10. sk March 4, 2016 at 7:51 am - Reply

    Thankyou so much for your post, it worked like charm

  11. pavan March 17, 2016 at 10:58 pm - Reply

    Hi can we implement the same for sharepoint 2010?

  12. Mike May 27, 2016 at 11:58 am - Reply

    I try this and when I try the Set-SPEnterpriseSearchTopology -Identity $clone command I get “Topology activation failed. Could not connect to HostController on server…”

  13. Shaka Ponk June 16, 2016 at 9:00 am - Reply

    Perfect Bruh!!!

  14. Alfred Lam December 13, 2016 at 3:09 pm - Reply

    Worked perfectly, thank you so much!

Leave A Comment