lucene - DotNetNuke Lucene 搜索在负载平衡环境中不起作用“锁定获取超时”,如何解决?
问题描述
我们有一个 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
解决方案
推荐阅读
- awk - 使用 awk 删除过滤组
- ios - Cocoapods 未安装最新版本的 FBSDK
- java - 如何使用增强的for循环更改字符串数组中的字符串内容?
- python - 绘制二维高斯的椭圆轮廓
- stm32 - STM32CubeMx 中的问题
- c# - 为什么 Math.Round 在十进制和双精度之间的行为不同
- flutter - Flutter TextFormField Validador 始终为真
- python - 我无法在我的 jupyter 笔记本中运行 ![alt text](img.png) 降价代码
- python - 从 pptx 中提取文本并在 excel 中导出
- architecture - 指令在内存中是如何排列的?