lucene - DotNetNuke Lucene 搜索在负载平衡环境中不工作 'Lock obtain timed out',如何解决?

标签 lucene dotnetnuke dotnetnuke-9

我们有一个 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 诉 09.02.00 (366)
.NET Framework 4.6

最佳答案

设置部分中有一个“调度程序”工具,其中包含所有 CRON/后台作业功能。

DNN Scheduler Tool

后台作业之一是“搜索:站点爬虫”作业,它负责为网站编制索引。当该作业同时在两台服务器上运行时,会发生意想不到的冲突。为防止这种情况发生,您可以使用“服务器”设置将作业配置为仅在指定服务器上运行。

Search: Site Crawler DNN Background Job

将作业配置为仅在一台服务器上运行后,问题没有再出现,搜索仍然可以在两台服务器上运行。

感谢@Sanjay 为我指明了正确的方向。

关于lucene - DotNetNuke Lucene 搜索在负载平衡环境中不工作 'Lock obtain timed out',如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54577226/

相关文章:

c# - 自定义模块,可以将模块添加到模块中以在 DNN 9.2 中创建扩展模块

search - 内部对象字段上的 Elasticsearch 术语过滤器不匹配

search - 使用 Lucene 处理数据库数据

java - TextDatasetFactory 有问题

css - 仅在移动 View 上存在 DNN/Bootstrap-3 导航问题

css - DNN 皮肤背景位置被忽略

java - Lucene:按数字存储字段上的一组允许值进行过滤

c# - 使用Web API和javascript在asp.net中将excel文件从服务器下载到本地计算机

azure - DNN 9.01.01 导出/导入卡在已提交状态