Como ustedes deben recordar en SharePoint 2010 usted podía utilizar la interfaz gráfica para crear o  re configurar su topología de Búsqueda empresarial, utilizando la administración de la aplicación de servicio de Búsqueda.  En dicha interfaz gráfica usted puede crear, editar o remover cualquiera de los siguientes componentes:

  • Componente de Administración
  • Componente de Rastreo (Crawl)
  • Bases de datos de rastreo
  • Componente de Consultas (Query)
  • Particiones del índice.

Y era muy fácil para los administradores utilizar cualquiera de los servidores de la graja y de esta forma configurar la mejor topología de Búsqueda empresarial basados en sus requerimientos de negocio.

Una de las cosas que las personas más me comentan es que utilizar la interfaz gráfica para configurar la topología es realmente fácil, pero si uno comete algún error configurando algún parámetro o tiene algún otro problema en la granja, y al finalizar de configurar la topología empresarial de Búsqueda, y hacer clic en el botón de aplicar los cambios, luego de un buen rato aparece un error y las mayoría de los cambios realizados no se mantienen.

El anterior problema es una buena razón para configurar su topología empresarial de Búsqueda con Power Shell, porque usted tiene toda la flexibilidad de crear y re configurar los componentes,  y esto puede ayudar a identificar problemas en su granja o topología antes de que finalice de configurar en su totalidad esta.

También es importante mencionar que algunos administradores de SharePoint le temen administrar SharePoint con Power Shell, por qué piensas que están pasándose al lado de desarrollo y ellos solo quieren ser profesionales de infraestructura.  Pero lo que deben saber es que Microsoft está invirtiendo en utilizar Power Shell en la mayoría de sus productos con el fin de ofrecer una sola forma de administrarlos a todos y facilitar y flexibilizar las tareas de infraestructura.  Yo espero que este blog ayude a aquellos administradores a quitarse ese concepto de la mente.

Es de saber para las personas que ya están trabajando con SharePoint 2013, que la única vía para configurar la topología de búsqueda es atreves de Power Shell y sus cmdlets disponibles para crear los nuevo y poderosos componentes del nuevo servicio empresarial de Búsqueda de SharePoint 2013.

El propósito de esta entrada de blog es mostrar algunos ejemplos de cómo crear una topología de Búsqueda empresarial en SharePoint 2013, obviamente utilizando Power Shell, pero no solo mencionando que cmdlets utilizar, sino también como podrían automatizar esta labor y así poder repetir estos pasos las veces que sean necesarias y utilizarlos en otras implementaciones de SharePoint 2013, y adicionalmente ayudar a los administradores de SharePoint a perder ese miedo en utilizar Power Shell para administrar SharePoint.

Todos los cmdlets utilizados en esta entrada de blog están basados en el siguiente documento de TechNet:

Manage search components in SharePoint Server 2013

http://technet.microsoft.com/en-us/library/jj862354.aspx

Si usted no ha leído el anterior documento, yo recomiendo que lo haga o lo tome como referencia para la lectura de esta entrada.

A continuación voy a resumir los pasos para crea una nueva topología de Búsqueda en SharePoint 2013, y los cuales son mencionados en el anterior documento:

  1. Iniciar la instancia de servicio de búsqueda: Recuerde que si quiere habilitar un servidor para que sea utilizado en la topología de Búsqueda debe antes iniciar el servicio de búsqueda en dicho servidor.
  2. Obtener la referencia de la topología de búsqueda activa: Existen 2 opciones, la primera es crear una topología de búsqueda vacía, o la segunda es clonar la actual topología de búsqueda y modificarla, en este caso vamos a asumir que vamos a utilizar la actual topología para modificarla.
  3. Clonar la topología de búsqueda activa: Como se mencionó anteriormente vamos a clonar la topología para después modificarla.
  4. Adicionar o remover componentes de búsqueda: Cuando clonamos la topología podemos modificarla adicionándole o removiéndole componentes de tal forma que creemos la nueva deseada.
  5. Activar la nueva topología de búsqueda: Finalmente después de terminar de modificar la topología debemos definir esta como activa.

Como se puede ver existen varios pasos a realizar y por lo tanto varios comandos de Power Shell deben ser ejecutados, por esta razón he creado las siguientes funciones que nos permitirán facilitar la creación de la topología de búsqueda.

 

GetOrStartSearchServiceInstance

La siguiente función permite identificar si un servidor tiene el servicio de búsqueda indicado, si no es así lo inicia.

function GetOrStartSearchServiceInstance($Server)

{

    $startInstance = $false

    $serverIns = Get-SPEnterpriseSearchServiceInstance -Identity $Server

    if($serverIns -ne $null)

    {

        if($serverIns.Status -ne "Online")

        {

            $startInstance = $true

        }

    }

    else

    {

        $startInstance = $true

    }

    if($startInstance)

    {

        $serverIns = Start-SPEnterpriseSearchServiceInstance -Identity $serverIns

    }

    return $serverIns

}

 

En este caso la forma de llamar esta función será:

GetOrStartSearchServiceInstance -Server “<server name>”

 

Como pudo ver en el documento de TechNet, para adicionar y remover un componente de búsqueda se utilizan los siguientes cmdlets:

  • Remove-SPEnterpriseSearchComponent: Remueve un componente especifico de la topología de búsqueda.
  • New-SPEnterpriseSearch<SearchComponent>Component: Donde <SerachComponente> puede ser Admin, AnalyticsProcessing, ContentProcessing, Crawl and QueryProcessing.  Y sirven para crear un componente de la topología de búsqueda.

En el caso de New-SPEnterpriseSearch<SearchComponent>Component, si usted entra en detalle a ver que parámetros acepta, es posible para todos los cmdlets proveer 2 parámetros básicos los cuales son la topología y la instancia de servicio (es decir el servidor), es por esto que he creado la siguiente función la cual permite crear cualquiera de los componentes anteriormente mencionados en la cantidad de servidores necesarios.

 

Set-SPSearchComponents

Esta función necesita los siguientes parámetros:

  • ServerType: Es una cadena de caracteres que define el tipo de componente a crear, el cual puede ser: Admin, AnalyticsProcessing, ContentProcessing, Crawl or QueryProcessing.
  • ServersStringArray: Es una cadena de caracteres que contenga el nombre de los servidores donde se desea habilitar el tipo de componente de búsqueda, estos deben estar separados por coma.
  • Topology: Debe ser una variable de referencia a la topología de búsqueda que se quiera modificar.

 

function Set-SPSearchComponents($ServerType, $ServersStringArray, $Topology)

{

    #Check if is a valid type of search component

    $validTypes = ("Admin", "AnalyticsProcessing", "ContentProcessing", "Crawl", "QueryProcessing")

    if($validTypes.Contains($ServerType) -ne $true)

    {

        throw "ServerType is not valid."

    }

    #Check server by server is need to Remove or Add

    $ServerType += "Component"

    $currentServers = Get-SPEnterpriseSearchComponent -SearchTopology $Topology | ?{$_.GetType().Name -eq $ServerType}

    #Remove components

    foreach($component in $currentServers)

    {       

        Remove-SPEnterpriseSearchComponent -Identity $component -SearchTopology $Topology #-Confirm $true    

    }

    #Add Components

    foreach($server in $ServersStringArray.Split(","))

    {

        #Check in search service instance is started, otherwise start it

        $serIns = GetOrStartSearchServiceInstance -Server $server       

        switch($ServerType)

        {

            "AdminComponent" {New-SPEnterpriseSearchAdminComponent -SearchTopology $newTop -SearchServiceInstance $serIns}

            "AnalyticsProcessingComponent" {New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $newTop -SearchServiceInstance $serIns}

            "ContentProcessingComponent" {New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $newTop -SearchServiceInstance $serIns}

            "CrawlComponent" {New-SPEnterpriseSearchCrawlComponent -SearchTopology $newTop -SearchServiceInstance $serIns}

            "QueryProcessingComponent" {New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $newTop -SearchServiceInstance $serIns}

        }

    }

    #Show in the output the search components of the topology to see the modificatios made on.

    Get-SPEnterpriseSearchComponent -SearchTopology $Topology

}

 

Un ejemplo para invocar esta función podria ser el siguiente:

Set-SPSearchComponents -ServerType "AnalyticsProcessing" -ServersStringArray “server1,server3” -Topology $newTop

 

Finalmente para dar un gran ejemplo de cómo crear totalmente una topología empresarial de Búsqueda en SharePoint 2013, he creado la siguiente función, la cual hace uso de las anteriores.

 

New-SPSearchTopology

Para usar esta función se deben proveer los siguientes parámetros:

  • AdminServers: Los servidores que desea utilizar que provean el componente de Admin.  Estos servidores deben estar en una cadena de caracteres separados por coma: “server1,server2,server3”.
  • AnalyticsServers: Los servidores que desea utilizar que provean el componente de AnalyticsServers.  Estos servidores deben estar en una cadena de caracteres separados por coma: “server1,server2,server3”.
  • ContentServers: Los servidores que desea utilizar que provean el componente de ContentServers.  Estos servidores deben estar en una cadena de caracteres separados por coma: “server1,server2,server3”.
  • CrawlServers: Los servidores que desea utilizar que provean el componente de CrawlServers.  Estos servidores deben estar en una cadena de caracteres separados por coma: “server1,server2,server3”.
  • QueryServers: Los servidores que desea utilizar que provean el componente de QueryServers.  Estos servidores deben estar en una cadena de caracteres separados por coma: “server1,server2,server3”.

 

function New-SPSearchTopology($AdminServers, $AnalyticsServers, $ContentServers, $CrawlServers, $QueryServers)

{

    $servers = $AdminServers + "," + $AnalyticsServers + "," + $ContentServers + "," + $CrawlServers + "," + $QueryServers

    #Check the existence of the servers

    foreach($server in $servers.Split(","))

    {

        Get-SPServer $server -ErrorAction Stop

    }

    #Initialize variables

    $ssa = Get-SPEnterpriseSearchServiceApplication

    #Clone search topology

    $activeTop = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active

    $newTop = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone –SearchTopology $activeTop

    #Admin component

    Set-SPSearchComponents -ServerType "Admin" -ServersStringArray $AdminServers -Topology $newTop

    #Analytics servers

    Set-SPSearchComponents -ServerType "AnalyticsProcessing" -ServersStringArray $AnalyticsServers -Topology $newTop

    #Content

    Set-SPSearchComponents -ServerType "ContentProcessing" -ServersStringArray $AnalyticsServers -Topology $newTop

    #Crawl

    Set-SPSearchComponents -ServerType "Crawl" -ServersStringArray $AnalyticsServers -Topology $newTop

    #Query

    Set-SPSearchComponents -ServerType "QueryProcessing" -ServersStringArray $AnalyticsServers -Topology $newTop

    #Active Topology

    Set-SPEnterpriseSearchTopology -Identity $newTop

}

 

Un ejemplo para invocar esta función podria ser el siguiente:

New-SPSearchTopology –AdminServers “server1,server2” –AnalyticsServers “server1,server3” –ContentServers “server2,server4” –CrawlServers “server5,server6” –QueryServers “server7,server8,server9”

 

Espero que esta entrada haya sido de ayuda para crear su nueva topología empresarial de Búsqueda en SharePoint 2013, y recuerde que no todas las consideraciones acerca del servicio empresarial de Búsqueda de SharePoint 2013 han sido tomadas en cuenta en este artículo, en el futuro espero escribirles acerca de:

  • Como detener el servicio de búsqueda en los servidores no requeridos.
  • Mover la ubicación de los archivos de índice.
  • Particiones del índice.
  • Bases de datos de búsqueda.