适用于:2013
2016
2019
Subscription Edition
SharePoint in Microsoft 365
随着组织越来越多地使用 SharePoint 获取丰富内容而不是普通文档,存储要求也成倍增长。 管理员必须定期查看和清理 SharePoint 中的内容。 默认情况下,所有结构化内容(如元数据)或非结构化内容(如文件)都存储在附加到 SharePoint Server 的 SQL Server 中的内容数据库中。 SharePoint 中的非结构化数据作为二进制大型对象 (BLOB) 存储在内容数据库中,它们是不可变的。
在 SharePoint 2013 中,在 SQL Server 中创建远程 BLOB 存储 (RBS) 技术,以便从内容数据库卸载 BLOB,当时提供了 SQL FILESTREAM 提供程序。 在 SharePoint Server 订阅中,为 IT 管理员创建新的远程共享提供程序,通过将内容从 SQL Server 卸载到网络 SMB 存储,降低本地环境中 SharePoint 部署的总体成本,这是合理且易于使用的存储解决方案。
远程共享提供程序的主要功能
在SharePoint Server 订阅版中,我们提供了一个新的 RBS 提供程序远程共享提供程序。
以下是远程共享提供程序的主要功能:
- 此提供程序支持将二进制大型对象 (BLOB) 存储卸载到远程 SMB 系统,并在 SQL 服务器端完全启用内容数据库存储。 因此,在内容数据库的限制量与 200 GB 大小相同的情况下,可以在一个内容数据库中存储更多文件卷。 因此,它不仅有助于降低存储成本,而且有助于维护。
- 有一个 PowerShell Cmdlet 用于检查数据完整性,以找出存储问题。
- 通过应用 SMB 系统的现有备份和还原方法,它提供了相对合理的灾难恢复。
远程共享提供程序的限制
远程共享提供程序将新的存储系统引入 SharePoint。 在某些情况下,任何其他系统都可能导致复杂性和可靠性降级。 由于它基于 RBS,以下是也适用于远程共享提供程序的一些限制:
- 即使启用了透明数据加密,BLOB 也不支持加密。
- RBS 不支持使用数据压缩。
- 由于内容数据库和 BLOB 存储是分开的,因此从场进行备份和还原,而内容数据库级别不足以进行灾难恢复。 执行场和内容数据库级别的备份和恢复时,需要同时备份和恢复 BLOB 存储。
远程共享提供程序的优点和缺点
与在 SQL Server 中存储 BLOB 相比,使用远程共享提供程序有其优点和缺点。
优点:
- 通过将非结构化数据移出 SQL 来提高 SQL 性能。
- 使用低成本 SMB 存储降低存储成本。
- 存储大量文件。
缺点:
- 远程存储需要其他备份和还原步骤, (SMB) 。
- 需要在远程存储 (SMB) 中单独配置安全和数据保护。
- 另一个存储层会降低整个系统的可用性和可靠性,即高可用性,灾难恢复 (HADR) 在为 SMB 存储设置 HADR 之前默认无法正常工作。
规划远程共享提供程序
远程共享提供程序适用于需要以下情况:
- 网站集中存在大量内容,这可能会导致存储成本和系统性能出现问题。
- 网站集不适用于时间关键型业务。 如果网站集关闭,可以花时间还原内容数据库和远程 BLOB 存储。 此特定网站集的服务停机时间不会对组织业务产生重大影响。
- 读取作多于该网站集上的写入作。
备份和还原方法必须规划作为 SharePoint 的远程存储系统,因为 SQL Server 备份或还原可能无法涵盖远程存储系统中存储的 BLOB。 建议使用 System Center Data Protection Manager (DPM) 来管理备份和还原,以便可以同时备份内容数据库和远程 BLOB 存储。
在 DPM 中,可以为 SharePoint 内容数据库和远程 SMB 存储创建保护组,以便 DPM 可以一起备份/管理这些数据集。 有关更多信息,请参阅:
如果不使用 DPM 来管理备份和还原,可以按照以下两个步骤按顺序备份 SharePoint:
- 使用 Backup-SPFarm PowerShell cmdlet 备份服务器场或内容数据库。
- 使用现有备份工具备份远程 SMB 存储。
若要还原 SharePoint,请将序列反转为:
- 从备份存储还原 SMB 存储。
- 使用 Restore-SPFarm PowerShell cmdlet 还原内容数据库或场。
远程共享提供程序不提供加密来确保数据安全。 它依赖于 SMB 存储提供的安全性和访问控制。 因此,若要保护 BLOB 数据免受威胁,必须在存储级别采取适当的作。
- 启用 SMB 加密以确保通过网络和存储安全地传输 BLOB。
- 启用访问控制,以便只有受限用户才能访问 SMB 存储中的 BLOB。
- 启用 BitLocker 以增强数据安全性。
考虑高可用性
通过使用 SQL Server 附带的早期 FILESTREAM 提供程序,高可用性和灾难恢复 (HADR) 由 SQL Server HADR 群集处理。
通过移动到新的远程共享提供程序,此SQL Server级别 HADR 无法覆盖 SMB 存储中的 BLOB。 因此,默认情况下,远程共享提供程序不支持与 SQL Server HADR 相同。 它需要更多的成本和精力来设置一个 HADR 就绪的 SMB 存储,并与 SharePoint 和 SQL Server 与层 HADR 系统集成。
过去通过设置故障转移 SharePoint 场来支持高可用性。 使用远程共享提供程序,它仍然可以工作。
具有远程共享提供程序的故障转移场有两种不同的配置。
在活动的 SharePoint 场和故障转移场之间共享同一 SMB BLOB 存储。
对于此配置,有两组 SharePoint 服务器和 SQL 服务器,但它们共享同一个 SMB 存储的 BLOB。 实时数据库同步设置为流式传输从活动 SharePoint 场中的活动 SQL Server 到故障转移 SharePoint 场中的 SQL Server 的更改。 因此,如果活动 SharePoint 场中存在任何问题,管理员可以立即切换到故障转移 SharePoint 场。
使用 SMB BLOB 存储故障转移备份在活动 SharePoint 场和故障转移场之间共享同一 SMB BLOB 存储。
此配置与配置 #1 完全相同,只不过有 SMB BLOB 存储的故障转移备份。 不仅同步了数据库,还备份了 SMB 存储。 在这种情况下,当活动 SharePoint 场出现问题时,它可以使用其他设置切换到故障转移场,以将 SMB 存储 UNC 路径更改为故障转移 SMB 存储。
安全性和权限
远程共享提供程序不提供加密来确保数据安全。 它依赖于 SMB 存储提供的安全性和访问控制。 因此,若要保护 BLOB 数据免受威胁,必须在存储级别采取适当的作:
- 启用 SMB 加密以确保通过网络和存储安全地传输 BLOB。
- 启用访问控制,以便只有受限用户才能访问 SMB 存储中的 BLOB。
- 如果可能,启用 BitLocker 以增强数据安全。
- 用于执行 为每个内容数据库预配 BLOB 存储 部分中步骤的用户帐户必须是要为其配置 RBS 的每个数据库的固定数据库角色的成员
db_owner
。 - 在安装 SQL Server 和每个前端或应用程序服务器部分中的步骤中安装客户端库的用户帐户必须是要安装库的所有计算机上的管理员组的成员。
- 在为每个内容数据库启用 RBS 部分中,启用 RBS 的用户帐户必须具有足够的权限来运行 Microsoft PowerShell。
设置远程共享提供程序
将 RBS 库安装到 sharePoint 前端和应用程序服务器
使用以下命令行将 RBS 库安装到 SharePoint 场中的每个 SharePoint 前端和应用程序服务器:
Msiexec /qn /lvx* rbs_install_log.txt /I RBS.msi ADDLOCAL="Client"
注意
不要通过 GUI 安装 RBS 库。
在特定内容数据库中启用 RBS 功能
RBS 应用于特定内容数据库。 因此,每当新内容数据库需要使用 RBS 时,都需要对其进行设置。 然后,可以在内容数据库上注册 RBS 提供程序。
确保要应用 RBS 的此内容数据库的主密钥。 如果主密钥不存在,请为内容数据库创建一个新密钥。
若要为特定内容数据库创建主密钥,请执行以下作:
- 确认执行这些步骤的用户帐户是针对 RBS 配置的每个数据库的固定数据库角色的成员
db_owner
。 - 打开 SQL Server Management Studio。
- 连接托管内容数据库的 SQL Server 实例。
- 展开"数据库"。
- 选择要为其创建 BLOB 存储的内容数据库,然后单击“ 新建查询”。
- 将以下 SQL 查询粘贴到“ 查询 ”窗格中,然后按列出的顺序运行它们。 在每种情况下,请将 替换为
[WSS_Content]
内容数据库名称,并将 替换为c:\BlobStore
volume\directory
要在其中创建 BLOB 存储的 。 The provisioning process creates a folder in the location that you specify. 只能预配 BLOB 存储一次。 If you attempt to provision the same BLOB store multiple times, you'll receive an error.
#Replace with <your content database>
use [<Your content database>]
#Replace with your <Your SQL database instance>
if not exists
(select * from sys.symmetric_keys
where name = N'##MS_DatabaseMasterKey##')
create master key encryption by password = N'<Admin Key Password>'
可以使用下面的命令行为每个内容数据库设置 RBS。 将 DBNAME 和 DBINSTANCE 替换为特定内容数据库名称和数据库实例名称。
msiexec /qn /lvc* rbs.log /i rbs.msi TRUSTSERVERCERTIFICATE=true DBNAME="Your content database" ADDLOCAL="ServerScript,EnableRBS" DBINSTANCE="Your SQL database instance"
为远程共享提供程序设置凭据
若要访问受限的 SMB 存储,建议将特定域帐户分配给 SMB 存储中的读/写 BLOB 文件的远程共享提供程序。 提供程序使用 PSCredential 对象使用此特定帐户凭据登录远程 RBS 存储。
请参阅 Get-Credential 以获取 RBS 提供程序的 PSCredential 对象。
向远程共享提供程序注册 BLOB 存储
若要将 BLOB 存储从内容数据库卸载到 SMB 存储,需要使用远程共享提供程序创建一个新的远程共享 BLOB 存储并将其注册到给定内容数据库。
可以使用 Register-SPRemoteShareBlobStore
cmdlet 为特定内容数据库注册新的 BLOB 存储。
Register-SPRemoteShareBlobStore -ContentDatabase <SPContentDatabasePipeBind> -Name <BlobStoreName[ValidateLength(8, 128)]> -Location <UNCPath> [-BlobStoreCredential <PSCredential>][- PoolCapacity <Int>]
cmdlet 参数为:
-ContentDatabase <SPContentDatabasePipeBind>
将应用新 BLOB 存储的内容数据库可以是内容数据库对象或内容数据库名称。
-Name <BlobStoreName[ValidateLength(8, 128)]>
新创建的 BLOB 存储的名称。
-Location<UNCPath[ValidateLength(5, 256)]>
此 BLOB 存储将使用的 SMB 存储的 UNC 路径。
[-BlobStoreCredential] <PSCredential>
PSCredential 对象,用于访问 SMB 存储。 如果未指定此参数,它将使用应用于当前 Web 应用程序的服务帐户。
[-PoolCapacity] <Int [ValidateRange(1000, 10000)]>
每个 BLOB 池中的 BLOB 中继数。 如果未指定此参数,则将它设置为 1000。
示例 cmdlet 语法:
Register-SPRemoteShareBlobStore -ContentDatabase $db -Name "RemoteBlob" -Location "\\SPVNEXT\blobstore"
切换和激活 BLOB 存储
注册的远程共享 BLOB 存储在激活之前不会生效。
Switch-SPBlobStorage
cmdlet 需要在 之后 Register-SPRemoteShareBlobStore
运行,以便内容数据库的新内容将路由到新创建的远程共享 BLOB 存储。
Switch-SPBlobStorage -RemoteShareBlobStore <SPRemoteShareBlobStorePipeBind>
此 cmdlet 会将内容数据库的默认 BLOB 存储切换到给定的远程共享 BLOB 存储。 由于 BLOB 存储在场中是唯一的,并且链接到特定内容数据库,因此无需在此 cmdlet 中指定内容数据库。
远程共享 BLOB 存储(将处于活动状态)可以是远程共享 BLOB 存储对象或远程共享 BLOB 存储名称。
语法示例:
$blobstore = Register-SPRemoteShareBlobStore -ContentDatabase $db -Name "RemoteBlob" -Location \\SPVNEXT\blobstore
Switch-SPBlobStorage -RemoteShareBlobStore $blobstore
Switch-SPBlobStorage -ContentDatabase <SPContentDatabasePipeBind> -SQL
此 cmdlet 会将默认 BLOB 存储切换回 SQL 中的内容数据库。
-ContentDatabase <SPContentDatabasePipeBind
内容数据库,需要设置回 SQL。 它可以是内容数据库对象或内容数据库名称。
SQL
指示内容数据库将为新内容使用 SQL 进行 BLOB 存储。
语法示例:
Switch-SPBlobStorage -ContentDatabase $db -SQL
向 Web 应用程序池帐户和 SharePoint 服务应用程序池帐户授予权限
设置 RBS 后,在内容数据库中创建新架构 mssqlrbs
。 因此,必须向 Web 应用程序池帐户和 SharePoint 服务应用程序池帐户授予此新架构的访问权限,以便 Web 应用程序和服务应用程序可以访问内容数据库中的 RBS。
在 SQL Server 中使用以下示例 SQL 命令授予权限。
ALTER AUTHORIZATION ON SCHEMA::mssqlrbs to [web_app_pool_account];
ALTER AUTHORIZATION ON SCHEMA::mssqlrbs to [service app_pool_account];
重置 IIS
远程共享 BLOB 存储成为内容数据库的默认 BLOB 存储后,需要在每个 SharePoint 前端服务器和 SharePoint 应用程序服务器中运行 iisreset
。 然后,任何新内容都将使用远程共享提供程序写入外部 SMB 存储。
管理和配置远程共享 BLOB 存储
可以使用 Get-SPRemoteShareBlobStore
cmdlet 获取服务器场中的远程共享 BLOB 存储。
Get-SPRemoteShareBlobStore -RemoteShareBlobStore <SPRemoteShareBlobStorePipeBind>
此 cmdlet 将按远程共享 BLOB 存储名称获取远程共享 BLOB 存储对象。
Get-SPRemoteShareBlobStore -ContentDatabase <SPContentDatabasePipeBind>
此 cmdlet 将获取给定内容数据库的所有远程共享 BLOB 存储对象。
Get-SPRemoteShareBlobStore
此 cmdlet 将获取当前场的所有远程共享 BLOB 存储对象。
可以随时更改远程共享 BLOB 存储的配置。
Set-SPRemoteShareBlobStore -RemoteShareBlobStore <SPRemoteShareBlobStorePipeBind> [-Location <String>] [-BlobStoreCredential <PSCredential>] [-PoolCapacity <int>]
cmdlet 参数为:
-RemoteShareBlobStore <SPRemoteShareBlobStorePipeBind>
需要更改远程共享 BLOB 存储。 它可以是远程共享 BLOB 存储对象,也可以是远程共享 BLOB 存储名称。
[-Location <String>]
BLOB 存储需要切换到的 UNC 路径。 此参数更改使用的 SMB 存储的 UNC 路径。 它不会将 BLOB 从旧的 SMB 存储移动到新的 SMB 存储。
[-BlobStoreCredential <PSCredential>]
PSCredential 对象,BLOB 存储需要切换该对象才能应用该对象。
[-PoolCapacity <int>]
BLOB 存储中使用的每个池的容量。
将 BLOB 从一个远程共享 BLOB 存储迁移到另一个远程共享 BLOB 存储
一个内容数据库可以有多个 BLOB 存储,并且在任何时候,这些 BLOB 存储中只有一个可用于写入,而其他 BLOB 存储只能用于 READ。 有时,需要将 BLOB 从一个 BLOB 存储移动到另一个 BLOB 存储。 例如,可能需要设置新的 SMB 存储,并将所有 BLOB 移动到新的 SMB 存储。 在这种情况下,需要将数据从 SQL 或旧 BLOB 存储迁移到新的 BLOB 存储。
通过遵循以下示例,可以将 BLOB 从旧的 BLOB 存储迁移到通过提交 Migrate () 创建的新活动 BLOB 存储。
$db = Get-SPContentDatabase $YourDatabaseName
$rbss = $db.RemoteBlobStorageSettings
$rbss.SetActiveProviderName($YourBlobStoreName)
$rbss.Migrate()
如果要将 BLOB 存储中的 BLOB 迁移回 SQL 内容数据库,可以按照以下示例将活动提供程序设置为空。
$db = Get-SPContentDatabase $YourDatabaseName
$rbss = $db.RemoteBlobStorageSettings
$rbss.SetActiveProviderName()
$rbss.Migrate()
注销远程共享 BLOB 存储
可以使用 cmdlet Unregister-SPRemoteShareBlobStore
取消注册远程共享 BLOB 存储。
Unregister-SPRemoteShareBlobStore -RemoteShareBlobStore <SPRemoteShareBlobStorePipeBind> [-Force]
cmdlet 参数为:
RemoteShareBlobStore <SPRemoteShareBlobStorePipeBind>
需要注销远程共享 BLOB 存储。 它可以是远程共享 BLOB 存储对象,也可以是远程共享 BLOB 存储名称。 如果 RemoteShareBlobStore 在内容数据库中处于活动状态,或者此 Blob 存储中仍有 BLOB 正在使用,则此 cmdlet 将引发异常。
[-Force]
即使 RemoteShareBLOBStore 未处于活动状态但 BLOB 仍在使用中,此开关也会强制取消注册。 如果需要注销此类 BLOB 存储,可以使用此开关运行 cmdlet,以忽略在 BLOB 存储中检测正在使用的 BLOB。 如果 Blob 存储在内容数据库中处于活动状态,则此 cmdlet 将引发异常,以防止意外地注销正在使用的 BLOB 存储。
我们不建议使用此 -Force 开关,因为它会将 SMB 存储中的 BLOB 保留在后面,并使 SharePoint 内容无法访问。 建议先迁移 BLOB,然后注销远程共享 BLOB 存储。
验证远程共享 BLOB 存储的数据一致性
可以通过 cmdlet Test-SPRemoteShareBlobStore
验证内容数据库使用的远程共享 BLOB 存储。
Test-SPRemoteShareBlobSotore -ContentDatabase <SPContentDatabasePipeBind> [-LogPath <String>]
cmdlet 参数为:
-ContentDatabase <SPContentDatabasePipeBind>
需要针对内容数据库进行验证
[-LogPath <String>]
验证日志的路径。