domingo, 27 de julio de 2014

Configurar un servidor específico para ser un target search crawler

Supongamos que tenemos la siguiente arquitectura de servidores:

image

Donde el servidor WFE recibe todas las consultas realizadas por el search services. Lo que quiero hacer es que el crawler le “pegue” al servidor APP2 para indexar el contenido para reducir la carga sobre los servidores que el usuario interactura (WFE) y potencialmente reducir los tiempos de crawl. Una manera es utilizando el archivo host (C:\windows\system32\drivers) y apuntando los dns al servidor deseado para indexar el contenido. Ej:

192.168.1.1 http://teamsites.sharepoint.com

Pero este método no es el método correcto para Sharepoint, ya que puede generar errores dificiles de detectar y hay que actualizar este archivo cada vez que se realice un cambio en la infraestructura (por ej: cambio de IP´s), para solucionar este problema Microsoft dispone de la propiedad SiteDataServers de un web application sobre una zona específica. Esta propiedad está disponible para Sharepoint 2010 como para Sharepoint 2013. Veamos su uso.

Primero verifico que esté iniciado el servicio “Microsoft Sharepoint Foundation Web Application” para el servidor APP2.

image

image

Después abro un consola de powershell ISE y ejecuto lo siguiente. Importante: este código se deberá ejecutar sobre el servidor APP2, ya que deshabilita el throttling localmente.

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null)
{
Write-Host "Loading SharePoint Powershell Snap-in"
Add-PSSnapin "Microsoft.SharePoint.Powershell"
}

$svc=[Microsoft.SharePoint.Administration.SPWebServiceInstance]::LocalContent
$svc.DisableLocalHttpThrottling
$svc.DisableLocalHttpThrottling=$true
$svc.Update()

$wa = Get-SPWebApplication http://urlwebapplication
$crawltarget = "NOMBRESERVIDOR" #especifica el nombre de la máquina que será el crawl target
$target = New-Object System.Uri("http://$crawltarget")
$uri = New-Object System.Collections.Generic.List[System.Uri](1)
$uri.Add($target)
$zone = [Microsoft.SharePoint.Administration.SPUrlZone]'Default' #especifica el nombre de la zona
$wa.SiteDataServers.Add($zone, $uri)
$wa.Update()
$wa.SiteDataServers | fl

Para verificar que se haya configurado bien esta propiedad, inicia un crawl de tu contenido, y revisa los logs del IIS, deberás encontrar lo siguiente (sitedata.asmx y MS-Search):

POST /sites/test/_vti_bin/sitedata.asmx - 80 - fe80::2817:36bb:71ae:2ecb%10 Mozilla/4.0+(compatible;+MSIE+4.01;+Windows+NT;+MS+Search+6.0+Robot

El SharePoint crawler comienza enumerando todos los items del site llamando al servicio Site Data web service (test/_vti_bin/sitedata.asmx), el Crawler deja que el Site Data web service le pregunte al WFE que contenido tiene para esa url.

La otra propiedad (MS-Search) es cuando el servicio de search llama al servicio Site Data web service, utiliza un User Agent predeterminado que podrás encontrar en la clave de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\14.0\Search\Global\Gathering Manager\

image

Mozilla/4.0 (compatible; MSIE 4.01; Windows NT; MS Search 6.0 Robot)

El otro punto a remacar, es que deshabilité HTTP throttling sobre el crawl target así las solicitudes de crawl no se encolan o se retrasan en el WFE. Este mecanismo es para proteger el servidor de peaks load (picos de carga), monitorea un par de contadores para evaluar la performance del servidor y generar un contador del estado (0 a 9). Pueden tener más info en el siguiente link: http://blogs.msdn.com/b/besidethepoint/archive/2010/09/13/http-request-throttling-in-sharepoint-2010.aspx

Importante: Recuerda que esta configuración es por Web Application y por zona.

En el caso que quieras borrar esta configuración ejecuta lo siguiente:

#$zone = [Microsoft.SharePoint.Administration.SPUrlZone]'Default' #especifica el nombre de la zona
#$wa = Get-SPWebApplication http://urlwebapplication
#$wa.SiteDataServers.Remove($zone)
#$wa.Update()

TIP para buscar los logs del IIS

Supongamos que buscamos los logs del web application http://urlwebapplication, para ello buscamos ese nombre dentro del IIS, y vemos campo ID en Advanced Settings.

image

Después ingresamos al path donde están los logs del IIS, y buscamos ese ID en las carpetas.

image

No hay comentarios:

Publicar un comentario