代码之家  ›  专栏  ›  技术社区  ›  Swimburger

在负载均衡环境下,dotnetnuke-lucene搜索不工作“锁获取超时”,如何修复?

  •  2
  • Swimburger  · 技术社区  · 6 年前

    我们有一个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框架4.6

    2 回复  |  直到 6 年前
        1
  •  2
  •   Sanjay Mehrotra    6 年前

        2
  •  2
  •   Swimburger    6 年前
    推荐文章