Infinispan初始状态转移挂起并超时

时间:2014-06-26 18:42:29

标签: jboss7.x infinispan jgroups

我正在尝试使用共享的Infinispan缓存(异步复制)对一对服务器进行集群。一个人总是成功启动,并使用JDBC数据库正确注册。当另一个启动时,它会正确地注册数据库,我看到它们之间有一堆聊天,然后,在等待来自第二台服务器的响应时,我得到了

`org.infinispan.commons.CacheException: Initial statue transfer timed out`

我认为这只是一个配置问题,但我不确定如何调试我的配置问题。我花了几天时间配置和重新配置我的Infinispan XML和我的JGroups.xml:

Infinispan:

<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:infinispan:config:6.0"
xsi:schemaLocation="urn:infinispan:config:6.0     http://www.infinispan.org/schemas/infinispan-config-6.0.xsd
                   urn:infinispan:config:remote:6.0 http://www.infinispan.org/schemas/infinispan-cachestore-remote-config-6.0.xsd"
xmlns:remote="urn:infinispan:config:remote:6.0"
>

    <!-- *************************** -->
    <!-- System-wide global settings -->
    <!-- *************************** -->

    <global>
        <shutdown hookBehavior="DEFAULT"/>
        <transport clusterName="DSLObjectCache">
            <properties>
                <property name="configurationFile" value="jgroups.xml"/>
            </properties>
        </transport>
        <globalJmxStatistics enabled="false" cacheManagerName="Complex.com"/>
    </global>
    <namedCache name="ObjectCache">
        <transaction transactionMode="TRANSACTIONAL" />
        <locking
            useLockStriping="false"
        />
        <invocationBatching enabled="true"/>
        <clustering mode="replication">
            <async asyncMarshalling="true" useReplQueue="true" replQueueInterval="100" replQueueMaxElements="100"/>
            <stateTransfer fetchInMemoryState="true" />
        </clustering>
        <eviction strategy="LIRS" maxEntries="500000"/>
        <expiration lifespan="86400000" wakeUpInterval="1000" />
    </namedCache>

    <default>
        <!-- Configure a synchronous replication cache -->
        <locking
            useLockStriping="false"
        />
        <clustering mode="replication">
            <async asyncMarshalling="true" useReplQueue="true" replQueueInterval="100" replQueueMaxElements="100"/>
            <stateTransfer fetchInMemoryState="true" />
        </clustering>
        <eviction strategy="LIRS" maxEntries="500000"/>
        <expiration lifespan="86400000" wakeUpInterval="1000" />
        <persistence>
            <cluster remoteCallTimeout="60000" />
        </persistence>
    </default>
</infinispan>

的jboss.xml:

<config xmlns="urn:org:jgroups"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.0.xsd">
    <!-- Default the external_addr to #DEADBEEF so we can see errors coming through
        on the backend -->
    <TCP
        external_addr="${injected.external.address:222.173.190.239}"
        receive_on_all_interfaces="true"
        bind_addr="0.0.0.0"
        bind_port="${injected.bind.port:12345}"
        conn_expire_time="0"
        reaper_interval="0"
        sock_conn_timeout="20000"
        tcp_nodelay="true"

    />
    <JDBC_PING
        datasource_jndi_name="java:jboss/datasources/dsl/control"
    />
    <MERGE2 max_interval="30000" min_interval="10000"/>
    <FD_SOCK
        external_addr="${injected.external.address:222.173.190.239}"
        bind_addr="0.0.0.0"
    />
    <FD timeout="10000" max_tries="5"/>
    <VERIFY_SUSPECT timeout="1500"
        bind_addr="0.0.0.0"
    />
    <pbcast.NAKACK use_mcast_xmit="false"
              retransmit_timeouts="300,600,1200,2400,4800"
              discard_delivered_msgs="true"/>
    <UNICAST3 ack_batches_immediately="true"
    />
    <RSVP ack_on_delivery="true"
        throw_exception_on_timeout="true"
        timeout="1000"
    />
    <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                  max_bytes="400000"/>
    <pbcast.GMS print_local_addr="true" join_timeout="5000"
           view_bundling="true" view_ack_collection_timeout="5000"/>
    <FRAG2 frag_size="60000"/>
    <pbcast.STATE_SOCK
        bind_port="54321"
        external_addr="${injected.external.address:222.173.190.239}"
        bind_addr="0.0.0.0"
    />
    <pbcast.FLUSH timeout="1000"/>
</config>

坦率地说,我已经尝试过我能想到的每个配置选项,而且我不确定为什么复制会保持超时。这些服务器之间的所有通信都是敞开的。很抱歉只是转储了这么多XML,但我甚至不确定如何收集更多信息。

1 个答案:

答案 0 :(得分:4)

继续探索表明Infinispan正在将日志推送到 server.log ,但是 - 由于我的配置,这在控制台上没有重复。进一步检查发现,我在缓存对象中留下了一个不可序列化的元素 - 使其无法写入线路并进行传输。日志非常特定,一旦我意识到日志的写入位置,这实际上是一个非常容易跟踪的问题。

如果你从未来来到这里,我的建议是在工作服务器上尽可能地记录每一个日志,看看会出现什么。