JGroups ec2 集群无法连接(超时)与 Hibernate Search / Infinispan 设置

JGroups ec2 cluster fails to connect (times out) with Hibernate Search / Infinispan setup

我正在尝试使用 Infinispan (8.2.4) 和 JGroups 在我的 Elastic Beanstalk (Tomcat8) 环境中设置分布式 Hibernate Search (5.5.4) 集群。

我目前遇到一个节点无法连接到现有集群并且尝试连接超时的问题。

Starting JGroups channel ISPN
variable "${jgroups.s3.pre_signed_delete_url}" in S3_PING could not be substituted; pre_signed_delete_url is removed from properties
variable "${jgroups.s3.prefix}" in S3_PING could not be substituted; prefix is removed from properties
variable "${jgroups.s3.pre_signed_put_url}" in S3_PING could not be substituted; pre_signed_put_url is removed from properties
ip-172-31-24-216-1799: JOIN(ip-172-31-24-216-1799) sent to ip-172-31-14-33-238 timed out (after 5000 ms), on try 1
ip-172-31-24-216-1799: JOIN(ip-172-31-24-216-1799) sent to ip-172-31-14-33-238 timed out (after 5000 ms), on try 2
...
ip-172-31-24-216-1799: JOIN(ip-172-31-24-216-1799) sent to ip-172-31-14-33-238 timed out (after 5000 ms), on try 10
ip-172-31-24-216-1799: too many JOIN attempts (10): becoming singleton
ISPN000094: Received new cluster view for channel ISPN: [ip-172-31-24-216-Channel ISPN local address is ip-172-31-24-216-1799, physical addresses are [127.0.0.1:7800]

我已经在 elastic beanstalk 安全组中启用了所有类型的入站流量,并且可以使用内部 IP 地址成功 ping 组中的其他节点。

这是我的 infinispan.xml 文件

<infinispan
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:infinispan:config:8.2 http://infinispan.org/schemas/infinispan-config-8.2.xsd"
        xmlns="urn:infinispan:config:8.2">

    <jgroups>
        <stack-file name="default-jgroups-ec2" path="default-configs/default-jgroups-ec2.xml"/>
    </jgroups>

    <cache-container name="HibernateSearch" default-cache="default" statistics="false" shutdown-hook="DONT_REGISTER">

        <transport stack="default-jgroups-ec2"/>

        <!-- Duplicate domains are allowed so that multiple deployments with default configuration
            of Hibernate Search applications work - if possible it would be better to use JNDI to share
            the CacheManager across applications -->
        <jmx duplicate-domains="true"/>

        <!-- *************************************** -->
        <!--  Cache to store Lucene's file metadata  -->
        <!-- *************************************** -->
        <replicated-cache name="LuceneIndexesMetadata" mode="SYNC" remote-timeout="25000">          
            <locking striping="false" acquire-timeout="10000" concurrency-level="500" write-skew="false"/>
            <transaction mode="NONE"/>
            <eviction max-entries="-1" strategy="NONE"/>
            <expiration max-idle="-1"/>
            <persistence>
                <file-store path="LuceneIndexes/Metadata" preload="true" />
            </persistence>
            <indexing index="NONE"/>
            <state-transfer enabled="true" timeout="480000" await-initial-transfer="true"/>
        </replicated-cache>

        <!-- **************************** -->
        <!--  Cache to store Lucene data  -->
        <!-- **************************** -->
        <distributed-cache name="LuceneIndexesData" mode="SYNC" remote-timeout="25000">
            <locking striping="false" acquire-timeout="10000" concurrency-level="500" write-skew="false"/>
            <transaction mode="NONE"/>
            <eviction max-entries="-1" strategy="NONE"/>
            <expiration max-idle="-1"/>
            <persistence>
                <file-store path="LuceneIndexes/Data" />
            </persistence>
            <indexing index="NONE"/>
            <state-transfer enabled="true" timeout="480000" await-initial-transfer="true"/>
        </distributed-cache>

        <!-- ***************************** -->
        <!--  Cache to store Lucene locks  -->
        <!-- ***************************** -->
        <replicated-cache name="LuceneIndexesLocking" mode="SYNC" remote-timeout="25000">
            <locking striping="false" acquire-timeout="10000" concurrency-level="500" write-skew="false"/>
            <transaction mode="NONE"/>
            <eviction max-entries="-1" strategy="NONE"/>   
            <expiration max-idle="-1"/>
            <persistence>
                <file-store path="LuceneIndexes/Locking" />
            </persistence>
            <indexing index="NONE"/>
            <state-transfer enabled="true" timeout="480000" await-initial-transfer="true"/>
        </replicated-cache>
    </cache-container>

</infinispan>

并且 jgroups 配置文件是使用 Infinispan 打包的默认 ec2 配置 default-jgroups-ec2.xml

有谁知道我可能哪里出错了,或者我到底需要做什么才能让它正常工作?

您的本地地址是 127.0.0.1:7800,这是默认地址。如果您需要与其他节点通信,这肯定行不通。

您还可以在日志中看到这些消息:

variable "${jgroups.s3.pre_signed_delete_url}" in S3_PING could not be substituted; pre_signed_delete_url is removed from properties
variable "${jgroups.s3.prefix}" in S3_PING could not be substituted; prefix is removed from properties
variable "${jgroups.s3.pre_signed_put_url}" in S3_PING could not be substituted; pre_signed_put_url is removed from properties

您或许应该定义这些变量。