DotNetNuke Lucene Search не работает 'Время ожидания блокировки истекло' в env с балансировкой нагрузки, как исправить?

У нас есть сайт DotNetNuke, работающий на двух серверах с балансировкой нагрузки. Чтобы обеспечить синхронизацию файлов на этих серверах, мы используем службу репликации файлов.

Поиск работает нормально на DotNetNuke, когда нагрузка не сбалансирована, но в настройке со сбалансированной нагрузкой поиск перестает работать через некоторое время (нет предложений, нет результатов).
Следующее связанное исключение встречается во всех наших файлах журнала:

[D:2][T:31][ERROR] DotNetNuke.Services.Exceptions.Exceptions - Lucene.Net.Store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@D:\Sites\SiteName\App_Data\Search\write.lock
   at Lucene.Net.Store.Lock.Obtain(Int64 lockWaitTimeout)
   at Lucene.Net.Index.IndexWriter.Init(Directory d, Analyzer a, Boolean create, IndexDeletionPolicy deletionPolicy, Int32 maxFieldLength, IndexingChain indexingChain, IndexCommit commit)
   at Lucene.Net.Index.IndexWriter..ctor(Directory d, Analyzer a, MaxFieldLength mfl)
   at DotNetNuke.Services.Search.Internals.LuceneControllerImpl.get_Writer()
   at DotNetNuke.Services.Search.Internals.LuceneControllerImpl.Delete(Query query)
   at DotNetNuke.Services.Search.Internals.InternalSearchControllerImpl.DeleteSearchDocumentInternal(SearchDocument searchDocument, Boolean autoCommit)
   at DotNetNuke.Services.Search.Internals.InternalSearchControllerImpl.DeleteSearchDocumentsByModule(Int32 portalId, Int32 moduleId, Int32 moduleDefId)
   at DotNetNuke.Services.Search.SearchDataStore.StoreSearchItems(SearchItemInfoCollection searchItems)
   at DotNetNuke.Services.Search.SearchEngine.IndexContent()
   at DotNetNuke.Services.Search.SearchEngineScheduler.DoWork()

Я предполагаю, что проблема вызвана тем, что на обоих серверах запущена функция поиска, а служба репликации файлов синхронизирует файлы, вызывающие конфликты.
Как лучше всего решить эту проблему?

  • Добавить правило исключения, чтобы не реплицировать папку индекса поиска, но позволить обоим серверам продолжать поиск?
  • Как-нибудь отключить индексирование одного сервера?
  • Есть другие предложения?

Сведения об установке:
DNN v. 09.02.00 (366)
.NET Framework 4.6


person Swimburger    schedule 07.02.2019    source источник
comment
Связанный: stackoverflow.com/questions/47662841/   -  person Swimburger    schedule 08.02.2019
comment
Я задал тот же вопрос на форуме DNN: dnnsoftware.com/answers/   -  person Swimburger    schedule 08.02.2019


Ответы (2)


В разделе настроек есть инструмент «планировщик», который содержит все функции CRON / фоновых заданий.

Инструмент планировщика DNN

Одно из фоновых заданий - это задание «Поиск: поисковый робот», которое отвечает за индексацию веб-сайта. Когда это задание выполняется одновременно на обоих серверах, возникают непредвиденные конфликты. Чтобы этого не произошло, вы можете настроить задание для запуска только на указанном сервере, используя параметр «Серверы».

Поиск: фоновое задание DNN сканера сайта

После настройки задания для запуска только на одном сервере проблема больше не возникала, и поиск по-прежнему работает на обоих серверах.

Спасибо @Sanjay за то, что указал мне в правильном направлении.

person Swimburger    schedule 12.02.2019

Если я правильно помню, поиск выполняется по расписанию. Вы пытались настроить задачу для запуска только на одном сервере, а затем использовать репликацию файлов для синхронизации с другим сервером.

person Sanjay Mehrotra    schedule 08.02.2019
comment
Это было бы полезно, но я не могу найти документации, как это сделать. - person Swimburger; 08.02.2019
comment
Ваш комментарий помог мне найти решение, спасибо! - person Swimburger; 12.02.2019