2012-03-07 59 views
3

我們的應用程序使用嵌入式Solr實例進行搜索。數據目錄位於NFS上,我無法更改該目錄。 Solr的使用非常簡單,只有一個線程可以定期更新索引,並且有多個讀者線程 - 這些都在一個java進程中。沒有其他的Solr交互發生。Solr over NFS問題

使用默認的「solrconfig.xml」我有時會遇到「java.nio.channels.OverlappingFileLockException」。據我所知,原因實際上是「SimpleFSLockFactory」無法正常使用NFS。

問題:

  1. 鑑於以上(沒有併發指數的修改)中描述的應用場景,不應NoLockFactory夠嗎?使用NoLockFactory有什麼缺點?如果我設置NoLockFactory,我會在錯誤日誌中獲得許多條目,說「配置警告:鎖定已禁用」。爲什麼該消息進入錯誤日誌?這真的被認爲是一個錯誤的情況下,爲什麼?

  2. 也許有比使用「NoLockFactory」更好的解決方案?

  3. 不確定這與NFS有關,但有時(很少見)我的索引被破壞,並且在嘗試更新索引時出現很多「java.io.FileNotFoundException:_i.fdx」。除了手動刪除整個索引目錄並從頭開始,沒有其他辦法。爲什麼會發生這種情況,並有沒有優雅的方式來自動檢測破損的索引並恢復?

+0

確定你正在使用簡單的鎖? 'java.nio.channels.OverlappingFileLockException'在我看來更像是一個原生的鎖定錯誤,但我可能是錯誤的。 – javanna 2012-03-07 12:29:50

回答

6

在NFS存儲索引時很容易出現問題,但如果有 NFS來運行,我預測,這個問題從沒有使用的NFSv4,或不正確使用它可能發生。 NFSv4是第一個支持的版本,鎖定字節範圍爲,NFSv2 & v3(很差)支持整個文件,並且不運行portmap,rpc.lockd和rpc.statd - 這些鎖可能只是建議性的(與強制性相反),但絕對不會涵蓋字節範圍鎖定。

java.nio.channels.OverlappingFileLockException

Unchecked exception thrown when an attempt is made to acquire a lock on a region of a file 
that overlaps a region already locked by the same Java virtual machine, or when another 
thread is already waiting to lock an overlapping region of the same file. 

粗略搜索了Lucene郵件列表返回似乎表明,使用Lucene(和推而廣之,SOLR)是通過NFS是一個bad idea許多成果。

將問題鎖定在一邊,性能也可能會相當糟糕。

我知道這不是你所希望的答案,但它是你需要的答案。