【问题标题】:error in coracle Coherence "No storage-enabled nodes exist for service DistributedSessions"coracle Coherence 中的错误“服务 DistributedSessions 不存在启用存储的节点”
【发布时间】:2023-04-02 03:41:02
【问题描述】:

我制作了 java 应用程序来将数据加载到分布式缓存。 应用程序加载数据很好,但是当加载超过 1000 万条记录时,我收到“服务 DistributedSessions 不存在启用存储的节点”错误。但是当我加载少于 1000 万条记录时,它运行良好。 我在 Web 逻辑中创建了一个集群并加入了 4 个节点,如下所示:

• 2 个服务器(Storage enable =true)用于存储数据

• 2 个客户端(存储启用 =false)仅查看和查询

tangosol-coherence-override.xml

<cluster-config>
    <member-identity>
        <cluster-name system-property="tangosol.coherence.cluster">CLUSTER_NAME</cluster-name>
    </member-identity>
    <multicast-listener>
        <time-to-live system-property="tangosol.coherence.ttl">30</time-to-live>
        <address>224.1.1.1</address>
        <port>12346</port>
    </multicast-listener>

</cluster-config>

<logging-config>

一致性缓存配置.xml

<?xml version="1.0"?>

<serializer system-property="tangosol.coherence.serializer"/>


<socket-provider system-property="tangosol.coherence.socketprovider"/>

<cache-mapping>
  <cache-name>*</cache-name>
  <scheme-name>example-distributed</scheme-name>
</cache-mapping>

      <scheme-name>example-distributed</scheme-name>

      <service-name>DistributedCache</service-name>

  <backing-map-scheme>
    <local-scheme>
      <scheme-ref>example-binary-backing-map</scheme-ref>
    </local-scheme>
  </backing-map-scheme>

  <autostart>true</autostart>
</distributed-scheme>

<local-scheme>
  <scheme-name>example-binary-backing-map</scheme-name>

  <eviction-policy>HYBRID</eviction-policy>
  <high-units>{back-size-limit 0}</high-units>
  <unit-calculator>BINARY</unit-calculator>
  <expiry-delay>0</expiry-delay>

  <cachestore-scheme></cachestore-scheme>
</local-scheme>

服务器参数:

-Xms6g

-Xmx12g

-Xincgc

-XX:-UseGCOverheadLimit

-Dtangosol.coherence.distributed.localstorage=true

-Dtangosol.coherence.cluster=CLUSTER_NAME

-Dtangosol.coherence.clusteraddress=224.1.1.1

-Dtangosol.coherence.clusterport=12346

客户论证:

-Xms1g

-Xmx1g

-Xincgc

-XX:-UseGCOverheadLimit

-Dtangosol.coherence.distributed.localstorage=false

-Dtangosol.coherence.session.localstorage=true

-Dtangosol.coherence.cluster=CLUSTER_NAME

-Dtangosol.coherence.clusteraddress=224.1.1.1

-Dtangosol.coherence.clusterport=12346

【问题讨论】:

    标签: java hibernate caching oracle-coherence


    【解决方案1】:

    Coherence 要求集群中至少有一台启用存储的服务器。您启动的缓存服务器未启用存储。

    例如,在 coherence 安装的 .\bin 目录中,有一个 coherence.cmd/sh 默认情况下,它没有启用存储。您可以运行 cache-server.cmd 来启动启用存储的缓存服务器。然后,在另一个窗口中运行 coherence.cmd 以启动第二个禁用存储的服务器。

    或者,您可以编辑 coherence.cmd 以将“set storage_enabled=false”更改为“set storage_enabled=true”。然后您应该能够从 coherence.cmd 命令提示符将数据放入缓存中。

    或者:您可以使用 (-Dtangosol.coherence.distributed.localstorage=true) 在其中一个虚拟机中启用本地存储。

    如果它不起作用,则可能是内存问题“内存不足,无法加载任何进一步的数据。”。

    【讨论】:

    • 关于 Coherence 12.2.1 的说明:系统属性名称已变为“coherence.distributed.localstorage”
    【解决方案2】:

    据我所知,localstorage=false 对服务说要完全避免加载数据,所以超过 10 M 的记录,我猜你连贯性内存不足,无法加载更多数据。尝试更改您的驱逐政策,但从我的角度来看,您的 localstorage 可能是正确的。此属性在代理上使用,以便说明它们是否也充当服务器。

    【讨论】:

    • 根据 oracle 文档 localstorage=false 表示当前的 JVM 禁用存储但不是所有 JVM
    • 没错,所以这个特定的节点不会用于保存,也不会用于写入或读取,因此禁用非代理 JVM 上的本地存储没有意义
    【解决方案3】:

    在启用存储的服务器的 Coherence 缓存配置中,您需要对 DistributedSessions 服务进行配置。看起来您使用的是示例配置而不是真实配置。

    如果它工作到某个点(1000 万?)然后失败,那么您需要找出问题所在(例如,启用存储的服务器上出现异常?)

    【讨论】:

      【解决方案4】:

      我通过增加 2 个存储服务器的内存来解决我的问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 2018-09-29
        • 2016-10-01
        • 2014-07-27
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        相关资源
        最近更新 更多