coracle Coherence 中的错误 "No storage-enabled nodes exist for service DistributedSessions"
error in coracle Coherence "No storage-enabled nodes exist for service DistributedSessions"
我制作了 java 应用程序来将数据加载到分布式缓存。
应用程序加载数据很好,但是当加载超过 1000 万条记录时,我得到“服务 DistributedSessions 不存在启用存储的节点”error.but 当我加载少于 1000 万条记录时它工作正常。
我在web逻辑中创建一个集群,加入4个节点如下:
• 2 台服务器(存储启用 =true)用于存储数据
• 2 个客户端(存储启用 =false)仅供查看和查询
tangosol-连贯性-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>
一致性缓存-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=真
-Dtangosol.coherence.cluster=CLUSTER_NAME
-Dtangosol.coherence.cluster地址=224.1.1.1
-Dtangosol.coherence.cluster端口=12346
客户端参数:
-Xms1g
-Xmx1g
-Xincgc
-XX:-UseGCOverheadLimit
-Dtangosol.coherence.distributed.localstorage=假
-Dtangosol.coherence.session.localstorage=真
-Dtangosol.coherence.cluster=CLUSTER_NAME
-Dtangosol.coherence.cluster地址=224.1.1.1
-Dtangosol.coherence.cluster端口=12346
据我所知,localstorage=false 告诉服务完全避免加载数据,所以超过 10 M 的记录,我猜你连贯性缺乏内存,无法加载更多数据。也尝试更改您的驱逐政策,但从我的角度来看,您的 localstorage 可能是正确的。这个 属性 在代理上使用,以说明它们是否也充当服务器。
在支持存储的服务器的 Coherence 缓存配置中,您需要有一个 DistributedSessions 服务的配置。看起来您使用的是示例配置而不是真实配置。
如果它工作到一定程度(1000 万?)然后失败,那么您需要弄清楚出了什么问题(例如启用存储的服务器上的异常?)
Coherence 要求集群中至少有一台支持存储的服务器。您启动的缓存服务器未启用存储。
例如,在 coherence 安装的 .\bin 目录中,有一个 coherence.cmd/sh
默认情况下,它没有启用存储。您可以 运行 cache-server.cmd 启动启用存储的缓存服务器。然后,运行 coherence.cmd 在另一个 windows 中启动第二个存储禁用服务器。
或者,您可以编辑 coherence.cmd 以将 "set storage_enabled=false
" 更改为“set storage_enabled=true
”。然后您应该能够从 coherence.cmd 命令提示符将数据放入缓存。
或者:您可以使用 (-Dtangosol.coherence.distributed.localstorage=true
) 在其中一个虚拟机中启用本地存储。
如果它不起作用,则可能是内存问题 "not sufficient memory and cannot to load any further data."。
我通过增加 2 个存储服务器的内存解决了我的问题
我制作了 java 应用程序来将数据加载到分布式缓存。 应用程序加载数据很好,但是当加载超过 1000 万条记录时,我得到“服务 DistributedSessions 不存在启用存储的节点”error.but 当我加载少于 1000 万条记录时它工作正常。 我在web逻辑中创建一个集群,加入4个节点如下:
• 2 台服务器(存储启用 =true)用于存储数据
• 2 个客户端(存储启用 =false)仅供查看和查询
tangosol-连贯性-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>
一致性缓存-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=真
-Dtangosol.coherence.cluster=CLUSTER_NAME
-Dtangosol.coherence.cluster地址=224.1.1.1
-Dtangosol.coherence.cluster端口=12346
客户端参数:
-Xms1g
-Xmx1g
-Xincgc
-XX:-UseGCOverheadLimit
-Dtangosol.coherence.distributed.localstorage=假
-Dtangosol.coherence.session.localstorage=真
-Dtangosol.coherence.cluster=CLUSTER_NAME
-Dtangosol.coherence.cluster地址=224.1.1.1
-Dtangosol.coherence.cluster端口=12346
据我所知,localstorage=false 告诉服务完全避免加载数据,所以超过 10 M 的记录,我猜你连贯性缺乏内存,无法加载更多数据。也尝试更改您的驱逐政策,但从我的角度来看,您的 localstorage 可能是正确的。这个 属性 在代理上使用,以说明它们是否也充当服务器。
在支持存储的服务器的 Coherence 缓存配置中,您需要有一个 DistributedSessions 服务的配置。看起来您使用的是示例配置而不是真实配置。
如果它工作到一定程度(1000 万?)然后失败,那么您需要弄清楚出了什么问题(例如启用存储的服务器上的异常?)
Coherence 要求集群中至少有一台支持存储的服务器。您启动的缓存服务器未启用存储。
例如,在 coherence 安装的 .\bin 目录中,有一个 coherence.cmd/sh
默认情况下,它没有启用存储。您可以 运行 cache-server.cmd 启动启用存储的缓存服务器。然后,运行 coherence.cmd 在另一个 windows 中启动第二个存储禁用服务器。
或者,您可以编辑 coherence.cmd 以将 "set storage_enabled=false
" 更改为“set storage_enabled=true
”。然后您应该能够从 coherence.cmd 命令提示符将数据放入缓存。
或者:您可以使用 (-Dtangosol.coherence.distributed.localstorage=true
) 在其中一个虚拟机中启用本地存储。
如果它不起作用,则可能是内存问题 "not sufficient memory and cannot to load any further data."。
我通过增加 2 个存储服务器的内存解决了我的问题