在多个服务器之间共享休眠搜索索引

时间:2018-07-10 13:39:58

标签: java hibernate lucene hibernate-search

当前,我们的目标是对2台活动服务器50/50进行负载平衡。

Java应用程序在本地使用休眠搜索,我已经集中了该目录,因此两台服务器都使用同一目录。

我想与多台服务器共享休眠索引 我已设置以下内容,因此从服务器进行读/写操作之间没有锁定   属性名称=“ hibernate.search.default.locking_strategy” value =“无” 有谁知道这是否会成为问题?

1 个答案:

答案 0 :(得分:0)

我无法真正回答您的问题,但我想分享一些注意事项。

我们在生产中使用了这种配置(没有自定义锁定策略),并且尝试了很多问题(过时的nfs文件句柄,死锁和索引损坏)。

我们尝试使用JMS将所有索引更新操作推迟到单个服务器上,但是即使在这种模式下,我们也尝试了一些问题(比起在许多服务器上进行更新操作的模式要少得多)

还要注意,将索引文件放在NFS上是strongly discouraged

我们最终放弃了休眠搜索,对于分布式索引,我个人建议使用弹性搜索。

但是,如此处所述,从理论上讲这是可能的:https://docs.jboss.org/hibernate/search/5.1/reference/en-US/html/search-architecture.html#_lucene

  

此模式的目标是非群集应用程序或目录负责锁定策略的群集应用程序。

我真的不知道“目录”如何处理锁定策略

先前使用的有关休眠搜索的数据源配置:

<!-- hibernate search configuration -->
            <!-- index root folder location -->
            <prop key="hibernate.search.default.indexBase">${env.ftindex.location.root}/${datasource.database}/${ftindex.folder}</prop>
            <!-- global analyzer -->
            <prop key="hibernate.search.analyzer">custom_analyzer</prop>
            <!-- asynchronous indexing for performance considerations -->
            <prop key="org.hibernate.worker.execution">async</prop>
            <!-- max number of indexing operation to be processed asynchronously (before session flush) to avoid OutOfMemoryException -->
            <prop key="hibernate.search.worker.buffer_queue.max">100</prop>