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 после запуска этой команды.