在 SharePoint Server 中管理分布式缓存服务

 

**上一次修改主题:**2017-12-05

**摘要:**了解如何在 SharePoint Server 2013 和 SharePoint Server 2016 中配置和管理分布式缓存服务。

若要在 SharePoint Server 中对分布式缓存服务执行管理和操作任务,管理员必须执行特定、有序的过程。本文介绍如何对分布式缓存服务执行多项管理和操作任务。

重要

如果不遵循本文中列出的过程,分布式缓存服务最终会处于不运行或不可恢复状态。在极端情况下,您可能必须重新构建服务器场。分布式缓存依赖 Windows Server AppFabric 作为必备组件。不要在“控制面板”的“管理工具”中的“服务”窗口中管理“AppFabric 缓存服务”。不要使用“开始”菜单上名为“AppFabric for Windows Server”的文件夹中的应用程序。

重要

请勿使用包含符号 $ 的服务帐户名称。

本文内容:

  • 启动和停止分布式缓存服务

  • 更改分布式缓存服务的内存分配

  • 在分布式缓存群集中添加或删除服务器

  • 正常关闭分布式缓存服务

  • 更改服务帐户

  • 使用 Windows PowerShell 脚本微调分布式缓存服务

  • 修复缓存主机

启动和停止分布式缓存服务

执行维护和操作任务的管理员可能需要启动和停止分布式缓存服务。其中一些任务包括:

  • 在安装时更改服务器场的默认配置。在安装时会在所有 SharePoint 服务器上启动分布式缓存服务。管理员可能需要在服务器场中的某些服务器上停止分布式缓存服务。

  • 更新服务器,并且 SharePoint Server 服务器场中只有一台分布式缓存服务器。

停止缓存会导致部分数据丢失。源缓存依赖于分布式缓存服务。标签和文档活动仅保存到源缓存中,而不会保留在内容数据库中。在停止分布式缓存服务后,标签和文档活动会丢失。如果启动分布式缓存服务,则在源缓存重新填充计时器作业运行时执行重新填充。维护标签和文档活动的一个方法是使用下文正常关闭分布式缓存服务中所述的方法。在使用正常关闭分布式缓存服务方法时,所有缓存数据都会先从一台服务器移到另一台服务器后再停止分布式缓存服务。

备注

如果缓存主机是缓存群集的一部分,请不要按此处所述启动或停止分布式缓存服务,而是应查看下文中的在分布式缓存群集中添加或删除服务器。

使用管理中心启动和停止分布式缓存服务

  1. 在管理中心中,单击“应用程序管理”。

  2. 在“服务应用程序”中,单击“管理服务器上的服务”。

  3. 在“服务器上的服务”页上,找到“分布式缓存”服务。

  4. 如果在启动分布式缓存服务后需要停止此服务,则在“操作”下,单击“停止”。如果在停止分布式缓存服务后需要启动此服务,则在“操作”下,单击“启动”。

使用 SharePoint 2016 命令行管理程序 启动分布式缓存服务

在 SharePoint 命令行管理程序 命令提示符处,运行以下命令:

$instanceName ="SPDistributedCacheService Name=AppFabricCachingService"
$serviceInstance = Get-SPServiceInstance | ? {($_.service.tostring()) -eq $instanceName -and ($_.server.name) -eq $env:computername}
$serviceInstance.Provision()

使用 SharePoint 2016 命令行管理程序 停止分布式缓存服务

在 SharePoint 命令行管理程序 命令提示符处,运行以下命令:

$instanceName ="SPDistributedCacheService Name=AppFabricCachingService"
$serviceInstance = Get-SPServiceInstance | ? {($_.service.tostring()) -eq $instanceName -and ($_.server.name) -eq $env:computername}
$serviceInstance.Unprovision()

更改分布式缓存服务的内存分配

在安装 SharePoint Server 时,将向分布式缓存服务分配 10% 的服务器总物理内存。分布式缓存服务会将分配的一半内存用于数据存储(也称为缓存大小),并将分配的另一半内存用于内存管理开销。在缓存数据增长时,分布式缓存服务会使用分配的全部 10% 的内存。

在以下应用场景中,您应增加分布式缓存服务的内存分配:

  • 向服务器添加物理内存时。分布式缓存服务不会自动重新计算 10% 的内存分配,因此当您增加服务器上的总物理内存时,必须手动增加分布式缓存服务的内存分配。

  • 在您的服务器场拥有专门的分布式缓存服务器时。使用以下方法可计算可向分布式缓存服务分配的内存量:

    1. 确定服务器的总物理内存。例如,我们将使用 16 GB 作为服务器上可用的总物理内存。

    2. 为缓存主机上运行的其他过程和服务保留 2 GB 内存。例如,16 GB – 2 GB = 14 GB。将其余的内存分配给分布式缓存服务。

    3. 将其余内存的一半转换为 MB 数。例如,14 GB/2 = 7 GB 或 7,168 MB。此数值是分布式缓存服务的缓存大小。

    4. 使用以下过程可相应地更新内存分配。

更改分布式缓存的内存分配

使用此过程重新配置分布式缓存服务的缓存大小的内存分配。

  1. (可选)要检查服务器上分布式缓存服务的现有内存分配,请在 SharePoint 命令行管理程序 命令提示符处运行以下命令:

    Use-CacheCluster
    Get-AFCacheHostConfiguration -ComputerName ComputerName -CachePort "22233"
    

    其中:

    • ComputerName 是您在其上运行 SharePoint 命令行管理程序 cmdlet 的服务器的计算机名称。
  2. 停止所有缓存主机上的分布式缓存服务。要停止分布式缓存服务,请转至管理中心的“服务器上的服务”,并“停止”服务器场中所有缓存主机上的分布式缓存服务。

  3. 要重新配置分布式缓存服务的缓存大小,请在 SharePoint 命令行管理程序 命令提示符处在任何缓存主机上仅运行以下命令一次:

    Update-SPDistributedCacheSize -CacheSizeInMB CacheSize
    

    其中:

    • Cachesize 是缓存大小的内存分配(以 MB 为单位)。在之前的示例中,对于总内存为 16 GB 的服务器,计算出的缓存大小为 7,168 MB。
  4. 重新启动所有缓存主机上的分布式缓存服务。要重新启动分布式缓存服务,请转至管理中心的“服务器上的服务”,并“重新启动”服务器场中所有缓存主机上的分布式缓存服务。

在分布式缓存群集中添加或删除服务器

管理员可以在缓存群集中添加或删除服务器,也可能需要在缓存群集中删除某服务器,对此服务器执行某些操作或维护任务,然后在缓存群集中重新加入或添加此服务器。在删除此服务器时,需要先停止此服务器上的分布式缓存服务,然后撤消其注册。撤消分布式缓存服务的注册意味着管理员不能在管理中心的“服务器上的服务”页上看到列出的分布式缓存服务。同样,在添加服务器时,需要在此服务器上注册分布式缓存服务,然后再启动它。注册分布式缓存服务意味着管理员将会在管理中心的“服务器上的服务”页上看到列出的分布式缓存服务。

使用以下过程可在缓存群集中添加和删除服务器。以下 SharePoint 命令行管理程序 cmdlet 需在添加或删除的服务器上运行。

备注

在执行以下过程之前,请确保防火墙允许入站 ICMP (ICMPv4) 流量通过它。有关详细信息,请参阅防火墙配置注意事项

将服务器添加到缓存群集并使用 SharePoint 2016 命令行管理程序 启动分布式缓存服务

在 SharePoint 命令行管理程序 命令提示符处,运行以下命令:

Add-SPDistributedCacheServiceInstance

使用 SharePoint 2016 命令行管理程序 从缓存群集中删除服务器

在 SharePoint 命令行管理程序 命令提示符处,运行以下命令:

Remove-SPDistributedCacheServiceInstance

重要

此过程将停止缓存服务,非持久化的缓存数据都将丢失。如果希望保留缓存的数据,请使用下一节中所述的正常关机过程。

使用 PowerShell 脚本正常关闭分布式缓存服务

在 SharePoint Server 2016 服务器场中,如果一台或多台缓存主机运行分布式缓存服务,则存在缓存群集。在 SharePoint Server 2016 服务器场中,存在一个缓存,并且此缓存跨越缓存群集。当将更新应用到服务器时,管理员可能需要将缓存内容移动到另一个缓存主机上。要防止移动缓存内容时发生相关数据丢失,您需要在以下过程中使用 PowerShell 脚本执行正常关闭服务器操作。正常关闭过程可将所有缓存数据从运行正常关闭过程的缓存主机传输到服务器场中的其他缓存主机中。运行此传输过程需要 15 分钟或更长时间,具体取决于缓存中存在的项目数。

使用 PowerShell 脚本正常关闭分布式缓存

使用以下 PowerShell 脚本正常关闭分布式缓存服务器,以将缓存的内容移动到另一台缓存主机。确保您根据需要指定要关闭的正确节点并更改脚本,为组织指定正确的参数。

备注

如果您使用以下过程中的 PowerShell 脚本执行正常关闭,则无需从缓存群集删除缓存主机。

  1. 确认您满足以下最低要求:

  2. 复制以下变量声明并粘贴到文本编辑器(如记事本)中。设置特定于您的组织的参数值。保存该文件,并将其命名为 GracefulShutdown.ps1。

    备注

    可以使用其他文件名,但是必须将文件保存为扩展名为 .ps1 的 ANSI 编码文本文件。

    ## Settings you may want to change for your scenario ##
    $startTime = Get-Date
    $currentTime = $startTime
    $elapsedTime = $currentTime - $startTime
    $timeOut = 900
    
    try
    {
        Write-Host "Shutting down distributed cache host."
     $hostInfo = Stop-CacheHost -Graceful -CachePort 22233 -ComputerName sp2016App.contoso.com
    
     while($elapsedTime.TotalSeconds -le $timeOut-and $hostInfo.Status -ne 'Down')
     {
         Write-Host "Host Status : [$($hostInfo.Status)]"
         Start-Sleep(5)
         $currentTime = Get-Date
         $elapsedTime = $currentTime - $startTime
         $hostInfo = Get-CacheHost -HostName SP2016app.contoso.com -CachePort 22233
     }
    
     Write-Host "Stopping distributed cache host was successful. Updating Service status in SharePoint."
     Stop-SPDistributedCacheServiceInstance
     Write-Host "To start service, please use Central Administration site."
    }
    catch [System.Exception]
    {
     Write-Host "Unable to stop cache host within 15 minutes." 
    }
    

    其中 sp2016App.contoso.com 是所使用的分布式缓存服务器的计算机域名。

  3. 打开 SharePoint 命令行管理程序

  4. 转到保存该文件的目录。

  5. 在 PowerShell 命令提示符处,键入以下命令:

    ./GracefulShutdown.ps1
    

    有关 PowerShell 脚本和.ps1 文件的其他信息,请参阅运行 Windows PowerShell 脚本

更改服务帐户

在首次配置服务器场时,会将服务器场帐户设置为 AppFabric 缓存服务的服务帐户。分布式缓存服务依赖于 AppFabric 缓存服务。若要将 AppFabric 缓存服务的服务帐户更改为管理帐户,请执行以下操作:

  1. 创建管理帐户。

  2. 将此管理帐户设置为 AppFabric 缓存服务的服务帐户。在 SharePoint 命令行管理程序 命令提示符处,运行以下命令:

    $farm = Get-SPFarm
    $cacheService = $farm.Services | where {$_.Name -eq "AppFabricCachingService"}
    $accnt = Get-SPManagedAccount -Identity domain_name\user_name
    $cacheService.ProcessIdentity.CurrentIdentityType = "SpecificUser"
    $cacheService.ProcessIdentity.ManagedAccount = $accnt
    $cacheService.ProcessIdentity.Update() 
    $cacheService.ProcessIdentity.Deploy()
    

    其中 Domain_name\user_name 是管理帐户的域名和用户名。

使用 PowerShell 脚本微调分布式缓存服务

MaxConnectionsToServer 的分布式缓存服务设置通常会根据主机计算机中使用的 CPU 数量进行调整。例如,如果您使用多个内核,然后将 MaxConnectionsToServer 设置设置为相同的 CPU 数量,则计算机通常使用过多的内存并导致过多冻结。在调整 DistributedLogonTokenCacheDistributedViewStateCache 设置时,会出现类似的问题。默认设置为 20 毫秒,但通常令牌缓存设置不是 20 毫秒,这种例外情况经常出现。使用以下 PowerShell 脚本更改对最大连接和超时的设置。

使用 PowerShell 脚本微调分布式缓存服务的具体步骤

  1. 确认您满足以下最低要求:

  2. 复制以下变量声明并粘贴到文本编辑器(如记事本)中。设置特定于您的组织的参数值。保存该文件,并将其命名为 MaxConnections.ps1。

    备注

    可以使用其他文件名,但是必须将文件保存为扩展名为 .ps1 的 ANSI 编码文本文件。

    Add-PSSnapin Microsoft.Sharepoint.Powershell
    
    #DistributedLogonTokenCache
    $DLTC = Get-SPDistributedCacheClientSetting -ContainerType DistributedLogonTokenCache
    $DLTC.MaxConnectionsToServer = 1
    $DLTC.requestTimeout = "3000"
    $DLTC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedLogonTokenCache $DLTC
    
    #DistributedViewStateCache
    $DVSC = Get-SPDistributedCacheClientSetting -ContainerType DistributedViewStateCache
    $DVSC.MaxConnectionsToServer = 1
    $DVSC.requestTimeout = "3000"
    $DVSC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedViewStateCache $DVSC
    
    #DistributedAccessCache
    $DAC = Get-SPDistributedCacheClientSetting -ContainerType DistributedAccessCache
    $DAC.MaxConnectionsToServer = 1
    $DAC.requestTimeout = "3000"
    $DAC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedAccessCache $DAC
    
    #DistributedActivityFeedCache
    $DAF = Get-SPDistributedCacheClientSetting -ContainerType DistributedActivityFeedCache
    $DAF.MaxConnectionsToServer = 1
    $DAF.requestTimeout = "3000"
    $DAF.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedActivityFeedCache $DAF
    
    #DistributedActivityFeedLMTCache
    $DAFC = Get-SPDistributedCacheClientSetting -ContainerType DistributedActivityFeedLMTCache
    $DAFC.MaxConnectionsToServer = 1
    $DAFC.requestTimeout = "3000"
    $DAFC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedActivityFeedLMTCache $DAFC
    
    #DistributedBouncerCache
    $DBC = Get-SPDistributedCacheClientSetting -ContainerType DistributedBouncerCache
    $DBC.MaxConnectionsToServer = 1
    $DBC.requestTimeout = "3000"
    $DBC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedBouncerCache $DBC
    
    #DistributedDefaultCache
    $DDC = Get-SPDistributedCacheClientSetting -ContainerType DistributedDefaultCache
    $DDC.MaxConnectionsToServer = 1
    $DDC.requestTimeout = "3000"
    $DDC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedDefaultCache $DDC
    
    #DistributedSearchCache
    $DSC = Get-SPDistributedCacheClientSetting -ContainerType DistributedSearchCache
    $DSC.MaxConnectionsToServer = 1
    $DSC.requestTimeout = "3000"
    $DSC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedSearchCache $DSC
    
    #DistributedSecurityTrimmingCache
    $DTC = Get-SPDistributedCacheClientSetting -ContainerType DistributedSecurityTrimmingCache
    $DTC.MaxConnectionsToServer = 1
    $DTC.requestTimeout = "3000"
    $DTC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedSecurityTrimmingCache $DTC
    
    #DistributedServerToAppServerAccessTokenCache
    $DSTAC = Get-SPDistributedCacheClientSetting -ContainerType DistributedServerToAppServerAccessTokenCache
    $DSTAC.MaxConnectionsToServer = 1
    $DSTAC.requestTimeout = "3000"
    $DSTAC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedServerToAppServerAccessTokenCache $DSTAC
    
    #DistributedFileLockThrottlerCache
    $DFLTC = Get-SPDistributedCacheClientSetting -ContainerType DistributedFileLockThrottlerCache
    $DFLTC.MaxConnectionsToServer = 1
    $DFLTC.requestTimeout = "3000"
    $DFLTC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedFileLockThrottlerCache $DFLTC
    
    #DistributedSharedWithUserCache
    $DSWUC = Get-SPDistributedCacheClientSetting -ContainerType DistributedSharedWithUserCache
    $DSWUC.MaxConnectionsToServer = 1
    $DSWUC.requestTimeout = "3000"
    $DSWUC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedSharedWithUserCache $DSWUC
    
    #DistributedUnifiedGroupsCache
    $DUGC = Get-SPDistributedCacheClientSetting -ContainerType DistributedUnifiedGroupsCache
    $DUGC.MaxConnectionsToServer = 1
    $DUGC.requestTimeout = "3000"
    $DUGC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedUnifiedGroupsCache $DUGC 
    
    #DistributedResourceTallyCache
    $DRTC = Get-SPDistributedCacheClientSetting -ContainerType DistributedResourceTallyCache
    $DRTC.MaxConnectionsToServer = 1
    $DRTC.requestTimeout = "3000"
    $DRTC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedResourceTallyCache $DRTC
    
    #DistributedHealthScoreCache
    $DHSC = Get-SPDistributedCacheClientSetting -ContainerType DistributedHealthScoreCache
    $DHSC.MaxConnectionsToServer = 1
    $DHSC.requestTimeout = "3000"
    $DHSC.channelOpenTimeOut = "3000"
    Set-SPDistributedCacheClientSetting -ContainerType DistributedHealthScoreCache $DHSC 
    
  3. 打开 SharePoint 命令行管理程序

  4. 转到保存该文件的目录。

  5. 在 PowerShell 命令提示符处,键入以下命令:

    ./MaxConnections.ps1
    

    有关详细信息,请参阅使用 Windows Azure 缓存/Windows Server Appfabric 缓存的最佳做法应用程序配置设置(Windows Server AppFabric 缓存)。有关 Windows PowerShell 脚本和 .ps1 文件的其他信息,请参阅运行 Windows PowerShell 脚本

修复缓存主机

在安装、配置或维护活动中,分布式缓存服务可能进入未运行状态。出现故障的分布式缓存服务的证据将显示在管理中心中的运行状况规则中,或者当用户使用依赖分布式缓存的 SharePoint Server 中的功能时。例如,用户的“我的网站”上的新闻源将开始报告错误。而且,当管理员运行 SharePoint 命令行管理程序 cmdlet 来管理分布式缓存服务时,他们可能收到错误消息“cacheHostInfo 为 null ”。

需要执行两个步骤来修复缓存主机。

在未正常运行的分布式缓存主机上,使用以下过程来恢复分布式缓存主机。

  1. 在 SharePoint 命令行管理程序 命令提示符处,运行 Remove-SPDistributedCacheServiceInstance cmdlet。

  2. 在 SharePoint 命令行管理程序 命令提示符处,运行 Add-SPDistributedCacheServiceInstance cmdlet。

    备注

    如果第 1 步失败,要手动删除分布式缓存服务,请使用以下步骤。

    • 在 SharePoint 命令行管理程序 命令提示符处,键入以下语法。

      $instanceName ="SPDistributedCacheService Name=AppFabricCachingService"
      
      $serviceInstance = Get-SPServiceInstance | ? {($_.service.tostring()) -eq $instanceName -and ($_.server.name) -eq $env:computername}
      
      If($serviceInstance -ne $null)
      {
      $serviceInstance.Delete()
      }
      
    • 分布式缓存服务手动删除后,请再次运行第 2 步。

See also

在 SharePoint Server 中规划源和分布式缓存服务