【发布时间】:2017-04-12 22:16:03
【问题描述】:
最近我使用 HAProxy 在一台机器上配置了两个 Tomcat(A 和 B)的集群(一切正常)。我已经在两个 Web 服务器中部署了 Geonetwork WAR。我启动 Tomcat A 没有问题,但是当启动 Tomcat B 时,当它的“geonetwork.war”尝试访问 Lucen 索引时出现错误,当 Tomcat A 启动时,由于 write.lock 生成了一个锁(我想)。
得到的错误是这样的:
2016-11-22 20:47:59,700 错误 [geonetwork.index] - 打开分类读取器/写入器时出错 org.apache.lucene.store.LockObtainFailedException:锁定获取超时:NativeFSLock@/data/geonetwork/geonetwork_data_agrologia/index/taxonomy/write.lock 在 org.apache.lucene.store.Lock.obtain(Lock.java:89) 在 org.apache.lucene.index.IndexWriter.(IndexWriter.java:724) 在 org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.openIndexWriter(DirectoryTaxonomyWriter.java:265) 在 org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.(DirectoryTaxonomyWriter.java:192) 在 org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.(DirectoryTaxonomyWriter.java:315) 在 org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.(DirectoryTaxonomyWriter.java:332) 在 org.fao.geonet.kernel.search.index.TaxonomyIndexTracker.init(TaxonomyIndexTracker.java:46) 在 org.fao.geonet.kernel.search.index.TaxonomyIndexTracker.(TaxonomyIndexTracker.java:40) 在 org.fao.geonet.kernel.search.index.LuceneIndexLanguageTracker.lazyInit(LuceneIndexLanguageTracker.java:75) 在 org.fao.geonet.kernel.search.index.LuceneIndexLanguageTracker.acquire(LuceneIndexLanguageTracker.java:173) 在 org.fao.geonet.kernel.search.SearchManager.getIndexReader(SearchManager.java:1407) 在 org.fao.geonet.kernel.search.SearchManager.getNewIndexReader(SearchManager.java:1411) 在 org.fao.geonet.kernel.search.SearchManager.getDocsChangeDate(SearchManager.java:1066) 在 org.fao.geonet.kernel.DataManager.init(DataManager.java:240) 在 org.fao.geonet.Geonetwork.start(Geonetwork.java:378) 在 jeeves.server.JeevesEngine.initAppHandler(JeevesEngine.java:454) 在 jeeves.server.JeevesEngine.init(JeevesEngine.java:175) 在 jeeves.server.sources.http.JeevesServlet.init(JeevesServlet.java:82) 在 javax.servlet.GenericServlet.init(GenericServlet.java:158) 在 org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099) 在 org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:989) 在 org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4913) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5223) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) 在 org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:952) 在 org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1823) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)
有什么方法可以避免 Lucene 锁定或配置 Geonetwork 应用程序以允许在集群/负载平衡时访问这些索引?
【问题讨论】:
-
两个 lucene 实例不能毫无问题地使用(读取和写入)相同的索引(因此锁定)。您应该更改用于存储数据的路径,每个 tomcat 实例一份。
-
我会尝试这个替代方案。谢谢
标签: tomcat load-balancing haproxy geonetwork