【问题标题】:Using Lucene in a clustered environment with shared NFS在具有共享 NFS 的集群环境中使用 Lucene
【发布时间】:2013-07-29 10:39:53
【问题描述】:

我在集群 Websphere 环境中使用 Lucene 4.3.1。双方应共享一个位于共享 NFS 卷上的索引。

我不断收到以下堆栈跟踪:

Lock obtain timed out: NativeFSLock@/<pathToIndex>/write.lock
        org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/<pathToIndex>/write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:84)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:667)

我使用以下代码获取目录:

directory = FSDirectory.open( indexPath );

我在 ejb 的方法中打开和关闭写入器(在集群成员上):

public void removeWikiDocument( long oid ) {
    IndexWriter writer = new IndexWriter( directory, config );
    Term t = new Term( OID, Long.toString( oid ) );
    writer.deleteDocuments( t );
    writer.commit();
    writer.close();
}

有谁知道我做错了什么,在这种情况下正确的使用方法是什么。

【问题讨论】:

    标签: lucene locking cluster-computing


    【解决方案1】:

    除了前面的答案之外,强烈建议不要将 NFS 用于 Lucene 索引,因为它会严重损害性能。 有关更多信息,请参阅此类讨论: http://lucene.472066.n3.nabble.com/Lucene-index-on-NFS-td4011301.html

    还有一个请求功能可以完全支持 NFS(这意味着处理延迟删除): https://jira.atlassian.com/browse/JRA-33887

    【讨论】:

      【解决方案2】:

      不同的JVM不可能在写模式下访问同一个索引。您只能使用只读索引来执行此操作。

      Lucene 索引必须由单个 JVM 管理。

      如果您想在集群环境中部署 lucene,您必须查看 Lucene SolrCloudElasticSearch

      【讨论】:

        【解决方案3】:

        我在使用 Lucene 和 Hibernate Search 时遇到了同样的问题。在官方的 Hibernate Search 文档中,据说可以在集群模式下使用具有共享文件系统的 Lucene,如 here 所述。

        您必须确保 exclusive_index_use 值为 false,它指定第一个节点获得索引锁,直到关闭(默认情况下为 true),如 @ 解释987654322@。我认为应该有一种方法可以为没有 Hibernate Search 的 Lucene 指定此设置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-27
          • 1970-01-01
          • 1970-01-01
          • 2021-05-27
          相关资源
          最近更新 更多