【问题标题】:Pivotal Gemfire NoAvailableLocatorsException关键 Gemfire NoAvailableLocatorsException
【发布时间】:2015-10-05 22:45:41
【问题描述】:

我有一个运行 8.1.0 版的 gemfire 集群,运行两台服务器和一个定位器。使用 Pulse UI 应用程序我可以看到集群已启动并正在运行。

通过我的笔记本电脑,我可以 ping 通集群运行所在的 RHEL unix 机器的 IP。

我还能够使用笔记本电脑上的 gfsh 命令成功连接到集群:

gfsh>connect --locator=locator-ip[15101]`

但我尝试使用以下 spring data gemfire 缓存 xml 从在我的笔记本电脑中运行的客户端 spring 应用程序(使用 spring data gemfire 1.5.0.RELEASE)连接到集群:

客户端缓存xml如下:

<gfe:pool id="gemfire-pool" subscription-enabled="true" >
        <gfe:locator host="locator-ip" port="locator-port"/>
</gfe:pool>

但我遇到了以下异常:

com.gemstone.gemfire.cache.client.NoAvailableLocatorsException: Unable to connect to any locators in the list [locator-host:15101, locator-ip/locator-ip:15101]
    at com.gemstone.gemfire.cache.client.internal.AutoConnectionSourceImpl.findServer(AutoConnectionSourceImpl.java:136)
    at com.gemstone.gemfire.cache.client.internal.ConnectionFactoryImpl.createClientToServerConnection(ConnectionFactoryImpl.java:206)
    at com.gemstone.gemfire.cache.client.internal.pooling.ConnectionManagerImpl.borrowConnection(ConnectionManagerImpl.java:214)

已经发布了一个类似的问题

Gemfire client server topology throws NoAvailableLocatorsException

但上述错误在 ConnectionManagerImpl 类的不同方法中。

编辑: 缓存 xml 具有以下客户端缓存声明:

<util:properties id="gemfire-props">
        <prop key="log-level">error</prop>
</util:properties>

<gfe:client-cache id="gemfireCache" pool-name="gemfire-pool" properties-ref="gemfire-props">

<gfe:client-region id="skuInfoRegionBean" pool-name="gemfire-pool"
        name="SKU_INFO" shortcut="CACHING_PROXY">
</gfe:client-region>

【问题讨论】:

    标签: gemfire spring-data-gemfire


    【解决方案1】:

    您正在运行什么版本的 Spring Data GemFireGemFire?此外,如果您可以共享配置连接到运行 RHEL 服务器的集群的 GemFire ClientCache(和池)的 Spring 配置,那将很有帮助。

    我的理解是,您的集群在“远程”RHEL UNIX 机器上运行,而您的客户端在您的笔记本电脑上运行,对吗?

    根据您的 Gfsh connect 命令语法,您的 Spring 配置需要看起来类似于...

    <gfe:pool ...>
      <gfe:locator host="locator-ip" port="15101"/>
    </gfe:pool>
    
    <gfe:client-cache/>
    
    ...
    

    NoAvailableLocatorsException 消息似乎很奇怪...“无法连接到列表中的任何定位器 [locator-host:15101, locator-ip/locator-ip:15101] ”而且不太正确。

    【讨论】:

    • 好吧,您重命名了 Pool bean,所以您是否在各个客户端区域上指定了 Pool...
      是的,我知道这一点...我编辑了问题以添加更多详细信息
    • 对,但是 NoAvailableLocatorsException 消息有点误导。 IE。异常消息正在调用 2 个单独的定位器“[locator-host:15101, locator-ip/locator-ip:15101]”在同一个端口上侦听,但在看似不同的“主机”上(例如“定位器主机”和“定位器” -ip”)。 (旁注:我猜你在这里用别名代替了实际名称/IP)。但是,您的 Spring(池 bean)配置仅声明 1 个定位器()...在“locator-ip”上运行的定位器正在侦听 15101。
    • GemFire 不这么认为,因此是“[value1, value2]”。无论如何,如果如您所说,locator-host == locator-ip,那么它应该没关系。但是,根据您的 Spring 配置,异常的错误消息中的值数组中应该只有 1 值。无论如何,在这种情况下,我认为 Spring Data GemFire 不会有问题。 SDG 的 PoolFactoryBean 只是使用 GemFire 的 PoolFactory 来配置(使用 Locator 使用 addLocator(host, port))并创建一个 Pool 实例。这可以在可能的网络问题之外可靠地工作。
    • 1 更多建议...开始减少等式中的变量数量,即通过在本地(在您的本地主机上)运行客户端和服务器来测试您的客户端和服务器之间的 Spring 配置。这将告诉您是否有配置或网络问题。另外,忘了提一下,不要指望gfsh&gt;connect --locator=host[port] 与客户端缓存池连接到相同的定位器相同。代码路径明显不同,最终将使用的协议也不同。
    【解决方案2】:

    这是一个网络问题。当我在办公室尝试时它可以工作,但不能通过 vpn 在家里工作。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签