jueves, 17 de junio de 2010

Remote BLOB Storage para SharePoint 2010

Los BLOBS (Binary Large Object) consisten en conjuntos de datos no estructurados como ficheros de texto, imágenes o vídeos. En SharePoint los BLOB’s se almacenan en las bases de datos de contenido, pudiendo afectar al espacio consumido y velocidad. SqlServer 2008 R2 incorpora el proveedor FILESTREAM que permite almacenar los BLOBs como ficheros en el sistema de ficheros NTFS en lugar de la base de datos.

SharePoint 2010 (Foundation y Server) se pueden aprovechar de los remote blobs activando el FILESTRIME provider para las bbdd de contenidos, de esta forma podremos almacenar grandes cantidades de datos como imágenes o vídeos sin afectar al volumen de la base de datos ni al rendimiento.

A continuación veremos los pasos para activar el RBS (Remote BLOB Storage) para SharePoint 2010 basado en el Virtual Lab: Configuring Remote Blob Storage FILESTREAM Provider for SharePoint Server 2010

 

Activar Remote BLOB para SharePoint 2010

Lo primero es necesario disponer de al menos SqlServer 2008, SqlServer 2008 R2 o SqlServer 2008 Express R2. Para activarlo accederemos al “SQL Server Configuration Manager” seleccionaremos la instancia de SQL y desde las propiedades accederemos a la pestaña “FILESTREAM” y activaremos: “Enable FILESTREAM for Transact-SQL access”, “Enable FILESTREAM for file I/O streaming access” y “Allow remote clients to have streaming access to FILESTREAM data” y a continuación aplicaremos.

image

Ejecutaremos desde el “SQL Server Management Studio” el comando:

EXEC sp_configure filestream_access_level, 2

RECONFIGURE

A continuación tendremos que indicar a Sql Server que utilice el FILESTREAM provider para almacenar los BLOB’s de la base de datos de contenido de nuestra Colección de Sitios. Para éllo primero tendremos que identificar el nombre de la bbdd de la Colección, en este caso lo veremos mediante PowerShell; desde la consola de PowerShell de SharePoint 2010 ejecutamos el comando:

$cdb = Get-SPContentDatabase –WebApplication http://intranet.contoso.com

$cdb

image

Desde el “SQL Server Management Studio” creamos una master key ejecutando:

use [WSS_Content_GUID]

if not exists (select * from sys.symmetric_keys where name = N'##MS_DatabaseMasterKey##')create master key encryption by password = N'Contraseña'

Donde “WSS_Content_GUID” representa el nombre de la base de datos de contenido.

Definimos un grupo de ficheros con el nombre “RBSFilestreamProvider” y lo asociamos al proveedor filestream:

use [WSS_Content_GUID]

if not exists (select groupname from sysfilegroups where groupname=N'RBSFilestreamProvider')alter database [WSS_Content_GUID]

add filegroup RBSFilestreamProvider contains filestream

Especificamos el fichero filestream “RBSFilestreamFile” y el directorio donde se almacenarán los BLOB’s

use [WSS_Content_GUID]

alter database [WSS_Content_GUID] add file (name = RBSFilestreamFile, filename = 'c:\Blobstore') to filegroup RBSFilestreamProvider

En este momento dispondremos de una nueva carpeta con permisos especiales para que el servicio de SqlServer pueda manejar los BLOB’s como ficheros:

image

Si accedemos ahora a las propiedades de la base de datos veremos el nombre de nuestro grupo de ficheros Filestream:

image

Ahora instalaremos el addin con las API de RBS en todos los servidores frontales y de aplicación de SharePoint que encontraremos en RBS_x64.msi. Para instalarlo lo haremos desde línea de comandos para que tenga en cuenta nuestros filegroups:

msiexec /qn /lvx* rbs_install_log.txt /i C:\RBSInstall\RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="WSS_Content_GUID" DBINSTANCE="DEMO2010A" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1

Para indicar a SharePoint que debe utilizar el proveedor RBS FileStream, desde PowerShell obtendremos las propiedades de remote BLOB’s en la bbdd de contenidos:

$cdb = Get-SPContentDatabase –WebApplication http://intranet.contoso.com

$rbss = $cdb.RemoteBlobStorageSettings

Mediante la variable $rbss instalaremos el proveedor y lo activaremos para ser utilizado:

$rbss.Installed()

$rbss.Enable()

Al ejecutar la última instrucción, encontraremos un mensaje del tipo:

image

Por último indicaremos que el activo :

$rbss.SetActiveProviderName($rbss.GetProviderNames()[0]

Desde este momento cuando subamos un fichero a SharePoint éste se almacenará en el sistema de ficheros, en nuestro caso en la carpeta “c:\Blobstore”.

image

Si tuviéramos ficheros almacenados antes de activar el RBS éstos seguirán almacenados en la base de datos de contenidos, para pasarlos al sistema de ficheros utilizaremos el comando:

$rbss.Migrate()

Si quisiéramos almacenar el sistema de ficheros solo aquellos ficheros mayores de 1MB de tamaño:

$cdb.RemoteBlobStorageSettings.MinimumBlobStorageSize=1048576

 

Por último, si queremos desactivar el uso de RBS ejecutaremos:

$rbss.SetActiveProviderName("")

Esto solo lo desactivará para nuevos BLOB’s, si ahora queremos volver a sacar los ficheros del sistema de ficheros y volverlos a introducir en la base de datos de contenido tendremos que volver a migrarlos pero hacia la bbdd de contenidos, este caso no lo he podido probar :(

No hay comentarios: