我们使用hibernate-search对wildfly 8.2中的实体进行全文索引(使用hflynate / hibernate-search和infinspan库,包括wildfly 8.2)。作为独立节点运行或在具有专用hibernate搜索主机和org.hibernate.search.store.impl.FSDirectoryProvider
的域中运行已经好几年(和jboss版本)。
我们现在希望将此系统部署到HA集群环境中,并在负载平衡代理后面运行wildfly 8.2。我们希望拥有一个动态可扩展的集群,在域主服务器或hibernate-search主服务器的意义上没有故障点,并且已针对没有域的独立节点进行了配置。为了选举HS主控,我们使用jgroups后端并复制我们使用infinispan提供程序的hibernate-search数据file-store
以在重新启动之间保留数据。
我得到了这个并且非常快速地运行并且非常兴奋,因为它看起来像一个强大且可扩展的场景,但是我有点犹豫将这个配置投入生产,因为jgroups后端已经被称为&34;实验& #34; (在某些论坛"非常实验性的#34;)。后端的当前状态是什么?人们目前是否在生产中使用它?我们可以做些什么来最小化使用此配置的风险?
另外,有没有人有过在这个星座中使用infinispan和hibernate-search的经验?关于replicated-cache
的大多数设置只是从现有示例中重复使用,如果有人对这些设置有一些提示或建议,例如它会扩展到索引~50GB?我非常感谢任何有关类似场景的反馈或经验。
配置主要使用此处的参考资料放在一起:
我们采取的详细步骤如下。
standalone-ha-full.xml
系统属性:
<system-properties>
<property name="jboss.node.name" value="node2" />
<property name="jboss.socket.binding.port-offset" value="889" />
<!-- Automatic master election via JGroups, requires Infinispan directory provider -->
<property name="hibernate.search.default.worker.backend" value="jgroups"/>
<!-- Enable cluster-replicated index, but the default configuration does not enable any
form of permanent persistence for the index, we do this with cache-container/file-store below -->
<property name="hibernate.search.default.directory_provider" value="infinispan" />
<property name="hibernate.search.infinispan.chunk_size" value="300000000" />
<property name="hibernate.search.reader.strategy" value="shared" />
<property name="hibernate.search.worker.execution" value="sync" />
<property name="hibernate.search.default.optimizer.operation_limit.max" value="10000"/>
<property name="hibernate.search.default.optimizer.transaction_limit.max" value="1000"/>
<!-- Use CacheManager defined in WildFly configuration file, e.g., standalone.xml -->
<property name="hibernate.search.infinispan.cachemanager_jndiname" value="java:jboss/infinispan/container/hibernate-search"/>
</system-properties>
我们为infinispan定义了以下<cache-container>
:
<!-- BEGIN HIBERNATE INFINISPAN CACHE -->
<cache-container name="hibernate-search" jndi-name="java:jboss/infinispan/container/hibernate-search" start="EAGER">
<transport lock-timeout="330000"/>
<replicated-cache name="LuceneIndexesMetadata" start="EAGER" mode="SYNC" remote-timeout="330000">
<locking striping="false" acquire-timeout="330000" concurrency-level="500"/>
<transaction mode="NONE"/>
<eviction strategy="NONE" max-entries="-1"/>
<expiration max-idle="-1"/>
<state-transfer enabled="true" timeout="480000"/>
<file-store preload="true" purge="false" passivation="false" relative-to="jboss.home.dir" path="..\namespaces\mc\infinispan-file-store">
<write-behind/>
</file-store>
<indexing index="NONE"/>
</replicated-cache>
<replicated-cache name="LuceneIndexesData" start="EAGER" mode="SYNC" remote-timeout="25000">
<locking striping="false" acquire-timeout="330000" concurrency-level="500"/>
<transaction mode="NONE"/>
<eviction strategy="NONE" max-entries="-1"/>
<expiration max-idle="-1"/>
<state-transfer enabled="true" timeout="480000"/>
<file-store preload="true" purge="false" passivation="false" relative-to="jboss.home.dir" path="..\namespaces\mc\infinispan-file-store">
<write-behind/>
</file-store>
<indexing index="NONE"/>
</replicated-cache>
<replicated-cache name="LuceneIndexesLocking" start="EAGER" mode="SYNC" remote-timeout="25000">
<locking striping="false" acquire-timeout="330000" concurrency-level="500"/>
<transaction mode="NONE"/>
<eviction strategy="NONE" max-entries="-1"/>
<expiration max-idle="-1"/>
<state-transfer enabled="true" timeout="480000"/>
<indexing index="NONE"/>
</replicated-cache>
</cache-container>
<!-- END HIBERNATE INFINISPAN CACHE -->
根据我的理解(我的测试似乎在实践中),infinispan会将其数据序列化为已配置的<file-store>
,然后在节点重新启动之间保留数据。甚至一些灾难性测试(例如kill -9 <jboss-pid>
)已显示在节点恢复时干净地恢复索引。在脱机期间,另一个节点接管主节点,集群平稳运行。