Infinispan 初始状态传输挂起并超时

Fra*_*Man 1 jgroups infinispan jboss7.x

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

`org.infinispan.commons.CacheException: Initial statue transfer timed out`
Run Code Online (Sandbox Code Playgroud)

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

无限跨度:

<?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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*Man 5

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

如果你从未来来到这里,我的建议是在工作服务器上跟踪你能找到的每一个日志,看看会发生什么。