AppFabric не удалось создать DataCache (LMTRepopulationJob FAILS)

Ну, во-первых, я изучаю sharepoint 2013 и следую нескольким учебникам, поэтому пока я просто настраиваю ферму, и все, кажется, работает правильно, за исключением этой службы, которая регистрируется в средстве просмотра событий каждые 5 минут:

Метод Execute определения задания Microsoft.Office.Server.UserProfiles.LMTRepopulationJob (ID 1e573155-b7f6-441b-919b-53b2f05770f7) вызвал исключение. Более подробная информация включена ниже.

Неожиданное исключение в FeedCacheService.BulkLMTUpdate: невозможно создать DataCache. SPDistributedCache, вероятно, не работает..

Я обнаружил, что это задание, которое настроено на выполнение каждые 5 минут

введите описание изображения здесь

Но что касается предположения, что SPDistributedCache, вероятно, не работает, я уже проверил его, и он работает

введите описание изображения здесь

введите описание изображения здесь

Как видите, он на самом деле работает, также я проверил кеш хоста через SP powershell (get-cachehost а также get-cacheclusterhealth) и все же все вроде нормально

введите описание изображения здесь

Тем не менее, когда я выполняю команду get-cache Я получаю только значение по умолчанию, и для того, что я прочитал, должны быть перечислены другие типы кэша, такие как:

DistributedAccessCache_XXXXXXXXXXXXXXXXXXXXXXXXX DistributedBouncerCache_XXXXXXXXXXXXXXXXXXXXXXXX DistributedSearchCache_XXXXXXXXXXXXXXXXXXXXXXXXX DistributedServerToAppServerAccessTokenCache_XXXXXXX DistributedViewStateCache_XXXXXXXXXXXXXXXXXXXXXXX

Среди других, которые я думаю, вероятно, следует включить DataCache

введите описание изображения здесь

До сих пор я уже пробовал несколько обходных путей, но безуспешно

Restart-Service AppFabricCachingService
Remove-SPDistributedCacheServiceInstance
Add-SPDistributedCacheServiceInstance
Restart-CacheCluster

Даже этот скрипт, который, кажется, работает во многих случаях для восстановления службы кэширования AppFabric

$SPFarm = Get-SPFarm
$cacheClusterName = "SPDistributedCacheCluster_" + $SPFarm.Id.ToString()
$cacheClusterManager = [Microsoft.SharePoint.DistributedCaching.Utilities.SPDistributedCacheClusterInfoManager]::Local
$cacheClusterInfo = $cacheClusterManager.GetSPDistributedCacheClusterInfo($cacheClusterName);
$instanceName ="SPDistributedCacheService Name=AppFabricCachingService"
$serviceInstance = Get-SPServiceInstance | ? {($_.Service.Tostring()) -eq $instanceName -and ($_.Server.Name) -eq $env:computername}
$serviceInstance.Delete()
Add-SPDistributedCacheServiceInstance
$cacheClusterInfo.CacheHostsInfoCollection

Хорошо, если у кого-то есть какие-либо предложения, я буду очень признателен, заранее спасибо!

3 ответа

Решение

Это общее сообщение об ошибке, означающее, что реальная проблема не известна (отсюда и слово "Вероятно").

Я считаю, что ключ к решению этой проблемы, когда это, вероятно, не в том, чтобы искать в журнале ULS события, которые произошли непосредственно перед ним. События типа "Неожиданно" не отображаются в журнале событий и часто видны перед общим типом ошибки.

Во многих случаях вы можете увидеть что-то вроде "Файл не найден". Обычно это означает, что указанный файл отсутствует в кэше сборок. Поскольку распределенный кэш использует AppFabric, находящуюся вне Sharepoint, единственный способ для Sharepoint найти свой файл - это посмотреть в кэш сборок. Предварительный установщик sharepoint должен был поместить файлы туда, но это могло произойти сбой, или, возможно, кто-то удалил App Fabric и переустановил его вручную, что привело бы к удалению файлов из сборки, а не к их возврату.

До Restart-CacheCluster Вы можете указать подключение к вашей базе данных SharePoint (имя каталога может не совпадать)

Use-CacheCluster -ConnectionString "Data Source=(SharePoint DB Server)
\\(Optional Instance);Initial Catalog=CacheClusterConfigurationDB;
Integrated Security=True" -ProviderType System.Data.SqlClient

ПРИМЕЧАНИЕ: он не работает постоянно

ПРИМЕЧАНИЕ 2: Если у вас нет именованного экземпляра на сервере БД, просто введите имя вашего сервера без "\".

Если у вас нет каталога, вы можете следовать этому сценарию

***
Remove-Cache default
New-Cache SharePointCache
Get-CacheConfig SharePointCache
Set-CacheConfig SharePointCache -NotificationsEnabled True
***
New-CacheCluster -Provider System.Data.SqlClient -ConnectionString  "Data     Source=(SharePoint DB Server)\\(Optional Instance);Initial Catalog=CacheClusterConfigurationDB;Integrated Security=True" -Size Small

Register-CacheHost -Provider System.Data.SqlClient -ConnectionString  "Data Source=(SharePoint DB Server)\\(Optional Instance);Initial Catalog=CacheClusterConfigurationDB;Integrated Security=True"  -Account "Domain\spservices_account" -CachePort 22233 -ClusterPort 22234  -ArbitrationPort 22235 -ReplicationPort 22236 -HostName  [Name_of_your_server]

Add-CacheHost -Provider System.Data.SqlClient -ConnectionString  "Data Source=(SharePoint DB Server)\\(Optional Instance);Initial Catalog=CacheClusterConfigurationDB;Integrated Security=True" -Account "Domain\spservices_account"

Add-CacheAdmin -Provider System.Data.SqlClient -ConnectionString  "Data Source=(SharePoint DB Server)\\(Optional Instance);Initial Catalog=CacheClusterConfigurationDB;Integrated Security=True" 

Use-CacheCluster

Вы можете указать или проверить конфигурацию вашей базы данных в regedit

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration

Найдите строковое значение ConnectionString и установите строку подключения

Data Source=(SharePoint DB Server)\(Optional Instance);Initial Catalog=CacheClusterConfigurationDB;Integrated Security=True

Для запроса статуса сервера вы можете использовать:

Get-SPServiceInstance | ? {($_.service.tostring()) -eq “SPDistributedCacheService Name=AppFabricCachingService”} | select Server, Status
Get-SPServer | ? {($_.ServiceInstances | % TypeName) -contains "Distributed Cache"} | % Address
Get-AFCache | Format-Table –AutoSize
Get-CacheHost

Дополнительно: если вам нужно изменить учетную запись службы, вы можете выполнить следующую процедуру:

$f = Get-SPFarm
$svc = $f.Services | ? {$_.Name -eq "AppFabricCachingService"}
$acc = Get-SPManagedAccount -Identity "Domain\spservices_account"
$svc.ProcessIdentity.CurrentIdentityType = "SpecificUser"
$svc.ProcessIdentity.ManagedAccount = $acc
$svc.ProcessIdentity.Update()
$svc.ProcessIdentity.Deploy()

Вы изменили учетную запись распределенного кэша из учетной записи фермы? какой номер билда у вас? это одна ферма серверов?

от макушки головы осталось только одно:

Grant-CacheAllowedClientAccount -Account "domain \ ProfileserviceWebAppIdentity"

я бы сделал iisreset и перезапустил сервис owstimer после запуска этой команды.

Другие вопросы по тегам