在 SharePoint Server 中管理分散式快取服務

 

**適用版本:**SharePoint Server 2013, SharePoint Server 2016

**上次修改主題的時間:**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 或 7168 MB。這就是分散式快取服務的快取大小。

    4. 依據情況,使用下列程序來更新記憶體配置。

變更分散式快取服務的記憶體配置

使用此程序來重新設定分散式快取服務快取大小的記憶體配置。

  1. (選用) 若要查看伺服器上分散式快取服務的現有記憶體配置,請在 SharePoint 管理命令介面 命令提示字元中執行下列命令:

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

    其中:

    • 電腦名稱 為執行 SharePoint 管理命令介面 Cmdlet 的伺服器上電腦名稱。
  2. 停用所有快取主機上的分散式快取服務。若要停止分散式快取服務,請前往管理中心的 [伺服器上的服務],並 [停止] 伺服器陣列上所有快取主機的分散式快取服務。

  3. 若要重新設定分散式快取服務的快取大小,請僅在任何快取主機上於 SharePoint 管理命令介面 命令提示字元中執行下列命令一次:

    Update-SPDistributedCacheSize -CacheSizeInMB CacheSize
    

    其中:

    • 快取大小 是所分派的快取大小記憶體配置 (MB)。在前面的範例中,針對總記憶體為 16 GB 的伺服器,計算出來的快取大小為 7168 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. 複製下列變數宣告,並將它們貼到文字編輯器 (例如 [記事本]) 中。請設定您組織特有的參數值。在步驟 3 中儲存檔案,並將它命名為 Audiences.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. 複製下列變數宣告,並將它們貼到文字編輯器 (例如 [記事本]) 中。請設定您組織特有的參數值。在步驟 3 中儲存檔案,並將它命名為 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 Cache/Windows Server Appfabric Cache 的最佳做法應用程式組態設定 (Windows Server AppFabric Caching)。如需 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 中的摘要和分散式快取服務