Konfigurieren von Remote Blob Storeage (RBS) auf SharePoint 2010

UPDATE: This Blog is also available in English. See here

Mit SharePoint 2010 wurde das Thema Remote Blob Storage neu aufgerollt, welches einem es ermöglicht, die Dokumente statt in der Datenbank auf dem Filesystem abzulegen. Dazu wird der jeweiligen Content-Datenbank ein Speicherbereich auf dem File-System zugewiesen, in dem die Dokumente abgelegt werden. Diese werden jedoch weiterhin durch den SharePoint verwaltet und die Metadaten zu den jeweiligen Dokumenten werden weiterhin in der Datenbank gepflegt.

Die hier aufgezeigten Schritte basieren auf den Quellen aus Technet und den Blogs von Jie Li und Todd Klindts

Die Installationen wurden auf Windows Server 2008 R2 und Microsoft SQL Server 2008 R2 gemacht, RBS ist unter Microsoft SQL Server 2005 nicht supported.

Als erstes musste FILESTREAM auf der SQL-Instanz aktiviert werden.

  1. Verbinden auf den SQL-Server
  2. Start –> All Programs –> Microsoft SQL Server 2008 R2 –> Configuration Tools –> SQL Server Configurations Manager
  3. In der Liste der Services auf “SQL Server Services” klicken.
  4. Wählen Sie in der Auflistung die SQL-Instanz, in welcher die SharePoint-Daten liegen (hier “SQL Server (MSSQLSERVER) ”) und klicken Sie mit der rechten Maustaste –> Properties.
  5. Wechseln Sie auf den Reiter FILESTREAM und aktivieren Sie die drei Checkboxen
  6. Klicken Sie auf Apply –> OK
    image
  7. Wechseln sie in das SQL Server Management Studio
    Start –> All Programs –> Microsoft SQL Server 2008 R2 –>SQL Server Management Studio
  8. Öffnen Sie eine neue Query und führen Sie folgenden Befehl aus image[43] Hier noch zum kopieren:

    EXEC sp_configure filestream_access_level, 2
    RECONFIGURE

Somit ist FILESTREAM aktiviert und die nächsten Schritte können in Angriff genommen werden.

Für die weiteren Arbeiten setzen wir voraus, dass SharePoint bereits komplett installiert ist und bereits eine WebApplikation erstellt wurde. Die Content-Datenbank habe ich dazu per PowerShell angelegt:

  1. Verbinden auf den Web-Front-End Server
  2. Start –> Microsoft SharePoint 2010 Products –> SharePoint 2010 Management Shell Erstellen Sie eine Content-Datenbank image[45] Hier noch zum kopieren:

    New-SPContentDatabase –name WSS_Content_Blob_001 –WebApplication https://sp2010 –MaxSiteCount 1 –WarningSiteCount 0

Die Content-Datenbank (hier “WSS_Content_Blob_001”) muss nun für die Verwendung vorbereitet werden.

  1. Verbinden auf den SQL-Server
  2. Start –> All Programs –> Microsoft SQL Server 2008 R2 –>SQL Server Management Studio

Öffnen Sie eine neue Query und führen Sie folgende Befehle aus. Ersetzen Sie dabei den Pfad “C:\Blobstore” durch den Pfad, auf dem die Files abgelegt werden sollen. Das Verzeichnis darf nicht existieren, da sonst ein Fehler ausgegeben wird (Verzeichnis besteht schon)
image[23]
Hier noch zum kopieren:


use [WSS_Content_Blob_001]
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_Blob_001]
if not exists (select groupname from sysfilegroups where groupname=N'RBSFilestreamProvider')alter database [WSS_Content_Blob_001] add filegroup RBSFilestreamProvider contains filestream


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


 

 

Nach diesen Aktionen wurde das Verzeichnis für den Blobstorage  unter C:\Blob_001 erstellt.

Als nächstes muss das EXE für RBS heruntergeladen werden (bitte nicht umbenennen). Dieses muss auf jeden Web-Front-End-Server kopiert werden.
Bei den nächsten Schritten muss immer darauf geachtet werden, dass die ausgegebenen Logs gut kontrolliert werden, ob darin Fehler enthalten sind.

  1. Verbinden auf den ersten Web-Front-End Server (der mit der Zentaladministration)
  2. Öffnen Sie eine Command Line mit lokalen Administratoren Rechten (ganz Wichtig)
    image
  3. Wechseln Sie in das Verzeichnis, in dem das RBS.msi liegt
  4. Löschen oder Benennen Sie eine allfällig vorhandene “rbs_install_log.txt”-Datei um.
  5. Führen Sie folgenden Befehl aus, ersetzen Sie dabei DBNAME durch die Datenbank und DBINSTANCE durch die SQL-Instanz. Wichtig ist, dass dieses Script nur beim ersten mal funktioniert, wenn Sie eine zweite Datenbank am konfigurieren sind, gehen Sie weiter zum Punkt “Zusätzliche Datenbank konfigurieren”:

    msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="WSS_Content_Blob_001" DBINSTANCE="DC" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1

  6. Wenn der Prozess fertiggestellt ist (kann eine Minute gehen, im Log steht dann “Verbose Logging stopped”), prüfen Sie das Log “rbs_install_log.txt”, ob darin der folgende Text enthalten ist (ca. 21 Zeilen vor dem Ende):

    "Product: SQL Remote Blob Storage -- Configuration completed successfully"

    Ist dies nicht der Fall, ist etwas falsch gelaufen. 
    - Sind Sie im richtigen Verzeichnis
    - Haben Sie sich vertippt
    - Ist die Command Line als Administrator ausgeführt
  7. Wenn Sie mehr als einen Web-Front-End-Server in der Farm haben, müssen Sie nun auf den zweiten Server wechseln und dort folgenden Befehl ausführen: image Hier noch zum kopieren:

    msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi DBNAME="WSS_Content_Blob_001" DBINSTANCE="DC" ADDLOCAL="Client,Docs,Maintainer, ,FilestreamClient,FilestreamServer"

  8. Prüfen Sie das Log “rbs_install_log.txt”, ob darin der folgende Text enthalten ist (ca. 21 Zeilen vor dem Ende):

    "Product: SQL Remote Blob Storage -- Configuration completed successfully"

  9. Führen Sie die Schritte ab Punkt 7 auf jedem zusätzlichen Front-End-Server aus. Dies ist sehr wichtig, da sonst Probleme auftreten können.

Das Script hat nun in der Datenbank einige Tabellen in der Datenbank erstellt. Prüfen sie nun diese, ob diese vorhanden sind.

  1. Verbinden auf den SQL-Server
  2. Start –> All Programs –> Microsoft SQL Server 2008 R2 –>SQL Server Management Studio
  3. Geben Sie den folgenden Befehl ein image Hier noch zum kopieren:

    use WSS_Content_Blob_001
    select * from dbo.sysobjects
    where name like ‘rbs%’

    Als Resultat müssten die RBS-Tabellen nun angezeigt werden. Dies kann wieder einen Augenblick dauern.

Als letzter Schritt muss nun auf dem SharePoint bekannt gemacht werden, dass diese Content-Datenbank RBS verwendet. Dazu muss dies aktiviert werden

  1. Verbinden auf den Web-Front-End Server

  2. Start –> Microsoft SharePoint 2010 Products –> SharePoint 2010 Management Shell

  3. Geben Sie folgende Befehle nacheinander ein: image Hier noch zum kopieren:

    $cdb = Get-SPContentDatabase WSS_Content_Blob_001

    $rbss = $cdb.RemoteBlobStorageSettings

    $rbss.Installed()

    $rbss.Enable()

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

    $rbss

Nun ist alles soweit vorbeitet, dass die Funktionalität getestet werden kann. Dazu muss eine Site Collection eingerichtet werden und dabei sichergestellt sein, dass diese in der Datenbank WSS_Content_Blob_001 liegt.

  1. Verbinden auf den Web-Front-End Server
  2. Start –> Microsoft SharePoint 2010 Products –> SharePoint 2010 Central Administration
  3. Application Management – Manage Content Databases
  4. Die korrekte Web Application auswählen
  5. Die Content-Datenbank so einstellen, dass die nächste Site Collection in der WSS_Content_Blob_001 erstellt wird
    - Sind mehrere Datenbanken vorhanden, bei allen die “Maximum Numbers of Site Collections” auf die aktuelle Anzahl Sites setzen.
    - Die WSS_Content_DB_001 sollte noch keine Site Collection enthalten
  6. Zurück zur Einstiegsseite der Central Administration
  7. Application Management – Create Site Collection
    - Alle relevanten Daten eingeben
    - OK
  8. Wenn die Site Collection erstellt ist, diese aufrufen und in einer Dokumentenbibliothek Dokumente hochladen.
    Diese Dokumente sollten jetzt in dem Verzeichnis des Blob’s auftauchen

Hinweis:
Dokumente unter 100kb werden nicht in den BLOB-Storage verschoben, sondern in der Datenbank gespeichert.

Wenn Sie diesen Wert verändern wollen, können Sie folgenden Befehl verwenden (hier auf 1MB):


$cbd = Get-SPContentDatabase “WSS_Content”
$cbd.RemoteBlobStorageSettings.MinimumBlobStorageSize=1048576
$cbd.Update()


Zusätzliche Datenbank konfigurieren

Wenn mehr als eine Content-Datenbank mit RBS konfiguriert werden sollen, müssen sie die oben genannten Schritte genau gleicht für jede Configurations-Datenbank machen. Der Unterschied liegt jedoch beim Befehl, welcher bei Punkt 5 ausgeführt wird. Dieser funktioniert so nicht, es werden die RBS-Tabellen nicht angelegt. Verwenden Sie daher den nachfolgenden Befehl:


msiexec /qn /i rbs.msi REMOTEBLOBENABLE=1 FILESTREAMPROVIDERENABLE=1 DBNAME=WSS_Content_Blob_002 FILESTREAMSTORENAME=FilestreamProvider_1 ADDLOCAL=EnableRBS,FilestreamRunScript DBINSTANCE=CD


Hinweis zum Thema Backup

Wenn eine Content-Datenbank mit SQL FILESTREAM Provider konfiguriert ist, muss der RBS Provider auf beiden SQL Servern installiert sein (Server für Backup und Server für Restore)


Referenzen : 


Updates:

07. März 2011:

  • Alter Name des Files RBS_X64.exe, neu heisst dieses RBS.msi - in allen Texten und Befehlen geändert
  • Neuer Link zu einem interessanten Dokument hinzugefügt : "SQL Server 2008 R2 Remote BLOB Storage Overview"

13. September 2011:

  • Einfügen des Befehls zum verändern der Grösse, ab wann die Dokumente in den Blob geschoben werden