提问者:小点点

Pivotal GemFire 9.1.1:未在集群中创建复制区域


我在两台unix机器上有一个有2个定位器和2个服务器的GemFire集群。我正在运行一个Spring Boot应用程序,该应用程序以对等方式加入GemFire集群,并尝试创建复制区域,使用Spring Data GemFire加载区域。一旦Spring Boot应用程序终止,我就看不到集群中的区域/数据。

我错过了什么吗?

GemFire集群没有使用cache. xml或SpringXML来引导区域。我的想法是通过一个独立的程序创建区域并使其在集群中可用。SDGF版本是2.0.7

gefire-config. xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:gfe="http://www.springframework.org/schema/gemfire"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
                http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <util:properties id="gemfireProperties">
        <prop key="locators">unix_machine1[10334],unix_machine2[10334]</prop>
        <prop key="mcast-port">0</prop>
    </util:properties>

    <bean id="autoSerializer" class="org.apache.geode.pdx.ReflectionBasedAutoSerializer">

    <gfe:cache properties-ref="gemfireProperties" pdx-serializer-ref="autoSerializer" pdx-read-serialized="true"/>

    <gfe:replicated-region id="Test" ignore-if-exists="true"/>

    <gfe:replicated-region id="xyz" ignore-if-exists="true"/>

</beans>

期望是当Spring Boot应用程序终止时,应在集群中创建Region。


共2个答案

匿名用户

这里最简单的方法是使用集群配置服务,并通过gfsh创建区域。有关详细信息,请参阅以下链接

https://docs.spring.io/spring-gemfire/docs/current/reference/html/#bootstrap:cache:advanced

请参阅使用基于集群的配置部分

有关集群配置的更多信息,请参阅以下链接

http://gemfire.docs.pivotal.io/97/geode/configuring/cluster_config/gfsh_persist.html

您的客户端代码可能是一个连接到gefire集群的简单gefire客户端。

匿名用户

你的期望是不正确的。这不是Spring的限制,而是GemFire工作方式的副作用。

如果要使用GemFireAPI或纯cache. xml配置集群的GemFire对等缓存实例/成员,则集群也不会“记住”该配置。

当使用GemFireAPI、cache. xml或Spring配置(SpringXML或JavaConfig)时,配置是成员本地的。在GemFire的Cluster Configuration Service之前,管理员需要将配置(例如cache.xml)分布在将形成集群的所有对等成员之间。

然后出现了集群配置服务,它使用户能够使用Gfsh定义他们的配置。在Spring config中,当配置/无融资创业集群的对等缓存成员时,您可以启用集群配置来配置成员,例如:

<gfe:cache use-cluster-configuration="true" ... />

正如这里所指出的(第4项)。

但是,使用Gfsh配置每个GemFire对象(区域索引DiskStores等)可能非常乏味,尤其是如果您有很多区域。此外,并非所有开发人员都想使用shell工具。一些开发团队希望与应用程序一起版本配置,这很有意义。

鉴于您正在使用Spring Boot,您应该在此处查看Pivotal GemFire的Spring Boot。

启动集群的另一种方法是使用Spring而不是Gfsh配置和引导成员。我这里有一个例子。当然,您可以使用Spring Boot FAT JAR从命令行运行Spring Boot应用程序。

当然,一些管理员/操作员阻止开发团队以这种方式无融资创业,而是希望团队使用数据库提供的工具(例如Gfsh)。

如果这是您的情况,那么开发Spring Boot、GemFireClientCache应用程序连接到使用Gfsh启动的独立集群可能会更好。

您仍然可以执行非常小的配置,例如:

start locator --name=LocatorOne
start server --name=ServerOne
start server --name=ServerTwo
...

然后让您的Spring Boot、客户端应用程序使用SDG的集群配置推送功能驱动集群的配置(即区域、索引等)。

有许多不同的选择,所以选择是你的。你需要决定哪一个最适合你的需求。

希望这有帮助。