"实验"用于hibernate搜索和infinispan的JGroups Master / Slave后端的状态

时间:2015-06-22 17:47:10

标签: hibernate wildfly hibernate-search infinispan jgroups

我们使用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
  • 配置jgroups以使用TCP堆栈
  • 运行TCPPING而不是MPing(我们计划在云环境中运行,其中multicast / udp会导致问题 - 我们可能会转向JDBCPing以使其在某些时候更加灵活。)
  • 我们运行每个节点的以下系统属性(当然,每个节点的名称/端口更改)

系统属性:

<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>)已显示在节点恢复时干净地恢复索引。在脱机期间,另一个节点接管主节点,集群平稳运行。

0 个答案:

没有答案