GuilleSQL :: Microsoft SQL Server, SSIS, y más !!

Configurar SharePoint 2010 con RBS y FILESTREAM


Una de las novedades más interesantes introducidas en SharePoint 2010 es el Almacenamiento Remoto de Blobs (RBS - Remote Blob Storage). De este modo, utilizando un proveedor EBS, es posible almacenar los datos Blobs (ej: los documentos) fuera de las Bases de Datos de Contenido de SQL Server. En particular, utilizando el proveedor RBS para FILESTREAM, es posible aprovechar el almacenamiento FILESTREAM de SQL Server, para de este modo, mejorar el rendimiento de SharePoint 2010 y liberar de carga a SQL Server. Mola.

En estos últimos días, hemos estado hablando del Almacenamiento FILESTREAM de SQL Server, incluyendo detalles específicos sobre cómo configurar el Almacenamiento FILESTREAM en SQL Server. Ahora toca ver la integración del Almacenamiento FILESTREAM con SharePoint 2010, a través de del Almacenamiento Remoto de Blobs (RBS - Remote Blob Storage). Esta funcionalidad es una de las novedades introducidas con SharePoint 2010, la cual resulta de un  gran interés, ya que por un lado se consigue liberar de carga a SQL Server (ej: se evita utilizar el Buffer Pool para el acceso a los datos BLOB), y por otro lado se consigue una mejora de rendimiento en el acceso a este tipo de información no estructurada (es decir, un acceso a los documentos más rápido).

Antes de continuar con la lectura del presente artículo, es muy recomendable leerse los enlaces anteriores relacionados con FILESTREAM, ya que con ello podremos observar detalles muy significativos que nos podrían condicionar la elección de utilizar o no el almacenamiento FILESTREAM. Por poner un ejemplo, FILESTREAM no soporta Database Mirroring aunque si está soportado en Failover Cluster.

A continuación vamos a realizar la configuración de RBS y FILESTREAM sobre un entorno de laboratorio, consistente en un equipo Windows 7 configurado en Grupo de Trabajo con una instalación de SharePoint Foundation 2010 en modo StandAlone. Básicamente vamos a seguir los pasos de configuración descritos en TechNet, en el  artículo Install and configure RBS (SharePoint Server 2010), aunque con algunas consideraciones y detalles particulares. Por ejemplo, en nuestro caso de ejemplo, vamos a habilitar RBS sobre sólo una Base de Datos de Contenido.

Habilitar el Almacenamiento FILESTREAM en la Instancia de SQL Server

El primer paso es habilitar el almacenamiento FILESTREAM en la Instancia de SQL Server, lo cual, se realiza en dos pasos, una parte con el SQL Server Configuration Manager y la otra ejecutando una consulta SQL (sp_configure) por ejemplo desde el SQL Server Management Studio. También será necesario reiniciar la Instancia de SQL Server. No vamos a incluir aquí los detalles, puesto que esta configuración ya está descrita en un anterior artículo sobre cómo configurar el Almacenamiento FILESTREAM en SQL Server.

Comentar, que en nuestra instalación de SharePoint Foundation 2010 en modo StandAlone, no teníamos acceso como SysAdmin a la instancia de SQL Express que monta el instalador de SharePoint, por lo cual, previamente fue necesario conseguir acceso como SysAdmin en la Instancia SQL Express de SharePoint.

Habilitar el Almacenamiento FILESTREAM en unas Bases de Datos de Contenido de SQL Server que lo necesitemos

A continuación necesitamos habilitar el almacenamiento FILESTREAM en cada Base de Datos de Contenido de SQL Server. Esto consiste básicamente en agregar un Grupo de Ficheros (FileGroup) para FILESTREAM junto con un fichero lógico que especifique el directorio NTFS en que se desea almacenar dicha información. Para realizar esta configuración, ejecutaremos un Script SQL con el siguiente (es el recomendado por Microsoft). Ojo con el nombre de la base de datos y la ruta NTFS, ya que el siguiente Script SQL contiene las del caso de ejemplo utilizado para la redacción del presente artículo.

use [WSS_Content_FILESTREAM]
if not exists (select * from sys.symmetric_keys where name = N'##MS_DatabaseMasterKey##')
create master key encryption by password = N'Admin Key Password !2#4'

use [WSS_Content_FILESTREAM]
if not exists (select groupname from sysfilegroups where groupname=N'RBSFilestreamProvider')
alter database [WSS_Content_FILESTREAM] add filegroup RBSFilestreamProvider contains filestream

use [WSS_Content_FILESTREAM]
alter database [WSS_Content_FILESTREAM]
add file (name = RBSFilestreamFile, filename = 'C:\MOSS2010\FILESTREAM\WSS_Content_FILESTREAM')
to filegroup RBSFilestreamProvider

A continuación se incluye una pantalla capturada con el resultado de la ejecución de dicho Script SQL, quedando habilitada la base de datos WSS_Content_FILESTREAM para poder utilizar el almacenamiento FILESTREAM.

A continuación se incluye una pantalla capturada con el resultado de la ejecución de dicho Script SQL, quedando habilitada la base de datos WSS_Content_FILESTREAM para poder utilizar el almacenamiento FILESTREAM

Realizado esto podremos observar que SQL Server ya ha creado algunos contenidos en la ubicación especificada para el almacenamiento FILESTREAM de nuestra Base de Datos.

Realizado esto podremos observar que SQL Server ya ha creado algunos contenidos en la ubicación especificada para el almacenamiento FILESTREAM de nuestra Base de Datos

Instalar la Librería cliente de RBS, en SQL Server y en el primer Frontal Web de MOSS

Llegados a este punto, deberemos instalar RBS en el Servidor SQL y seguidamente en un primer Frontal Web de SharePoint. En nuestro caso de ejemplo, al tratarse de una instalación de SharePoint 2010 en modo StandAlone, la misma máquina es Frontal Web y Servidor SQL, por lo cual, sólo tendremos que hacerlo una única vez. En cualquier caso, los pasos a seguir son los siguientes.

Descargar el software cliente RBS. Es recomendable descargar la versión de SQL Server 2008 R2, disponible de forma libre para descarga desde la página del Microsoft SQL Server 2008 R2 Feature Pack.

Para realizar la instalación, desde una ventana de símbolo del sistema con permisos de administrador, ejecutaremos una línea de comando como la siguiente, teniendo en cuenta que se deberá especificar los datos correctos para cada caso (ej: nobre de Instancia de SQL Server, nombre de una Base de Datos de Contenido):

msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="WSS_Content_FILESTREAM" DBINSTANCE="PEPINO\SHAREPOINT" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1

A continuación se muestra la salida de la ejecución. En nuestro caso de ejemplo, renombramos el fichero RBS.msi por RBS_X64_SQLServer2008R2.msi. Por lo demás no hay ninguna diferencia.

A continuación se muestra la salida de la ejecución. En nuestro caso de ejemplo, renombramos el fichero RBS.msi por RBS_X64_SQLServer2008R2.msi. Por lo demás no hay ninguna diferencia

La instalación se realizará en segundo plano, y puede durar un par de minutos. Tras ello, podemos revisar el fichero LOG de la instalación de RBS (rbs_install_log.txt), para comprobar si se ha producido algún error.

La instalación se realizará en segundo plano, y puede durar un par de minutos. Tras ello, podemos revisar el fichero LOG de la instalación de RBS (rbs_install_log.txt), para comprobar si se ha producido algún error

También deberemos comprobar que en la Base de Datos de Contenido que especificamos durante la instalación del RBS, se deben haber creado nuevas tablas, bajo el esquema mssqlrbs, como se puede observar en la siguiente pantalla capturada.

También deberemos comprobar que en la Base de Datos de Contenido que especificamos durante la instalación del RBS, se deben haber creado nuevas tablas, bajo el esquema mssqlrbs, como se puede observar en la siguiente pantalla capturada

Además, en el Panel de Control, se deberá mostrar como instalado el software SQL Server 2008 R2 Remote Blob Store.

Además, en el Panel de Control, se deberá mostrar como instalado el software SQL Server 2008 R2 Remote Blob Store

Instalar la Librería cliente de RBS, en el resto de Servidores MOSS

En caso de que nuestra Granja de SharePoint 2010 tenga servidores de SharePoint adicionales (sean Frontales o Servidores de Aplicaciones), también deberemos instalar en ellos el software de RBS (en nuestro caso de ejemplo, no aplica, ya que sólo tenemos un único Frontal Web). Para ello, deberemos seguir los siguientes pasos.

Descargar el software cliente RBS. Es recomendable descargar la versión de SQL Server 2008 R2, disponible de forma libre para descarga desde la página del Microsoft SQL Server 2008 R2 Feature Pack.

Para realizar la instalación, desde una ventana de símbolo del sistema con permisos de administrador, ejecutaremos una línea de comando como la siguiente, teniendo en cuenta que se deberá especificar los datos correctos para cada caso (ej: nobre de Instancia de SQL Server, nombre de una Base de Datos de Contenido):

msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi DBNAME=" WSS_Content_FILESTREAM " DBINSTANCE=" PEPINO\SHAREPOINT " ADDLOCAL="Client,Docs,Maintainer,ServerScript,FilestreamClient,FilestreamServer"

 

Tras esto, deberemos revisar el fichero LOG de la instalación (rbs_install_log.txt).

Habilitar RBS en la Base de Datos de Contenido

Ahora que ya tenemos habilitado el almacenamiento FILESTREAM en SQL Server y que hemos instalado el software RBS en nuestra Granja de SharePoint 2010, llega el momento de habilitar RBS en nuestra Base de Datos de Contenido (recordemos, que nuestra intención es habilitar RBS en sólo una de las Bases de Datos de Contenido de nuestra Aplicación Web, y mantener el resto de Bases de Datos de Contenido utilizando el almacenamiento tradicional).

Al menos a mí, me pareció una configuración algo peculiar, ya que al instalar el software RBS, debemos especificar una Instancia de SQL Server y una Base de Datos de Contenido, lo cual, genera la expectativa de que al realizar esa instalación quedará configurada esa Base de Datos para utilizar RBS. De hecho, al realizar dicha instalación, se crean nuevas tablas en la Base de Datos de Contenido para dar soporte a RBS. Pero esto NO es suficiente, y  deberemos realizar una configuración adicional (descrita a continuación) para conseguir habilitar RBS en nuestra Base de Datos de Contenido. Es más, para poder habilitar RBS en una Base de Datos de Contenido deberemos realizar una configuración adición con PowerShell.

Otro detalle importante, es que al habilitar RBS sobre una Base de Datos de Contenido en SharePoint 2010, sólo los futuros documentos se almacenarán en RBS, siempre y cuando superen el umbral mínimo para el almacenamiento RBS. Es decir, los documentos existentes en la Base de Datos de Contenido, seguirán estando almacenados dentro de la Base de Datos de SQL Server (deberemos Migrarlos a RBS manualmente, como veremos más adelante en este mismo artículo). Y además, deberemos tener en cuenta que no todos los documentos se almacenarán en RBS: sólo los documentos que superen un tamaño mínimo de umbral se almacenará en RBS, y el resto se almacenarán en SQL Server. Más adelante en este mismo artículo, veremos cómo ajustar este umbral.

Siguiendo con lo nuestro, para habilitar RBS sobre una Base de Datos de Contenido deberemos abrir el SharePoint 2010 Management Shell. En primer lugar, vamos a listar las diferentes Bases de Datos de Contenido para nuestra Aplicación Web, ejecutando un comando Get-SPContentDatabase, de forma similar a como se muestra en la siguiente pantalla capturada (Nota: debe especificarse la URL correcta para cada caso).

$cdb = Get-SPContentDatabase –WebApplication http://pepino

A continuación, se muestra la salida de ejecución del comando Get-SPContentDatabase.

A continuación, se muestra la salida de ejecución del comando Get-SPContentDatabase

En la anterior pantalla capturada, podemos identificar el Id de la Base de Datos de Contenido sobre la que deseamos habilitar RBS (7e346ec8-537e-4e53-9906-28fd80a5d2f9), que utilizaremos en los siguientes comandos, para conseguir habilitar RBS sobre dicha Base de Datos de Contenido.

$cdb = Get-SPContentDatabase -Identity 7e346ec8-537e-4e53-9906-28fd80a5d2f9
$rbss = $cdb.RemoteBlobStorageSettings
$rbss.Installed()
$rbss.Enable()
$rbss.SetActiveProviderName($rbss.GetProviderNames()[0])

A continuación se muestra la salida de ejecución de los anteriores comandos PowerShell para activar RBS.

A continuación se muestra la salida de ejecución de los anteriores comandos PowerShell para activar RBS

Comprobar el funcionamiento de RBS y FILESTREAM en nuestra Granja de SharePoint 2010

Realizado esto, hemos aprovechado para subir (upload) un document de 35MB al Sitio de SharePoint que utiliza la Base de Datos de Contenido en la que hemos habilitado RBS. Si consultamos el contenido del directorio NTFS utilizado para el almacenamiento FILESTREAM de dicha Base de Datos de Contenido, podemos observar que dicho documento de 35MB parece estar efectivamente almacenado el FILESTREAM, como se puede observar en la siguiente pantalla capturada.

Realizado esto, hemos aprovechado para subir (upload) un document de 35MB al Sitio de SharePoint que utiliza la Base de Datos de Contenido en la que hemos habilitado RBS. Si consultamos el contenido del directorio NTFS utilizado para el almacenamiento FILESTREAM de dicha Base de Datos de Contenido, podemos observar que dicho documento de 35MB parece estar efectivamente almacenado el FILESTREAM, como se puede observar en la siguiente pantalla capturada

Para evidenciarlo aún más, y tener mayor certeza de que RBS está funcionando correctamente, vamos a ejecutar la siguiente consulta SQL sobre nuestra Base de Datos de Contenido.

Select * from AllDocstreams where RBSID IS NOT NULL

La ejecución de la anterior SELECT sobre AllDocstreams, nos devolverá una única fila, correspondiente al único documento actualmente almacenado en FILESTREAM.

La ejecución de la anterior SELECT sobre AllDocstreams, nos devolverá una única fila, correspondiente al único documento actualmente almacenado en FILESTREAM

Configurar el umbral mínimo para el almacenamiento Remoto (RBS)

Es recomendable ajustar el umbral mínimo para el almacenamiento remoto (RBS), de tal modo, que para cada Base de Datos de Contenido habilitada para RBS, podemos indicar a partir de que tamaño los ficheros se almacenarán en RBS. En nuestro caso de ejemplo, para nuestra Base de Datos de Contenido, ajustaremos el umbral mínimo para que los ficheros a partir de 1MB se almacenen en RBS. Para esto, de nuevo utilizando PowerShel desde el SharePoint 2010 Management Shell, ejecutaremos unos comandos como los siguientes (Nota: téngase en cuenta que deberá utilizarse el ID de la Base de Datos de Contenido correcta para cada caso):

$cdb = Get-SPContentDatabase -Identity 7e346ec8-537e-4e53-9906-28fd80a5d2f9
$cdb.RemoteBlobStorageSettings.MinimumBlobStorageSize=1048576
$cdb.Update()

A continuación, se muestra la salida de ejecución de los anteriores comandos de PowerShell para configurar el umbral mínimo para el almacenamiento Remoto (RBS) en una Base de Datos de Contenido en particular.

A continuación, se muestra la salida de ejecución de los anteriores comandos de PowerShell para configurar el umbral mínimo para el almacenamiento Remoto (RBS) en una Base de Datos de Contenido en particular

Mover contenido a dentro o fuera de RBS

Si hemos habilitado RBS sobre una Base de Datos de Contenido existente, nos encontraremos con la siguiente situación: una vez que hemos habilitado RBS, los futuros documentos que almacenemos en dicha Base de Datos se almacenarán en RBS (siempre y cuando superen el umbral de tamaño mínimo). Sin embargo, los documentos que existían anteriormente en la Base de Datos de Contenido, antes de habilitar RBS, seguirán almacenados en SQL Server. En nuestro caso de ejemplo, teníamos un documento de 40MB en nuestro Site antes de habilitar RBS, el cual, sigue estando almacenado en SQL Server. Por lo tanto, deberemos migrarlos a RBS, tarea que podemos realizar utilizando (como no) PowerShell, desde el SharePoint 2010 Management Shell. Para ello, deberemos ejecutar unos comando PowerShell similares a los siguientes (Nota: debe especificarse el ID correspondiente a la Base de Datos correspondiente a cada caso).

$cdb = Get-SPContentDatabase -Identity 7e346ec8-537e-4e53-9906-28fd80a5d2f9
$rbss = $cdb.RemoteBlobStorageSettings
$rbss.Migrate()

A continuación se muestra la salida de ejecución de los anteriores comandos de PowerShell, para migrar los datos desde el almacenamiento en SQL Server a RBS.

A continuación se muestra la salida de ejecución de los anteriores comandos de PowerShell, para migrar los datos desde el almacenamiento en SQL Server a RBS.

Si ahora consultamos de nuevo nuestra Base de Datos de Contenido, podremos comprobar que ya tenemos dos documentos almacenados en RBS: el documento de 40MB que acabamos de Migrar, y el documento de 35MB que subimos a nuestro Site después de habilitar RBS.

Si ahora consultamos de nuevo nuestra Base de Datos de Contenido, podremos comprobar que ya tenemos dos documentos almacenados en RBS: el documento de 40MB que acabamos de Migrar, y el documento de 35MB que subimos a nuestro Site después de habilitar RBS.

Conclusiones y despedida

La utilización del almacenamiento FILESTREAM en SQL Server junto al almacenamiento Remoto de Blobs (RBS) de SharePoint 2010, se presenta como una alternativa bastante interesante. No es necesario que habilitemos RBS y FILESTREAM en todas nuestras Bases de Datos de Contenido, pudiendo seleccionar qué Bases de Datos configurar o no con FILESTREAM y RBS.

Poco más por hoy. Como siempre, confío que la lectura resulte de interés.

 


]
[Autor: GuilleSQL]



Miembros de
Miembros de GITCA (Global IT Community Association)

Menu de Usuario
  Iniciar Sesión
  Registrarse
  Restablecer Contraseña
  Ventajas de Registrarse

Acerca de
  Contigo desde Oct 2007
  771 usuarios registrados
  86146 pageloads/mes
  Ranking Alexa 498160

Social Networks
Sigue a Portal GuilleSQL en Linkedin !!
Sigue a Portal GuilleSQL en Twitter !!



Archivo

Junio de 2017 (1)
Mayo de 2017 (1)
Marzo de 2017 (3)
Enero de 2017 (4)
Junio de 2016 (1)
Mayo de 2016 (2)
Abril de 2016 (2)
Septiembre de 2015 (2)
Agosto de 2015 (2)
Junio de 2015 (10)
Mayo de 2015 (4)
Abril de 2015 (8)
Marzo de 2015 (11)
Octubre de 2014 (3)
Septiembre de 2014 (7)
Agosto de 2014 (5)
Julio de 2014 (2)
Mayo de 2014 (4)
Abril de 2014 (4)
Marzo de 2014 (4)
Febrero de 2014 (1)
Enero de 2014 (5)
Diciembre de 2013 (8)
Noviembre de 2013 (2)
Octubre de 2013 (7)
Septiembre de 2013 (6)
Agosto de 2013 (1)
Julio de 2013 (6)
Junio de 2013 (11)
Mayo de 2013 (7)
Abril de 2013 (6)
Febrero de 2013 (5)
Enero de 2013 (7)
Diciembre de 2012 (12)
Noviembre de 2012 (13)
Octubre de 2012 (5)
Septiembre de 2012 (3)
Agosto de 2012 (6)
Julio de 2012 (4)
Junio de 2012 (1)
Mayo de 2012 (2)
Abril de 2012 (7)
Marzo de 2012 (16)
Febrero de 2012 (9)
Enero de 2012 (5)
Diciembre de 2011 (10)
Noviembre de 2011 (10)
Octubre de 2011 (4)
Septiembre de 2011 (5)
Agosto de 2011 (2)
Julio de 2011 (2)
Junio de 2011 (4)
Mayo de 2011 (2)
Abril de 2011 (6)
Marzo de 2011 (4)
Febrero de 2011 (10)
Enero de 2011 (5)
Diciembre de 2010 (6)
Noviembre de 2010 (4)
Octubre de 2010 (8)
Septiembre de 2010 (4)
Agosto de 2010 (1)
Julio de 2010 (3)
Mayo de 2010 (5)
Abril de 2010 (6)
Marzo de 2010 (8)
Febrero de 2010 (3)
Enero de 2010 (1)
Diciembre de 2009 (9)
Noviembre de 2009 (14)
Octubre de 2009 (2)
Septiembre de 2009 (8)
Agosto de 2009 (2)
Julio de 2009 (10)
Junio de 2009 (9)
Mayo de 2009 (10)
Abril de 2009 (9)
Marzo de 2009 (3)
Febrero de 2009 (2)
Enero de 2009 (3)
Noviembre de 2008 (2)
Octubre de 2008 (2)
Septiembre de 2008 (2)
Agosto de 2008 (5)
Julio de 2008 (5)
Junio de 2008 (1)
Mayo de 2008 (3)
Abril de 2008 (2)
Marzo de 2008 (2)
Febrero de 2008 (2)
Enero de 2008 (5)
Noviembre de 2007 (2)
Octubre de 2007 (2)






Copyright © 2007 GuilleSQL, todos los derechos reservados.